天天看點

RTSP/SDP中的H.264配置基本參數STAP-AFU-A

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個資料包

繼續閱讀