Har*_*rry 3 mpeg-2 h.264 mpeg-4
我在PES解复用器中检测新的PES包,搜索packet_start_code_prefix(0x000001).当它发生时,我可以读取PES_packet_length,因此我可以从字节流中提取当前的PES包.但如果它是H.264视频流,那么PES_packet_length = 0.
在这种情况下如何提取PES包?0x000001也可能出现在H.264 nal单位字节流中,因此我不能使用此前缀来查找下一个PES数据包.
我注意到在每个H.264 PES包中,PES包中的最后一个单元是填充数据(nal_unit_type = 12).我是否需要使用此事实来检测当前PES数据包的结束?
通常不,如果不知道PES包的长度,这是不可能的.但是,因为你限制自己使用H.264,我们可以利用幸运的意外.
h.264 stream_id是0xE0.nalu的第一位始终为0.因此000001E0在附件B Stream中恰好是非法的.您仍然必须解析PES头以确定其长度,因为PES头之后的第一个字节可能是前一个NALU的尾部,因此可能不一定是附件b起始码.
为后代保留这个.您不能简单地查找起始码,需要解析数据包.如果这是传输流您可以通过查找有效负载单元启动指示符来找到PES的起点.然后解析自适应字段(如果存在).现在你将得到你的起始代码(在这种情况下为000001E0.然后看看标志.解析33位PTS/DTS(你需要播放)并跳过任何可选字段(由PES标题中的标志确定)你现在将启动你的h.264 ES.继续解析TS.对于每个具有相同PID和有效负载单元的TS开始指示器= false,你正在读取帧.一旦有效载荷单元启动指示器为真,你有一个新的PES包装机/框架.
| 归档时间: |
|
| 查看次数: |
6668 次 |
| 最近记录: |