以下將紀錄如何使用 wireshark 將串流中的封包取出,儲存為檔案之後,使其可利用一般播放器進行播放。
實驗步驟如下:
1. 使用 wireshark 將封包存成 pcap
2. 使用 wireshark 打開儲存的 pcap 檔案
3. 透過以下操作,便可以將 pcap 檔案內的 RTP payload 內的資料全部輸出成一個檔案
[Telephony] -> [RTP] -> [Stream Anaysis]
Press [Save Payload]
Press [OK]
4. 使用 Winhex 打開儲存後的檔案(2013-06-02-h264),與 wireshark 內的 RTP payload內容進行比較,可發現內容皆相同。
5. 直接使用 ffplay 或 VLC 進行撥放,無法正確撥放。
問題分析
如果取出的 RTP payload 是 G.711 ,可以直接使用 Wireshark 進行撥放,可參考wireshark提供的範例。
但是我的目的是 H.264的串流,測試結果發現,雖然已經可以正確地將 RTP payload都存成檔案,但是並不會自動加上 start code (0x00000001),因此無法進行撥放。
想要將 h.264 的串流資料直接存成一個可以撥放的 H.264 檔案,根據網路搜尋的結果,目前已知有兩個方法,整理如下:
1. 透過 wireshark 將 pcap自行撰寫 LUA Script。
這裡有個lua例子子 http://blog.csdn.net/jasonhwang/article/details/7359095 ,但是只能夠捉出 RTP over UDP 的封包,執行結果如下:
註1:Wireshark 需先設定 edit-->preference--》protocol-->H264,填上 rtp dynamic payload type,例如:96,接著才能用此 Script 進行輸出。
註2:請使用administor權限執行 wireshark, 輸出後的檔案會放在 C:\Program Files\Wireshark\
2. 使用 videosnarf 工具程式。(這個方法我試不出來 :-( )
使用下列指令 "videosnarf -i filename.pcap -c"
參考資料
https://supportforums.cisco.com/thread/2152741
http://blog.csdn.net/jasonhwang/article/details/7359095
http://ffmpeg-users.933282.n4.nabble.com/Extracing-H264-from-RTP-packets-td4654536.html
http://www.it610.com/article/4493503.htm
http://albert-oma.blogspot.com/2013/06/wireshark-h264.html
沒有留言:
張貼留言