在做sip、GB28181或者其他网络视频的业友们肯定会遇到这样的问题:rtp负载中的媒体数据会有多种类型,如负载为音视频数据PS包、音视频基本流包、MPEG-4视频流包、H.264视频流包、SVAC视频流包、音频流包(见GB28181-2001,附录C)等。我们该怎么得知负载为哪种封包格式,知道了具体的封包格式后又该如何解析为可以使用播放器播放的媒体数据?今天我们就一起来聊一聊这个话题,鉴于经验有限,本节我们只探讨负载媒体类型为视频的情况,对于负载类型为音频类型,待后续研究的有收获后再和大家分享。
开始我们的正题,首先我们的视频流是通过rtp包传输的,如果符合标准,发送方应该在rtp包的包头(见下图)的‘PT’域中说明rtp负载中的视频分包类型,如果负载为音视频数据PS包该值应该为96,如果负载为MPEG-4视频流包则该值为97,如果负载为H.264视频流包则该值为98,等。
通过上面的介绍,我们已经能知道负载的封包格式,知道了负载的封包格式后,我们改怎么样进行后续的解包操作呢?这个简单,如果负载为音视频数据PS包那么我们按照RFC2250中规定的封装格式去解析负载数据包,如果负载是H.264视频流包那么我们按照RFC3984的规定去解析负载数据包(这些规定详见GB28181-2001,附录C)
本文提到的相关资料获取: