mediaFormat.setByteBuffer("csd-0", ByteBuffer.wrap(bytes)) 其中csd-0、csd-1 这些键可以从 MediaExtractor#getTrackFormat 获取的MediaFormat中获取,这些特定的数据会在start 时自动提交给 MediaCodec,无需直接提交此数据,如果在输出缓冲区或格式更改之前调用了 flush,则会丢失提交的特定数据,就需要在 queueInputBu...
編解碼器特定數據也可以包含在 ByteBuffer 專案中傳遞的格式#configure configure,其中包含索引鍵 「csd-0」、“csd-1 等。這些索引鍵一律包含在從 取得的MediaExtractor#getTrackFormat MediaExtractor追蹤MediaFormat中。 格式的編解碼器特定數據會自動提交至編解碼器;#start您強式>「不可<」/「強」>明確<提交此數...
其中csd-0、csd-1 这些键可以从 MediaExtractor#getTrackFormat 获取的MediaFormat中获取,这些特定的数据会在start 时自动提交给 MediaCodec,无需直接提交此数据,如果在输出缓冲区或格式更改之前调用了 flush,则会丢失提交的特定数据,就需要在 queueInputBuffer 的调用中使用标志 BUFFER_FLAG_CODEC_CONFIG 标记这类数据。
// extradata中是Annex-B格式的SPS、PPS NALU数据 //SPS设为"csd-0", PPS设为"csd-1" mediaFormat.setByteBuffer("csd-0", extradata); // ... mediaCodec.configure(mediaFormat, surface, 0, 0); // ... 对于mp4/flv/mkv等封装,我们得到的是AVCC格式的extradata,需要先将该extradata转换为Annex-...
1// 获取可用的输入缓冲区的索引 2public int dequeueInputBuffer (longtimeoutUs) 3// 获取输入缓冲区 4public ByteBuffer getInputBuffer(intindex) 5// 将填满数据的inputBuffer提交到编码队列 6public final void queueInputBuffer(intindex,intoffset,intsize,longpresentationTimeUs,intflags) ...
当包含音频数据时,压缩缓冲区中通常包含 n(n >= 1) 个编码过的音频帧。无论压缩缓冲区中包含几个编码过的音频帧,缓冲区的数据都是在帧的边界开始或结束;如果想要在任意字节开始或结束,需要给 MediaCodec 设置 BUFFER_FLAG_PARTIAL_FRAME 标记。 注意音频数据是流式的,本身没有明确的一帧帧的概念,在实际的应用...
(MediaFormat.KEY_WIDTH,width);mediaFormat.setInteger(MediaFormat.KEY_HEIGHT,height);mediaFormat.setLong(MediaFormat.KEY_MAX_INPUT_SIZE,width*height);mediaFormat.setByteBuffer(“csd-0”,ByteBuffer.wrap(csd0));//avCodecContext->extradatamediaFormat.setByteBuffer("csd-1",ByteBuffer.wrap(csd1));//...
//SPS设为"csd-0", PPS设为"csd-1" mediaFormat.setByteBuffer("csd-0", extradata); // ... mediaCodec.configure(mediaFormat, surface, 0, 0); // ... 对于mp4/flv/mkv等封装,我们得到的是AVCC格式的extradata,需要先将该extradata转换为Annex-B格式的两个NALU, 然后用startcode进行分割。
A3.一个比较常见的错误就是忽略设置Codec-Specific Data(CSD),这个在文档中简略的提到过,有两个key,“csd-0”,“csd-1”,这个相当于是一系列元数据的序列参数集合,我们只需要直到这个会在MediaCodec 编码的时候生成,并且在MediaCodec 解码的时候需要它。如果你直接把编码器输出传递给解码器,就会发现第一个包里面有...
1// csd-0、csd-1、csd-2同理 2val bytes = byteArrayOf(0x00.toByte(), 0x01.toByte()) 3mediaFormat.setByteBuffer("csd-0", ByteBuffer.wrap(bytes)) 其中csd-0、csd-1 这些键可以从 MediaExtractor#getTrackFormat 获取的MediaFormat中获取,这些特定的数据会在start 时自动提交给 MediaCodec,无需直...