RTSP拉流

news/2024/5/18 15:14:11 标签: udp, tcp/ip, 服务器, RTSP

1.和服务端建立TCP连接

2.建立会话

​ 使用建立的TCP连接进行会话,会话报文以两个\r\n结尾;

2.1.OPTIONS会话

客户端发送:
	OPTIONS rtsp://192.168.58.101/ace_udp_h264_leaac.ts RTSP/1.0
	CSeq: 1
	User-Agent: LibVLC/3.0.16 (LIVE555 Streaming Media v2018.11.26)
服务端回复:
    RTSP/1.0 200 OK
    CSeq: 1
    Date: 2022-01-06 13:57:00 GMT
    Public: OPTIONS, DESCRIBE, ANNOUNCE,SETUP, TEARDOWN, PLAY,RECORD,GET_PARAMETER

2.2.DESCRIBE会话

​ 客户端发起DESCRIBE会话后,服务端将提供流的信息描述,格式符合SDP文件格式;

客户端发送:
    DESCRIBE rtsp://192.168.200.245:8010/designated_ch3 RTSP/1.0
    CSeq: 2
    User-Agent: LibVLC/3.0.16 (LIVE555 Streaming Media v2018.11.26)
    Accept: application/sdp
服务端回复:
    RTSP/1.0 200 OK
    CSeq: 2
    Date: 2022-01-06 13:57:00 GMT
    Content-Base: rtsp://192.168.200.245:8010/designated_ch3/
    Content-Type: application/sdp
    Content-Length: 154

    v=0
    o=- 0 0 IN IP4 127.0.0.1
    s=.........
    c=IN IP4 127.0.0.1
    t=0 0
    a=tool:libavformat 58.29.100
    m=audio 0 RTP/AVP 14
    b=AS:32
    a=control:streamid=0

2.3.SETUP会话

​ SETUP会话完成后,服务端会分配唯一的会话标识ID,此后的会话都需要携带该会话标识ID;

​ 客户端拉流采用RTSP(OVER TCP)还是RTSP(OVER UDP),或者其他方式(此处不扩展),是由客户端和服务端协商确定的。由客户端主动发起协商方式,如果服务端支持则回复成功,如果服务端回复不支持,则客户端应更换其他方式再次进行尝试;

RTSPOVER_TCP_57">2.3.1.RTSP(OVER TCP)

 客户端发送:
 	SETUP rtsp://192.168.200.245:8010/designated_ch3/streamid=0 RTSP/1.0
    CSeq: 3
    User-Agent: LibVLC/3.0.16 (LIVE555 Streaming Media v2018.11.26)
    Transport: RTP/AVP/TCP;unicast;interleaved=0-1
服务端回复:
    RTSP/1.0 200 OK
    CSeq: 3
    Date: 2022-01-06 14:20:08 GMT
    Transport:RTP/AVP/TCP;unicast;interleaved=01;destination=192.168.200.245;source=192.168.200.245;
    Session: 0xa2fd474a

RTSPOVER_UDP_73">2.3.2.RTSP(OVER UDP)

​ 服务端回复的server_port=51006-51007,分别为服务端的RTP和RTCP的数据发送端口

客户端发送:
    SETUP rtsp://192.168.200.245:8010/designated_ch3/streamid=0 RTSP/1.0
    CSeq: 3
    User-Agent: LibVLC/3.0.16 (LIVE555 Streaming Media v2018.11.26)
    Transport: RTP/AVP;unicast;client_port=41320-41321
服务端回复:
    RTSP/1.0 200 OK
    CSeq: 3
    Date: 2022-01-06 13:57:00 GMT
    Transport: RTP/AVP;unicast;client_port=41320-41321;destination=192.168.200.245;source=192.168.200.245;server_port=51006-51007
    Session: 0xa2fd474d

2.4.PLAY会话

客户端发送:
    PLAY rtsp://192.168.200.245:8010/designated_ch3/ RTSP/1.0
    CSeq: 4
    User-Agent: LibVLC/3.0.16 (LIVE555 Streaming Media v2018.11.26)
    Session: 0xa2fd474d
    Range: npt=0.000-
服务端回复:
    RTSP/1.0 200 OK
    CSeq: 4
    Date: 2022-01-06 13:57:00 GMT
    Range: npt=0.000-
    Session: 0xa2fd474d
    RTP-Info: url=rtsp://192.168.200.245:8010/designated_ch3//track1;seq=0;rtptime=0

3.数据接收

​ 数据封装见文章RTP和RTCP讲解

RTSPOVER_TCP_113">3.1.RTSP(OVER TCP)

  • 使用TCP连接进行数据接收;
  • 使用TCP连接进行会话,无需定时进行心跳发送;

RTSPOVER_UDP_118">3.2.RTSP(OVER UDP)

  • 使用SETUP会话中,服务端回复的server_port=51006-51007,基于UDP协议分别进行RTP和RTCP数据的接收;
  • 使用TCP连接进行会话,要求定时进行心跳发送,保持会话连接;

4.断开会话

客户端发送:
	TEARDOWN rtsp://192.168.200.245:8010/designated_ch3/ RTSP/1.0
    CSeq: 5
    User-Agent: LibVLC/3.0.16 (LIVE555 Streaming Media v2018.11.26)
    Session: 0xa2fd474d
服务端回复:
    RTSP/1.0 200 OK
    CSeq: 5
    Date: 2022-01-06 13:57:03 GMT
    Session: 0xa2fd474d

http://www.niftyadmin.cn/n/1335895.html

相关文章

mktime时间函数

1.函数说明 1.1描述 ​ time_t mktime(struct tm *timeptr) 把 timeptr 所指向的结构转换为自 1970 年 1 月 1 日以来持续时间的秒数,发生错误时返回-1。 1.2.声明 ​ time_t mktime(struct tm *timeptr) 1.3.参数 struct tm {  int tm_sec; /* 秒 – 取…

DOCKER镜像和容器

1.前言 ​ 初见DOCKER,感觉和我们常用的虚拟机(VMware,viurebox)类似,是一个独立于宿主机的模块,可以解决程序在各个系统间的移植,但它真的仅仅是这样嘛? 操作系统: Dee…

CH的电影推荐

1、推荐电影 张艺谋:一个都不能少2、下载站点 TL95转载于:https://www.cnblogs.com/CH520/p/10176852.html

网卡调优RSS、RPS、RFS和XPS

1.RSS(Receive Side Scaling) ​ RSS(Receive Side Scaling)也叫多队列接收,可以硬件级别实现使用多核处理接收网络数据。可用于缓解因单个CPU过载,导致的接收中断处理瓶颈,并减少网络延迟。 …

四面快手归来,分享Java真题及面经:策略模式+红黑树+Java锁+Redis+Kafka等分布式 ...

看真题,了解差距,明确学习方向与目标。 看面经,提前准备,事半功倍。 一面(一个小时十分钟) 1.自我介绍 2.说说B树和B树的区别,优缺点等? 3聊聊Spring,主要IOC等等 4多线程JUC包下的一些常见的类…

[FFMPEG]进行音频音量调整

一、前言 ​ 由于我们个人使用的音频和视频数据都是从各个地方获取的,因此其中的音频音量大小不一。而互联网音乐平台如网易云音乐、qq音乐等,几乎所有的音乐音量大小都一致,可能就是使用了音量标准化的方式。 二、正文 ​ 当前衡量一个音…

hibernate 查询字段是重复名字的处理方法

目前遇到了三种情况: 一:当表的字段是数字类型(int,long .....) select name,ifnull(conpih.uh_id,0) from user; 将重复的字段如上修改用ifnull()这个函数. 二:当表的字段是字符串类型(String) SELECT con.*,IFNULL(acceptd.doctname,) from user; 将重复的字段如上修改. 三:…

netplan说明

1.介绍 ​ 发行版安装程序、云实例化、特定设备的镜像或任何其他部署操作系统的方法,都会将其网络配置放入YAML配置文件中。在启动初期,netplan的“network renderer”将读取/{lib,etc,run}/netplan/*.yaml文件,并将配置写入/run&#xff0c…