当前位置: 代码迷 >> 多核软件开发 >> 如果判断一个h.264的码流丢失了NAL单元
  详细解决方案

如果判断一个h.264的码流丢失了NAL单元

热度:7937   发布时间:2013-02-26 00:00:00.0
求教:如果判断一个h.264的码流丢失了NAL单元
比如说一个h.264编码的文件,在传输的过程中可能会有nal的丢失,请问如何在接收的时候确定是哪些nal丢失了

------解决方案--------------------------------------------------------
你是怎么传输的,用RTP的话,会有序号的啊
------解决方案--------------------------------------------------------
nal 又没有包序号啥的 你杂能知道,那你自己封装一层吧,
------解决方案--------------------------------------------------------
能确定是否丢包了,一个nal分为若干个rtp包发送,可以根据rtp包序号来确定
丢了一帧,后面的数据再下一个I帧未来到之前会花
------解决方案--------------------------------------------------------
你可以通过pts解决乱序的问题,至于丢包不好处理,需要一个序列号。
------解决方案--------------------------------------------------------
用RTP可以很方便的判断是否丢包,丢了那些包。
而用UDP如何判断丢包,这个问题不成立。

首先,NAL必须根据网络环境的MTU值再做一次分包或者并包,独立的一个NAL一个包只是一种情况。为了程序简便,通常是做当NAL大于MTU时做分包,NAL小于MTU时独立一个包这两种情况。为了在一个NAL被分包后,仍然可以标识出一个完整的NAL,H264在独立传输NAL时必须要用RTP,利用RTP的包头来做标识。然后,NAL的PTS、DTS虽然可以通过解析SPS得到,但是为了节约网络传输流量,通常情况下是丢弃SPS、PPS、SEI这些冗余数据,利用RTP包头上的时间戳来传递PTS信息,利用RTSP协议或者SDP来交互SPS、PPS信息。

综合以上几种情况,如果按照标准协议来做,H264的NAL是无论如何也必须使用RTP进行传输。哪怕现在为了绕开丢包、网关和路由防火墙这些问题,走TCP或者HTTP传输,也是要按照RTP的方式先进行重新打包。

所以提问用UDP传输,如何判断那几个包丢失这种问题,完全就是臆想。
  相关解决方案