rtp、rtsp客户端开发流程
来源:互联网 发布:vs2017 js的智能提示 编辑:程序博客网 时间:2024/05/21 13:17
环境:VLC做服务器,url:rtsp://192.168.100.77:8554/1
rtsp链路采用tcp链接
rtp采用udp
关于rtp、rtsp、rtcp的知识,这里不做详细解释,网上有大把的资料,用户可以自己问度娘。这里直接切入正题。
PS:这里还需要唠叨一点,rtsp为字符协议,字符协议中含大量不可见字符空格、tab、换行符等等,但是这些不可见字符如果不对,服务器是无法解析协议的。所以在调试字符协议时最好的方法是使用抓包工具,抓取正确的数据包,然后自己跟着模仿最快,当然你也可以看rfc文档。
1、rtsp客户端
step1:创建一个tcp socket,链接到192.168.100.77:8554上
step2:发送OPTIONS:
OPTIONS rtsp://192.168.100.77:8554/1 RTSP/1.0
CSeq: 1
User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)
等待应答,接收到应答如下:
RTSP/1.0 200 OK
Server: VLC/2.2.4
Content-Length: 0
Cseq: 1
Public: DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,GET_PARAMETER
#PS:CSeq 表示sn,每条指令自动加1即可
step3:发送DESCRIBE
DESCRIBE rtsp://192.168.100.77:8554/1 RTSP/1.0
CSeq: 2
User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)
Accept: application/sdp
等待应答,接收到应答如下:
RTSP/1.0 200 OK
Server: VLC/2.2.4
Date: Fri, 24 Feb 2017 02:01:14 GMT
Content-Type: application/sdp
Content-Base: rtsp://192.168.100.77:8554/1
Content-Length: 563
Cache-Control: no-cache
Cseq: 2
v=0
o=- 15878023685032985736 15878023685032985736 IN IP4 XZS201603082
s=Unnamed
i=N/A
c=IN IP4 0.0.0.0
t=0 0
a=tool:vlc 2.2.4
a=recvonly
a=type:broadcast
a=charset:UTF-8
a=control:rtsp://192.168.100.77:8554/1
m=audio 0 RTP/AVP 14
b=AS:128
b=RR:0
a=rtpmap:14 MPA/90000/2
a=control:rtsp://192.168.100.77:8554/1/trackID=2
m=video 0 RTP/AVP 96
b=RR:0
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=64001f;sprop-parameter-sets=Z2QAH6zZQPARfvARAAADAAEAAAMAMo8YMZY=,aOvjyyLA;
a=control:rtsp://192.168.100.77:8554/1/trackID=3
#PS:这里的trackID=3需要解析处理,下面setup指令要用到。
a=control的值可能是相对的URL,也可能是绝对的URL。判断相对还是绝对的方法参见RFC1808。(估计就是是否有串“://”)
如果a=control的值是相对的则从Content-Base,Content-Location,request URL中去获得基路径。如果a=control的值为*,则使用的值即为Content-Base,Content-Location,request URL的值。request URL指DESCRIBE时的url。因为a=control是在DESCRIBE后返回的sdp中存放的。
step4、发送SETUP
SETUP rtsp://192.168.100.77:8554/1/trackID=3 RTSP/1.0
CSeq: 3
User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)
Transport: RTP/AVP;unicast;client_port=52930-52931
#PS:这里注意client_port=52930-52931,client的后面52930是rtp端口,52931是rtcp端口,这里告诉了服务器,客户端接收rtp数据端口,服务器发送rtp数据时发送到52930端口上
等待应答,接收到应答如下:
RTSP/1.0 200 OK
Server: VLC/2.2.4
Date: Fri, 24 Feb 2017 02:01:16 GMT
Transport: RTP/AVP/UDP;unicast;client_port=52930-52931;server_port=54545-54546;ssrc=7009A25D;mode=play
Session: 1cc1373972ac1e0b;timeout=60
Content-Length: 0
Cache-Control: no-cache
Cseq: 3
#PS:这里注意三个字段,需要做解析。Session: 1cc1373972ac1e0b,一个64字节的session,setup获取session之后,rtsp所有的指令都需要发送该session,表明你当前会话窗口;timeout=60超时时间,如果超过60s rtsp链路上没有任何数据,当前session的所有链接、活动都会结束;server_port=54545-54546,54545表示服务器rtp数据发送端口,54546表示服务器rtcp端口
step5:发送PLAY
PLAY rtsp://192.168.100.77:8554/1 RTSP/1.0
CSeq: 4
User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)
Session: 1cc1373972ac1e0b
Range: npt=0.000-
等待应答,接收到应答如下:
RTSP/1.0 200 OK
Server: VLC/2.2.4
Date: Fri, 24 Feb 2017 02:01:18 GMT
RTP-Info: url=rtsp://192.168.100.77:8554/1/trackID=3;seq=50578;rtptime=3808865604
Range: npt=3582.742781-
Session: 1cc1373972ac1e0b;timeout=60
Content-Length: 0
Cache-Control: no-cache
Cseq: 4
#PS:在客户端发送play指令之后,需要启动rtp客户端在指定的端口(52930)上,接收UDP数据
step6:每隔固定时间发送心跳指令GET_PARAMETER
GET_PARAMETER rtsp://192.168.100.77:8554/1 RTSP/1.0
CSeq: 5
User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)
Session: 1cc1373972ac1e0b
x-Timeshift_Range:
等待应答,接收到应答如下:
RTSP/1.0 200 OK
Server: VLC/2.2.4
Date: Fri, 24 Feb 2017 02:01:40 GMT
Session: 1cc1373972ac1e0b;timeout=60
Content-Length: 0
Cache-Control: no-cache
Cseq: 5
step7:发送TEARDOWN接收session
TEARDOWN rtsp://192.168.20.136:5000/xxx666 RTSP/1.0
CSeq: 6
User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)
Session: 1cc1373972ac1e0b
等待应答,接收到应答如下:
RTSP/1.0 200 OK
Server: VLC/2.2.4
Cseq: 6
Session: 1cc1373972ac1e0b
Connection: Close
2、rtp客户端
step1、创建一个udp socket,绑定到固定的端口上
step2、将端口号传递给rtsp 客户端线程,rtsp 会在setup指令时通知服务器,rtp客户端udp所使用的端口
step3、一直在该socket上接收rtp服务器发送过来的udp数据包,进行组包、重传控制
- rtp、rtsp客户端开发流程
- rtp、rtsp客户端开发流程
- Rtsp交互流程,RTP 打包流程
- 【RTSP/RTP流媒体】10、编写简单的RTSP客户端
- [RTSP]live555-openRTSP客户端流程
- ONVIF、RTSP/RTP、FFMPEG的开发实录
- RTSP RTP ...
- RTSP&RTP
- RTP RTCP 客户端接收RTSP中媒体数据
- RTP RTCP 客户端接收RTSP中媒体数据
- RTSP点播消息流程实例(客户端:VLC, RTSP服务
- RTSP客户端发送播放请求后,RTSP服务器调用流程
- 整理 live555 rtsp ffmpeg 客户端解码流程
- 【视频开发】ONVIF、RTSP/RTP、FFMPEG的开发实录
- 【RTSP/RTP流媒体】3、RTSP/RTP交互
- RTP/RTCP/RTSP
- RTP、RTSP相关
- RTP/RTCP/RTSP
- 卷积神经网络全连接层转换为卷积层获得heatmap
- docker安装lnmp具体实例以及常用的docker命令
- tensorflow参数初始化--identity initializtion
- 9.7实训内容概要
- Linux内核学习笔记之使用ioctl函数实现用户态命令
- rtp、rtsp客户端开发流程
- 微服务架构中 API 的开发与治理
- 微信小程序做下拉菜单
- 区块链的“孪生姐妹”——Tangle
- [C#].NET中的三种Timer的区别和用法
- e.printStackTrace() ;
- Java String转int、float、double
- 移动端左右滑动的导航的简单实现方法
- vsftpd使用super daemon方式启动