使用Wireshark分析SRT直播流

SRT(Secure Reliable Transport)是一种基于UDT(UDP-based Data Transfer)的、安全的、可靠的、开源的数据传输协议&技术。SRT在UDP基础之上实现了:智能数据重传机制和AES256加密技术,这使得其成为一种安全、可靠、低延迟的传输技术。利用SRT,可以实现在不可预测的网络环境下(例如互联网)高效、安全的传输数据。SRT还做了特殊优化以适合视频实时流数据的传输。根据SRT Alliance在2019-04-04的介绍,目前如下的应用已经集成并支持SRT:OBS StudioVideoLAN’s VLCFFmpegWireshark

本文只介绍:如何利用FFmpeg生成SRT数据流并利用Wireshark对该SRT数据进行抓包分析。关于SRT的详细内容,可以参考SRT Protocol Technical Overview Draft

前期准备

  1. 按照说明安装SRT

  2. 利用./configure --enable-libsrt重新编译FFmpeg,让ffmpeg工具集支持SRT协议。重新configure的过程如果遇到ERROR: srt >= 1.3.0 not found using pkg-config的错误,可以查看ffbuild/config.log的相关信息,一般需要把srt和srt所依赖的openssl的pkgconfig路径增加到PKG_CONFIG_PATH环境变量中即可。

  3. 升级Wireshark到3.0之后的版本,并且设置Wireshark取消Wireshark对UDT协议的支持,具体做法为:点击菜单栏中的Analyze->Enabled Protocols,然后从弹出的支持协议中找到UDT,并取消UDT前面的选择标记。

  4. 安装VLC播放器,用于播放SRT协议的视频流。

生成SRT直播流

可以利用ffmpegsrt-live-transmit(该工具在安装srt的时候会默认安装)来生成SRT直播流。主要思路是首先利用ffmpeg生成UDP的直播流,然后利用srt-live-transmit把UDP的直播流转换成SRT的直播流,更详细的方式可以参考srt-live-transmit的使用说明

1
2
3
4
5
6
7
8
9
10
11
12
# 生成UDP视频流
$ ffmpeg -f lavfi -re -i smptebars=duration=300:size=1280x720:rate=30 \
-f lavfi -re -i sine=frequency=1000:duration=60:sample_rate=44100 \
-pix_fmt yuv420p -c:v libx264 -b:v 1000k -g 30 -keyint_min 120 \
-profile:v baseline -preset veryfast -f mpegts \
"udp://127.0.0.1:5000?pkt_size=1316"

# 生成SRT视频流
$ srt-live-transmit -s:10 udp://:5000 srt://:5001

# 使用ffplay播放SRT视频流
$ ffplay "srt://127.0.0.1:5001"

具体播放效果如下所示:

使用Wireshark分析SRT

为了可以用Wireshark抓到SRT数据包,需要使用VLC播放器来打开刚才创建的SRT视频流,具体如下所示:

打开Wireshark,选择Lookback(因为要捕获的SRT地址为127.0.0.1),然后在捕获的数据窗口选择srt协议过滤,稍等片刻就可以看到捕获的SRT数据包,具体如下图所示:

接下来就可以利用Wireshark来分析SRT协议的处理流程,例如上图中的Handshake数据包。尤其是在学习的过程中,配合SRT的协议文档以及Wireshark的抓包分析,能够加深对SRT协议的理解,达到事半功倍的效果。

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2020-2024 Wang Wei
  • 本站访问人数: | 本站浏览次数:

请我喝杯咖啡吧~

微信