RTSP协议-UDP拉流 - 弦外之音

/ 0评 / 0

本文主要讲解 客户端 通过 RTSP 协议 从服务器拉流的 整个交互过程,以及这个过程中的一些交互,原理。实际上这个在通信角度来看,播放不是拉流,而是服务器向客户端推流。服务器源源不断地把音视频数据往客户端推送。

服务器采用 ZLMediaKits ,服务器的搭建请看 ZL的官方文档



拉流客户端是 ffplay,推流命令如下:

ffplay  -fflags nobuffer -f rtsp -i  rtsp://192.168.0.123/live/test

上面我用了 一个命令,指定编码格式,然后通过 rtsp 协议 播放一个动画片

下面就用 wireshark 来抓包看下整个通信过程,过滤规则如下:

host 192.168.0.123

为了方便读者对照,这里提供一下 pcapng 包文件,可以下载 用 wireshark 打开,就跟本文的一致了。下载地址:百度网盘,提取码:oz9p

在UDP 的方式下,无论是拉流还是推流,每个流都占两个端口,一个传输 RTP(流数据),一个传输 RTCP (统计)。

实际上 ffplay 拉流的整个通信流程,跟 之前的《RTSP协议-UDP推流》是非常类似的,只是有些东西是反着来的,我讲一下重点。


重点一:ffmpeg 推流,SDP(流的编码信息等)是客户端发给服务器的,ffplay 拉流,这个 SDP 是 服务器发给 客户端的,告诉客户端有多少个流,编码信息等。请看下面截图:


重点二:上图有两个 setup 跟 reply,这个跟推流一样,就是协商传输端口的,截图如下:


重点三:第一个 RTP,RTCP 包,还是由客户端向服务器发送,所以服务器需要先 listen 监听这些新端口,截图如下:


RTSP UDP 拉流播放分析完毕。

相关阅读:

1,《RTSP 标准文档》


由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 Loken1。QQ:2338195090。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注