Android MediaCodec AVC / H264生成无效的关键帧和编解码器配置

时间:2013-09-07 07:14:39

标签: android video h.264

我已经设置了MediaCodec来使用AVC对帧进行编码,但我似乎无法理解为什么它会给我一个简短的CODEC_CONFIG和一个非常奇怪的第一帧。

<00> 00 00 00 01 65 b8 40 7f ff f0 f4 50 00 10 7d f7 0f ​​5f 7d f7 df 7d f7 df 7d f7 df 7d f7 df 7d f7 df 7d f7 df 7d f7 df 7d f7 df 7d f7 df 7d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d5 57 5d 7 5 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 5d 75 d7 80

它的交替5d和d7

CODEC_CONFIG也比正常情况短,似乎没有意义。

<00> 00 00 00 01 67 42 c0 1e e9 01 40 7b 40 3c 22 11 a8 00 00 00 01 68 ce 06 e2

此后的帧可以。

2 个答案:

答案 0 :(得分:2)

如果不通过解析器运行它,每件事情都可以。

然而,粘贴箱正在说明。

我认为AVC编解码器数据包是有争议的。

17 00 00 00 00 00 00 00 01 67 42 c0 0d e9 02 83 f4 03 c2 21 1a 80 00 00 00 01 68 ce 06 e2

以下标记

17 01 00 00 00 00 00 00 01 65 b8 40

最后是帧间

27 01 00 00 00 00 00 00 01 41 e2 20 .....

当从附件B转到FLV时,您需要将零字节标记转换为大小标记。您还需要编写flash要求的编解码器配置。请参阅Red5编解码器。在编解码器配置中,指定用于大小标记的字节数。我认为它是2位val + 1。

SHort answer ...信任编解码器配置..信任帧输出..并再次尝试在闪存中播放。将'0001'替换为有效载荷的大小。您有正确的3字节显示时间,但保留了0001,并且您可能没有在标题中设置“大小说明符”的大小。

[2 Header] [3 Presentaion-offset] [2-4 size] payload [size]

可以在此处看到配置建筑。 http://code.google.com/p/comserver/source/browse/trunk/plugins/shoutcast/src/org/red5/server/plugin/shoutcast/marshal/transpose/VideoFramer.java#447

答案 1 :(得分:0)

因此有两种类型的NAL格式。流和分组。 GPU创建流NAL。大多数网络协议(如RTP等)都需要Packetized格式。分组解码器配置可在ISO 14496-15中的AVCDecoderConfigurationRecord下找到。您可以在ISO 14496-10中找到Stream NAL。

您实际上必须解析Stream NAL的块并将其转换为Packetized。 SPS / PPS NAL更多参与其中。只需用SPS中定义的长度参数替换00 00 00 01字节即可完成IDR等NAL。