RTSP/SDP中的H.264配置

RTSP/SDP中的H.264的参数大致如下

v=0
o=- 16128587303007558182 16128587303007558182 IN IP4 WINDOWS-75IDU9Q
s=Unnamed
i=N/A
c=IN IP4 0.0.0.0
t=0 0
a=tool:vlc 3.0.5
a=recvonly
a=type:broadcast
a=charset:UTF-8
a=control:rtsp://192.168.2.195:8554/trackID=4
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=640015;sprop-parameter-sets=Z2QAFazZQbH7/wBQAFEQAAADABAAAAMCgPFi2WA=,aOvghLIs;
a=control:rtsp://192.168.2.195:8554/trackID=5

跟H.264相关的参数已经全部由RFC规范 https://tools.ietf.org/html/rfc6184 详细定义, 如果直接看RFC, 就不需要再看本文章了.

基本参数

字段 说明
packetization-mode H.264的一个数据包NAL过大时, 需要拆分成多个包. packetization-mode决定了是否拆包, 如何拆包, 有以下值:
0,或不存在时, 表示不拆包
1, Non-Interleaved Mode, 只使用STAP-A, FU-A这两种数据包格式.
   这种模式下, 传输顺序与解码顺序是一致了, 收到一帧之后,就可以开始解码了, 因而低延时
2, 只使用STAP-B, MTAP, FU-A, FU-B这些数据包格式. 这种模式下, 传输顺序与解码顺序可能不一致, 需要缓冲一些数据, 重新排序. (我也从来没用过这种方式, 本文章就不讲了)
profile-level-id H.264的sps的第1个字节之后的3个字节(不包括第一个字节)
sprop-parameter-sets 将H.264的sps和pps转换成Base64字符串, 然后使用,拼接成一个字符串, sps在前, pps在后

上例的SDP中的SPS为

67640015acd941b1fbff005000511000000300100000030280f162d960

PPS为

68ebe084b22c

STAP-A

将多个具有相同时间戳的NAL包, 聚合成一个RTP包, 实际应用时, 我没遇到过这种场景

FU-A

将一个NAL包, 拆分成多个小的数据包, 这是最常用的场景, 比如H.264的一个I帧很大, 比如100000字节, 如果按照1400字节拆分, 需要拆分成72个数据包

猜你喜欢

转载自blog.csdn.net/wzj_whut/article/details/85536897