一、 MP2T視頻協議
視頻直播一般使用MP2T(ISO/IEC 13818-1,MPEG-TS)協議, 具體有如下幾種:

常用的是MP2T/RTP/UDP和MP2T/ UDP,主要是直播視頻不需要重傳。
每7個MP2T包打包為一個RTP,然后每個RTP再打包為一個UDP。或者每7個MP2T包也可以直接打包為一個UDP。(由信令決定TS所屬的UDP端口號)。
如果視頻速率傳輸方式是CBR(const bit rate),如果實際視頻源壓縮比較高或者P幀,則填充無有效載荷的包。注: VBR(variable bit rate)
MP2T包:PDU 188B(含頭),頭部4B,頭部字段如下:
sync_byte 同步字節,固定為0x47 ,表示后面的是一個TS分組,包中數據是不會出現0x47
transport_error_indicator傳輸錯誤標志位,一般傳輸錯誤的話就不會處理這個包了
payload_unit_start_indicator這個位功能有點復雜,字面意思是有效負載的開始標志,根據后面有效負載的內容不同功能也不同
transport_priority 傳輸優先級位,1表示高優先級,傳輸機制可能用到,解碼好像用不着。
PID指出了這個包的有效負載數據的類型,音頻 或 視頻 或者 播放目錄。
transport_scrambling_control加密標志位,表示TS分組有效負載的加密模式。TS分組首部(也就是前面這32bit)是不應被加密的,00表示未加密。
adaption_field_control 翻譯為“調整字段控制”,表示TS分組首部后面是否跟隨有調整字段和有效負載。01僅含有效負載,10僅含調整字段,11含有調整字段和有效負載。為00的話解碼器不進行處理。空分組沒有調整字段
continuity_counter 一個4bit的計數器,范圍0-15,具有相同的PID的TS分組傳輸時每次加1,到15后清0。不過,有些情況下是不計數的。如下:(1)TS分組無有效負載(2)復制的TS分組和原分組這個值一樣(3)標志discontinuity_indicator為1時
adaptation_field()調整字段的處理


二、 視頻丟幀分析
1、 如果UDP上面直接是mp2t包(ISO/IEC的包),過濾UDP視頻流
輸入過濾表達式 udp.stream==流號,保存(File->Export Specified Packets)。

2、 如果是UDP上面是RTP,需要先把data解碼設置為RTP解碼


3、 UDP視頻流丟幀分析
查看wireshark診斷信息(Analyze->Expert Info), Error中是否有Malform MP2T信息。

丟幀判斷依據: 相同PID的連續號CC在[0,15] 循環,不連續則為丟幀。如有丟幀,查看對應(最靠近視頻udp層)的ip層,ip.id是否連續。
[ip.id連續] 攝像頭視頻源導致丟幀
[ip.id不連續] 最有可能為丟包導致丟幀,但要排除以下2點導致的id不連續的因素
- 視頻業務層面的路由節點修改ip.id
- 攝像頭把中間ip.id分配給其他協議包,如TCP/ICMP等。如加上其他包,業務層面的ip.id連續,則仍為攝像頭視頻源導致丟幀


三、 視頻抖動分析
4、 UDP視頻流抖動分析
查看IO統計信息(Statistics->IO Graph), 輸出每ms/s的速率,發包間隔。
輸出ms/s級速率(點copy)


輸出發包間隔
對ms級速率從1一直編號,刷選速率非0項,編號前后相減,即為間隔(單位ms)
5、 輸出非0項的發包間隔和速率的均值(average),偏差(stdev),最大值(max)
四、 視頻還原分析
6、 還原UDP/MP2T視頻
選擇一個UDP/MP2T視頻流,Analyze->Follow UDP Stream,

選擇視頻數據的方向,保存為Raw的數據,並命名為.ts的文件。

另新版wireshark顯示如下:

7、 播放視頻
如果視頻分辨率比較高,本機可能無法播放。
用VLC或Potplayer視頻播放器播放,就可以看到這個視頻流的表現效果了。
五、 央視視頻源發包規律
I幀數據 155KB

P幀數據 24KB

