取消
显示结果 
搜索替代 
您的意思是: 
cancel
公告

December 2020

December 2020

协作设备抓包后提取H263,H264视频流,并在本地播放的方法

13810
查看次数
75
有帮助
18
评论
如果图片不是很清晰,请下载附件的PDF查看高清版本:
协作设备抓包后提取H263,H264视频流

在协作设备的排错过程中,大多数时候我们得到了呼叫的抓包文件,只专注于分析丢包率、流控信息等其它对于排错关键的数值信息。

为了得到更加直观的信息来进行排错。通过我的多次尝试,只要我们写出对应的SDP文件并且导入VLC播放器,再使用rtptools作为媒体服务器播放,就能模拟数据包内的RTP流,向本地播放器发送视频信号。

不论是双流信号还是双向的视频流信号,都能被轻松解码成本地播放器能够播放的视频。

使用情形
解码数据包内RTP Stream承载的视频流,并且在本地播放以验证清晰度、传输质量等。
目前主流的视频编解码协议是H263H264,但H264更常用。
本方法适用于SIP发起的未加密的呼叫:SIP over TCP/UDP

原理
1. 提取数据包中的RTP流,保存为rtpdump文件,使用rtptools包含的rtpdump工具打包成rtpplay工具能够播放的文件,并且使用rtpplay工具作为服务器在本地播放这个RTP流。
2. 根据数据包内的SDP信息编写对应的SDP文件,使用VLC播放器打开这个SDP文件作为客户端接收rtpplay发来的RTP流,解码并播放视频。

所需工具
1. Wireshark
2. rtptools
3. VLC播放器

操作过程
Wireshark提取RTP Stream,打开待分析的包,点击:
161829i27sp32610a9bxhq.png

选中需要分析的呼叫,点击Flow:
161859w8qw7zcerczwpqpc.png

记录H264对应的SSRC:
161922y9n5c4npxcdtp7bz.png

打开RTP>>Show All Streams
161951pttztj3gzt3fdwiz.png

通过SSRC找到对应的H264流,点击Save As
162025p4kjsh61m4a4phmj.png

取个名字,不带后缀名,点击OK
162048f87fqu2qx0z2foc8.png

2. 打包RTP流;打开Windows的命令行, 切换到rtptools的目录,或者预先将此目录加入Path变量中

162111tlty1naxlzt1iryf.png

使用rtpdump工具打包RTP流,成为rtpplay工具可播放的格式:
rtpdump –F dump –f ..\RTPtest –o RTPtest.rtp

-F参数指定payload类型
-f 参数指定源文件
-o 参数指定目标文件
162205cmpt6a04w70p0zhp.png

3. 编写SDP文件,使用Wireshark查看这通呼叫的最后一个ACK SDP消息:
162236z7va7vu55aaxmrv5.png

根据SDP中的Video信息,编写一个最简单的SDP文件,用于VLC播放器作为客户端接收媒体流。
162345u8gz68gwbgwjjwkm.png
testRTP.sdp 在127.0.0.1:5002接收H264视频流

m=video 5002 RTP/AVP 126
c=IN IP4 127.0.0.1
a=rtpmap:126 H264/90000
a=fmtp:126 profile-level-id=428016;packetization-mode=1;max-mbps=69500;max-fs=2304;max-cpb=200;max-br=5000;max-rcmd-nalu-size=884736;max-smbps=69500;max-fps=6000

4. 使用VLC导入SDP文件,并开始播放(因为RTP/RTCP需要校验包头,需要先打开客户端)

点击打开网络串流:
162413a23d0g9qk92zkzpg.png

按下图进行设置并且添加刚刚编写的SDP文件。
162435esn7jc9rr9kryn5v.png
设置完成后点击播放:
162458t3yzcqkx4yc4z531.png

5. 使用rtpplay作为服务器端发送视频流,在127.0.0.1:5002发送

162515cuusjs2jseukeu7z.png
rtpplay –T –f RTPtest.rtp127.0.0.1/5002

回车后可以看到VLC播放器开始正常播放视频:

扩展
如果需要加入音频流,可以在SDP文件中加入对应的行,并且再开启一个命令行窗口运行rtpplay工具来发送音频即可。

是不是非常有趣~~我正在研究使用这种方式播放更多的视频,还有如何使用Wireshark解码出H264的裸码流,可以直接使用比如暴风影音这样的软件直接播放。

关于更多RTP的知识,请参考RFC1889
https://www.ietf.org/rfc/rfc1889.txt

评论
taosun2
Cisco Employee
赞!!!
lelwu
Cisco Employee
:'(:'(沙发
shlei
Cisco Employee
赞!!!
yanzha4
Rising star
好文章
xiaoloya
Beginner
好文章:):):):):):):):):):):):):):):)
Fusen Huang
Cisco Employee
给力
congx
Cisco Employee
楼主好人 么么哒
chundli
Cisco Employee
楼主大神啊~~~~膜拜
yinba
Cisco Employee
{:3_41:}
shunzhou
Cisco Employee
谢谢楼主~太赞了!!
Eco Chen
Cisco Employee
{:3_59:}{:3_59:}
kuanchen
Cisco Employee
好文章,谢谢分享
blgao
Cisco Employee
好文章要支持!
fusong
Cisco Employee
qinlu2
Cisco Employee
赞~~~~
创建
认可您的同行
Content for Community-Ad