Медиакодек Android декодирует данные на поверхность и сохраняет в mp4Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Медиакодек Android декодирует данные на поверхность и сохраняет в mp4

Сообщение Anonymous »

Поток байтов передается мне в реальном времени из внешнего источника с помощью веб-сокета.
  • Я использую привязку кодировщика к новой поверхности, но не знаю, как это сделать. чтобы получить буфер декодирования для кодирования

Код: Выделить всё

encodeSurface = encoder.createInputSurface();

  • привязать декодирование к поверхности

Код: Выделить всё

mediaCodecDecoder = MediaCodec.createDecoderByType(MediaFormat.MIMETYPE_VIDEO_HEVC);
mediaCodecDecoder.configure(format, encodeSurface , null, 0);
mediaCodecDecoder.start();
  • когда я получил данные byte[], используйте декодирование медиакодеком

Код: Выделить всё

int index = mediaCodecDecoder.dequeueInputBuffer(10_000);
ByteBuffer byteBuffer = mediaCodecDecoder.getInputBuffer(index);
byteBuffer.put(data);
mediaCodecDecoder.queueInputBuffer(index, 0, data.length,System.currentTimeMillis(),0);
int encoderStatus = mediaCodecDecoder.dequeueOutputBuffer(this.decodeBufferInfo, 1_000);
if(encoderStatus>0){
mediaCodecDecoder.releaseOutputBuffer(encoderStatus, true);
}

  • Тогда я могу напрямую получить данные из буфера кодирования

Код: Выделить всё

while(true){
int outputBufferIndex = mediaCodecEncoder.dequeueOutputBuffer(encodeBufferInfo, 10_000);
ByteBuffer encodedData = mediaCodecEncoder.getOutputBuffer(outputBufferIndex);
encodedData.position(encodeBufferInfo.offset);
encodedData.limit(encodeBufferInfo.offset + encodeBufferInfo.size);
if (videoFrameStart == 0 && encodeBufferInfo.presentationTimeUs != 0) {
videoFrameStart = encodeBufferInfo.presentationTimeUs;
}
encodeBufferInfo.presentationTimeUs -= videoFrameStart;
}
mediaMuxer.writeSampleData(trackIndex, encodedData, encodeBufferInfo);
mediaCodecEncoder.releaseOutputBuffer(outputBufferIndex, false);
Но я обнаружил, что размер моего файла составляет всего несколько сотен килобайт, а все кадры сжаты в односекундные файлы. При разложении видно, что водяной знак времени видео в файле существует.
Как получить правильный файл mp4

Подробнее здесь: https://stackoverflow.com/questions/791 ... ave-to-mp4
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»