不幸的是,我无法为此提供任何代码,但我会尽力根据我如何让它工作来解释它。
所以这里是我如何使用MediaCodec类获得原始 H.264 编码视频的概述。
使用上面的链接有一个获取解码器设置以及如何使用它的示例,您需要设置它以解码 H264 AVC。
H.264 的格式是它由 NAL 单元组成,每个单元都以三个字节的起始前缀开头,值为 0x00、0x00、0x01,每个单元都有不同的类型,具体取决于这些之后的第 4 个字节的值3 个起始字节。一个 NAL 单元不是视频中的一帧,每一帧由多个 NAL 单元组成。
基本上,我编写了一个方法来查找每个单独的单元并将其传递给解码器(一个 NAL 单元作为起始前缀,之后的任何字节直到下一个起始前缀)。
现在,如果您设置了用于解码 H.264 AVC 的解码器,并且有来自解码器的 InputBuffer,那么您就可以开始了。您需要使用 NAL 单元填充此 InputBuffer 并将其传递回解码器并继续为流的长度执行此操作。但是,为了完成这项工作,我必须首先向解码器传递一个 SPS(序列参数集)NAL 单元。该单元在起始前缀(第 4 个字节)之后的字节值为 0x67,在某些设备上,除非首先收到此单元,否则解码器会崩溃。基本上直到你找到这个单元,忽略所有其他 NAL 单元并继续解析流直到你得到这个单元,然后你可以将所有其他单元传递给解码器。
有些设备首先不需要 SPS,有些则需要,但您最好先传递它。
现在,如果您有一个在配置时传递给解码器的表面,那么一旦它为一帧获得足够的 NAL 单元,它应该在表面上显示它。