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任务

 

 

 

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: FFmpeg是一款开源的跨平台音视频处理库,它能够解析、转码、编码、播放、录制各种音视频格式。其中,RTSP(实时流传输协议)是一种常见的实时传输协议,支持音视频同步传输。在使用FFmpeg解析RTSP流时,可以通过命令行或者API来实现。 基于FFmpeg的命令行使用,可以通过以下指令进行RTSP流的解析和播放: ffmpeg -rtsp_transport tcp -i rtsp://xxx.xxx.xxx:xx/xx/xx.sdp -vcodec copy -acodec copy -f flv rtmp://xxx.xxx.xxx:xx/xx/xx 其中,-rtsp_transport参数指定使用TCP进行传输,-i参数指定RTSP流的地址,-vcodec和-acodec参数指定视编码格式,-f参数指定输出格式,rtmp://xxx.xxx.xxx:xx/xx/xx则为推流的目标地址。 除了命令行之外,也可以通过FFmpeg的API接口在代码中使用。首先需要使用avformat_open_input函数打开RTSP流,然后通过循环调用av_read_frame函数读取音视频帧,再调用avcodec_decode_video2函数进行解码,最后使用SDL等库进行播放。 总之,FFmpeg提供了非常方便和灵活的音视频解析和播放的能力,能够处理各种音视频格式和传输协议。使用FFmpeg进行RTSP流的解析和播放,并根据实际需要对其进行定制化调整,可以满足不同场景下的多样化需求。 ### 回答2: FFmpeg是一个开源的跨平台的多媒体解码和编码工具库,能够完成音视频的解码和转码等功能。RTSP(Real Time Streaming Protocol)是一个网络实时流传输协议,多用于音视频的传输。 使用FFmpeg解析和播放RTSP流,需要使用命令行来操作。首先需要通过FFmpeg获取RTSP流的地址,可以通过命令行输入类似于"ffmpeg -i rtsp://example.com/stream.sdp"的命令。其中-i参数指定输入源,rtsp://example.com/stream.sdp是RTSP流的地址。 获取到RTSP流的地址后,就可以使用FFmpeg解析和播放音视频流了。可以使用以下命令行来实现: ffmpeg -i rtsp://example.com/stream.sdp -map 0 -c:v copy -c:a copy -f rtp rtp://127.0.0.1:1234 在该命令行中,-i参数指定输入源,-map 0表示使用全部流,-c:v copy和-c:a copy表示复制代码进行编码而不做损失,并将音视频流输出到本地地址rtp://127.0.0.1:1234。 通过以上命令行操作,就可以完成对RTSP音视频流的解析和播放。由于FFmpeg具有跨平台性,所以可以在不同的操作系统上使用该工具库来实现音视频解析和播放。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值