RTSP音视频传输频笔记

音视频应用开发系列文章目录

RTSP在音视频传输中的位置

RTSP协议是一个应用层协议,主要针对媒体流传输过程的控制和配置,提供OPTIONS,DESCRIBE,SETUP,TEARDOWN,PLAY,GET_PARAMETER,SET_PARAMETER等操作命令。

下图是客户端请求rtsp服务器音视频数据的大致过程

client通过RTSP协议对远程服务器发起连接请求,连接成功后server建立RTP/RTCP通道和client进行交互。rtsp是基于TCP的连接,而RTP/RTCP可以是TCP也可以的UDP。

RTSP服务器大致搭建过程

1.建立TCP服务器用于监听RTSP-CLIENT的连接

2.当有新连接是,创建RTSP接收任务

3.RTSP接收任务开始处理RTSP命令

  3.1.OPTIONS:反馈当前支持的RTSP命令

  3.2.DESCRIBE:返回SDP信息(音频,视频,音视频描述)

  3.3.SETUP:RTP/UDP->创建RTP/RTCP通道UDP监听端口,RTP/TCP->和RTSP共用

  3.4.PLAY:创建RTCP接收线任务,RTP发送任务

  3.5.TEARDOWN:关闭连接和任务

一个具体的RTSP会话实例[VLC <---connect---> RTSP SERVER]

注:红色为VLC,蓝色为RTSP SERVER。

OPTIONS rtsp://192.168.1.88:554/sub RTSP/1.0
CSeq: 2
User-Agent: LibVLC/3.0.8 (LIVE555 Streaming Media v2016.11.28)

【说明】首先VLC发出OPTIONS请求

RTSP/1.0 200 OK
CSeq: 2
Date: Wed, Sep 25 2019 11:05:10 GMT
OPTIONS,DESCRIBE,SETUP,TEARDOWN,PLAY,GET_PARAMETER,SET_PARAMETER

【说明】SERVER回复支持的功能

DESCRIBE rtsp://192.168.1.88:554/sub RTSP/1.0
CSeq: 4
Authorization: Digest username="admin", realm="IPC", nonce="9e5b97ab9b1c66f2c03a8e5ff1cd4e01", uri="rtsp://192.168.1.88:554/sub", response="f287d50d966ee352514fd717a33a5e79"
User-Agent: LibVLC/3.0.8 (LIVE555 Streaming Media v2016.11.28)
Accept: application/sdp

【说明】VLC发起SDP请求

RTSP/1.0 200 OK
CSeq: 4
Date: Wed, Sep 25 2019 11:05:10 GMT
Content-Base: rtsp://192.168.1.88:554/sub
Content-Type: application/sdp
Content-Length: 238
v=0
o=username 1853907398 1 IN IP4 
s=sub
c=IN IP4 0.0.0.0
t=0 0
a=range:npt=0-
a=sendonly
a=control:*
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=control:track0
m=audio 0 RTP/AVP 8
a=rtpmap:8 PCMA/8000/1
a=control:track1

【说明】SERVER返回SDP(服务器在此处设计的时候就很关键了,就是返回正确的SDP。只有视频的时候只需要返回video描述,只有音频返回audio描述,两个流都有则要两个描述,以track id区分,后面VLC SETUP的时候会SETUP两次,服务器就需要建立2个session,但是不管有几个流几个session,同一个RTSP client只有一个session id。)


SETUP rtsp://192.168.1.88:554/sub/track0 RTSP/1.0
CSeq: 5
Authorization: Digest username="admin", realm="IPC", nonce="9e5b97ab9b1c66f2c03a8e5ff1cd4e01", uri="rtsp://192.168.1.88:554/sub", response="f9240e0c9abe4a22410eace51262b045"
User-Agent: LibVLC/3.0.8 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP;unicast;client_port=55822-55823

【说明】VLC发起第一个SETUP,track id为track0为视频流(可以由服务器自己定义),Transport为RTP/AVP表示VLC会以UDP来接收视频流,RTP/RTCP的UDP会话端口为client_port=55822-55823。

RTSP/1.0 200 OK
CSeq: 5
Date: Wed, Sep 25 2019 11:05:10 GMT
Transport: RTP/AVP;unicast;client_port=55822-55823;server_port=29746-29747;destination=192.168.9.97
Session: 4EA75CE8

【说明】服务器需要返回和VLC的RTP/RTCP的UDP端口对接的服务器的RTP/RTCP端口,并且建立本次连接的Session ID(Session: 4EA75CE8),每个连接有且只有一个Session ID。

SETUP rtsp://192.168.1.88:554/sub/track1 RTSP/1.0
CSeq: 6
Authorization: Digest username="admin", realm="IPC", nonce="9e5b97ab9b1c66f2c03a8e5ff1cd4e01", uri="rtsp://192.168.1.88:554/sub", response="f9240e0c9abe4a22410eace51262b045"
User-Agent: LibVLC/3.0.8 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP;unicast;client_port=55824-55825
Session: 4EA75CE8

【说明】VLC发起第二个SETUP,track id为track1为音频流(可以由服务器自己定义),Transport为RTP/AVP表示VLC会以UDP来接收视频流,RTP/RTCP的UDP会话端口为client_port=55824-55825。Session ID为同一份。

RTSP/1.0 200 OK
CSeq: 6
Date: Wed, Sep 25 2019 11:05:10 GMT
Transport: RTP/AVP;unicast;client_port=55824-55825;server_port=33306-33307;destination=192.168.9.97
Session: 4EA75CE8

【说明】服务器需要返回和VLC音频流对接的服务器的RTP/RTCP的UDP端口。(RTP/RTCP由UDP传输时,每个流对应2个端口,不能重复。)

PLAY rtsp://192.168.1.88:554/sub RTSP/1.0
CSeq: 7
Authorization: Digest username="admin", realm="IPC", nonce="9e5b97ab9b1c66f2c03a8e5ff1cd4e01", uri="rtsp://192.168.1.88:554/sub", response="ef7a23e129ed64e1748e3639a2c49d67"
User-Agent: LibVLC/3.0.8 (LIVE555 Streaming Media v2016.11.28)
Session: 4EA75CE8
Range: npt=0.000-

【说明】VLC发起播放请求

RTSP/1.0 200 OK
CSeq: 7
Date: Wed, Sep 25 2019 11:05:10 GMT
Range: npt=0.000-
Session: 4EA75CE8
RTP-Info: url=rtsp://192.168.1.88:554/sub;seq=7;rtptime=0

【说明】SERVER回复OK并开始音视频流的RTP发送。

TEARDOWN rtsp://192.168.1.88:554/sub RTSP/1.0
CSeq: 8
Authorization: Digest username="admin", realm="IPC", nonce="9e5b97ab9b1c66f2c03a8e5ff1cd4e01", uri="rtsp://192.168.1.88:554/sub", response="1e8a339570318436f383209cc1ffb0d3"
User-Agent: LibVLC/3.0.8 (LIVE555 Streaming Media v2016.11.28)
Session: 4EA75CE8

【说明】VLC发出退出请求

RTSP/1.0 200 OK
CSeq: 8
Date: Wed, Sep 25 2019 11:05:14 GMT
Session: 4EA75CE8

【说明】SERVER关闭对应的socket通道和RTP/RTCP任务

发布了131 篇原创文章 · 获赞 195 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/KayChanGEEK/article/details/101380772
今日推荐