没有access_unit_delimiter的视频文件怎么进行图像分界判断

来自:http://www.360doc.com/content/13/0926/08/14029021_317144348.shtml

=====================

最近在进行视频帧类型判断及定位的工作,根据自己的理解写的代码对大部分h264视频进行帧判断都没有问题,因为大部分视频数据有分界符access_unit_delimiter来标志新的picture的开始。
但是最近遇到一个无法解析帧类型的文件,经过分析发现该文件没有access_unit_delimiter单元,而我的代码是根据access_unit_delimiter来确定新图像的开始并解析帧类型的,导致分析完整个文件后,一帧也没找到。
如果没有access_unit_delimiter,该怎样来确定一个新图像的开始?就是根据nal_unit_type为1或5来默认新图像的开始?希望有经验的朋友帮忙解答一下疑问,非常感谢。

====================

没有 access_unit_delimiter 就找开始前缀(0X00 00 00 01 或者 0X00 00 01)。如果是 RTP 格式码流,在对码流的封装文件中有帧边界定位信息(例如用 H.264 编码的 MP4 文件,在文件中本身就包含每帧的长度信息)。

====================

昨天在论坛里看了以前大部分有关nalu开始前缀和图像分界的帖子,我现在想找到一种可靠通用的定位一幅图像开始的方法,由于我做的是TS流的解析,PES封装的应该是字节流NAL单元吧,本来看了前面的帖子想用“四字节起始码+nal_unit_type”作为判断图像开始的方法,以前的帖子里也有人很肯定的说JM某版本编码后的流如果分片那么只有第一个slice的开始码是四字节开始码,后续slice开始码只有三字节起始码,如果这个是标准中严格规定的规则的话,用四字节来定位图像开始倒是最好的选择,但是分析了几个码流发现这个根本不是严格遵守的,不管第几个slice其开始码都可以是四字节头,因此四字节作为图像分界判断看来行不通。
另外我还有以下疑问,希望大家帮忙解惑:
1、只有一个slice且其type为I类型的非IDR帧是否可random access?只判断第一个slice的type来作为整个帧的类型可以吗?
2、没有分割的编码条带是不是意味着在一个访问单元内只有一个编码条带?从码流中如何得知一个图像分几个slice?

====================

1、“……如果这个是标准中严格规定的规则的话……”
——是标准规定的。标准规定的是每个 AU 的第一个 NALU 是四字节,因此 SPS/PPS,access_unit_delimiter 等也都是四字节(所以你想用四字节来判断图像开始的方法从这个方面说也是不可行的)。你所看到的非第一个 NALU 是四字节那也不会有问题,因为其中第一个 00 是被看做属于前一个 NALU 的。所以仍然是三字节。详细内容看 200503 版标准/附录 B;

2、只有一个slice且其type为I类型的非IDR帧是否可random access?
——从理论上讲必须是 IDR 才可以。因为在 H.264 中一幅图像可以参考你所谓的 I 帧前面的图像;当然是实际工程实现中,一般没有人让 I 以后的图像参考 I 以前的图像;

3、只判断第一个slice的type来作为整个帧的类型可以吗?
——除非该 slice 的 slice type = 5~9,那么改图像的其余 slice 的类型就与它相同;

4、从码流中如何得知一个图像分几个slice?
——无法从码流中得知。找到下一幅图像的开始就知道当前图像有几个 slice 了。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值