Ios8 在iOS 8中将h264 avcc流转换为SampleBuffer

Ios8 在iOS 8中将h264 avcc流转换为SampleBuffer,ios8,h.264,Ios8,H.264,如何在iOS 8中将h264 avcc流转换为SampleBuffer 需要样本缓冲区来执行解压缩会话它必须是Mpeg-4格式。您需要一个算法来读取原始字节流,查找NAL分隔符代码(通常为0000000 1),然后在下一个字节中查找NAL单位代码 典型的NAL单元代码为67个PPS、68个SP、41个p帧和65个I帧 通常,第一个是SP,在一个NSM可变数据中捕获这些字节,然后在另一个NSM可变数据中捕获PPS。使用带有SPS和PPS数据的CMVideoFormatDescription Cre

如何在iOS 8中将h264 avcc流转换为SampleBuffer


需要样本缓冲区来执行解压缩会话

它必须是Mpeg-4格式。您需要一个算法来读取原始字节流,查找NAL分隔符代码(通常为0000000 1),然后在下一个字节中查找NAL单位代码

典型的NAL单元代码为67个PPS、68个SP、41个p帧和65个I帧

通常,第一个是SP,在一个NSM可变数据中捕获这些字节,然后在另一个NSM可变数据中捕获PPS。使用带有SPS和PPS数据的CMVideoFormatDescription CreatefromH264参数集创建CMFormatDescription

使用CMFormatDescription使用VTDecompressionCreate创建VTDecompressionSession。 当您拥有这些数据时,将NALUnit有效负载捕获到CMBlockBuffer中,确保将分隔符代码替换为4字节长度的代码(包括单元代码在内的NALUnit长度),然后使用此代码和之前创建的格式描述创建CMSampleBuffer


现在,您已经拥有了使用VTDecompressionSessionDecodeFrame所需的一切。

您需要在创建SampleBuffer时添加一个CMTimingInfo结构,它将具有表示为CMTime对象的演示文稿时间戳。我需要在演示文稿时间戳中添加什么?这是一篇旧文章,不知道它现在是否已解决。但avcc格式不使用00000001规则来存储NAL单位。需要检查额外的数据才能解析avcc h264的NAL单元。我想你可以纠正通常的00000001部分