RTSP服务端开发概述
阅读原文时间:2021年09月19日阅读:1

一 概述

RTSP(Real Time Streaming Protocol),RFC2326,实时音视频流传输协议,是TCP/IP协议体系中的一个应用层协议。该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。

在整个rtsp传输过程中,分别涉及到以下协议

rtsp传输协议建立会话,用于客户端和服务端之间的信息交互,流媒体参数的传输为音视频留的传输提供交互基础

rtp包在会话建立后,负责将音视频数据打包发送,在每一帧数据前加上rtp包头,用于客户端更快的识别处理数据

rtcp在传输影视频数据时,在客户端和服务端之间传输控制命令,控制音视频留的传输与播放等

RTSP URL格式示例:

rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream

二 交互过程概述

RTSP 常用请求有下面几种

RTSP 常用方法

交互流程图如下

client

serve

1.OPTIONS request

1.OPTIONS response

2.DESCRIBE request

2.DESCRIBE response

3.SETUP request

3.SETUP response

4.PLAY request

4.PLAY response

5.Media data Transfer

5.Control Command reauest

6.TEARDOWN request

6.TEARDOWN response

client

serve

流程解析:

1.OPTIONS:

客户端向服务端查询当前服务端当前可用的方法

2.DESCRIBE:

客户端向服务端请求当前媒体的描述信息,包括视频和音频的格式参数,服务端将当前对应的媒体参数填入SDP信息中,回复给客户端 (SDP信息将在后续文章中进行更新)

3.SETUP

请求建立会话,服务端根据客户端的信息,决定媒体数据传输的模式interleaved模式(使用TCP传输),非interleaved模式(使用udp传输),当使用udp传输时,此时应该建立两个UDP套接字,用于传输媒体出具,和RTCP控制数据,并在回复中写入创建套接字的端口

4.PLAY

客户端请求播放,服务端确认后回复,

5.Media Data Transer

传输媒体数据,以及RTCP控制协议。如果客户端要求视频的暂停,播放,快进,快退等,都是在RTCP数据中发出请求,

此外如果做再IPC领域做双向对讲功能,也可把客户端的音频数据,通过RTCP传输给服务端

6.TEARDOWN

客户端请求关闭视频,服务端回复后关闭

三 RTSP交互过程示例

请求消息格式:

方法 URI RTSP版本 CR LF

消息头 CR LF CR LF

消息体 CR LF

回应消息格式:

RTSP版本 状态码 解释 CR LF

消息头 CR LF CR LF

消息体 CR LF

状态码由三位数组成,表示方法执行的结果,定义如下:

1XX:保留,将来使用;

2XX:成功,操作被接收、理解、接受(received,understand,accepted);

3XX:重定向,要完成操作必须进行进一步操作;

4XX:客户端出错,请求有语法错误或无法实现;

5XX:服务器出错,服务器无法实现合法的请求

下面一则示例为 rtsp会话交互时的报文内容,不包括音视频数据包和RTCP控制命令包:

  1. option

    请求

    OPTIONSrtsp://192.168.20.136:5000/xxx666RTSP/1.0

    CSeq: 1 //每个消息都有序号来标记,第一个包通常是option请求消息

    User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10) //浏览器标识

    回复

    RTSP/1.0 200 OK

    Server: UServer 0.9.7_rc1

    Cseq: 1 //每个回应消息的cseq数值和请求消息的cseq相对应

    Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE, GET_PARAMETER //服务器提供的可用的方法

  2. describe

    请求

    DESCRIBErtsp://192.168.20.136:5000/xxx666RTSP/1.0

    CSeq: 2

    token:

    Accept: application/sdp

    User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

    回复

    RTSP/1.0 200 OK

    Server: UServer 0.9.7_rc1

    Cseq: 2

    x-prev-url: rtsp://192.168.20.136:5000

    x-next-url: rtsp://192.168.20.136:5000

    x-Accept-Retransmit: our-retransmit

    x-Accept-Dynamic-Rate: 1

    Cache-Control: must-revalidate

    Last-Modified: Fri, 10 Nov 2006 12:34:38 GMT

    Date: Fri, 10 Nov 2006 12:34:38 GMT

    Expires: Fri, 10 Nov 2006 12:34:38 GMT

    Content-Base: rtsp://192.168.20.136:5000/xxx666/

    Content-Length: 344

    Content-Type: application/sdp

    v=0 //以下都是sdp信息 描述此次媒体信息的格式

    o=OnewaveUServerNG 1451516402 1025358037 IN IP4 192.168.20.136

    s=/xxx666

    u=http:///

    e=admin@

    c=IN IP4 0.0.0.0

    t=0 0

    a=isma-compliance:1,1.0,1

    a=range:npt=0-

    m=video 0 RTP/AVP 96 //m表示媒体描述,下面是对会话中视频通道的媒体描述

    a=rtpmap:96 MP4V-ES/90000

    a=fmtp:96 profile-level-id=245;config=000001B0F5000001B509000001000000012000C888B0E0E0FA62D089028307

    a=control:trackID=0 //trackID=0表示视频流用的是通道0

  3. setup

    请求

    SETUPrtsp://192.168.20.136:5000/xxx666/trackID=0RTSP/1.0

    CSeq: 3

    Transport: RTP/AVP/TCP;unicast;interleaved=0-1 //

    User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

    回复

    RTSP/1.0 200 OK

    Server: UServer 0.9.7_rc1

    Cseq: 3

    Session: 6310936469860791894 //服务器回应的会话标识符

    Cache-Control: no-cache

    Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=6B8B4567

  4. play

    请求

    PLAYrtsp://192.168.20.136:5000/xxx666RTSP/1.0

    CSeq: 4

    Session: 6310936469860791894

    Range: npt=0.000- //设置播放时间的范围

    User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

    回复

    RTSP/1.0 200 OK

    Server: UServer 0.9.7_rc1

    Cseq: 4

    Session: 6310936469860791894

    Range: npt=0.000000-

    RTP-Info: url=trackID=0;seq=17040;rtptime=1467265309

  5. teardown

    请求

    TEARDOWNrtsp://192.168.20.136:5000/xxx666RTSP/1.0

    CSeq: 5

    Session: 6310936469860791894

    User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

    回复

    RTSP/1.0 200 OK

    Server: UServer 0.9.7_rc1

    Cseq: 5

    Session: 6310936469860791894

    Connection: Close

四 RTSP开发要点

整个RTSP交互过程了解之后,现在来叙述一下RTSP开发过程中的重点难点,仅做开发思路指导用

1.确定RTSP服务端的架构

服务端为一个TCP套接字,监听并处理客户端发送的请求,确定好整个架构,来处理多个客户端的并发请求。

难点:

在处理setup会话后需要根据客户端请求,若客户端要求使用UDP传输视频数据,则在回复此会话钱建立两个UDP套接字,用于传输音视频数据或者RTCP控制命令。

若使用tcp传输,则使用当前会话使用的链接来传输所有的数据包,此处需要注意对客户端发送的请求加以区分。客户端来的请求中第一个字节为“$”为rtcp包,否则为RTSP会话的数据包

2.音视频数据RTP打包

以H264/H265为例,此处简要叙述,后续详细叙述

打包视频数据时,需要跳过Nalu头部,H264nalu头部为一个字节,H265nalu头部为两个字节。当数据小于指定大小事,添加RTP头部后,单包发送,当大于指定大小时,对视频数据进行分包发送。分包时,需要在每一包数据前面添加头部,用以区分当前数据包是否发送完毕,H264为2个字节,H265为三个字节,然后添加rtp包头后发送。

打包音频数据时,G711数据直接添加RTP包头后打包发送,AAC数据需要去掉AAC数据的七个字节头,并加上4个字节aac_header,然后添加RTP包头发送。

RTP报头如下

RTP报头

具体rtp打包过程将在后续更新

3.DESCRIBE中SDP描述信息

在SDP信息中描述了媒体信息----音频和视频的播放参数,注意playload type(PCMU 0, PCMA 8,H264/H265 96,AAC 97)

其次注意fmtp,视频的fmtp中需要根据具体参数(sps,pps)计算部分参数。音频的fmtp中包config参数需要计算,但对于固定格式的音频,可以提前算好,写入SDP。

4.音视频数据时间戳

音视频数据帧的时间戳单位均为:1/频率,传输数据帧时,需要将时间戳单位进行转化,当数据源为直播是,音视频时间戳不需要额外处理,可直接转化单位后使用。当来源于文件时,需要调整时间戳,因为客户端会使用音视频时间戳进行同步。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章