RTSP 的标准端口是 554,但是由于各种不同的防火墙等安全策略配置的原因,客户端在访问 554 端口时可能存在限制,从而无法正常传输 RTSP 报文。 但是 HTTP 端口(80 端口)是普遍开放的,于是就有了让 RTSP 报文通过 80 端口透传的想法,即 RTSP Over HTTP。
协议介绍
RTSP Over HTTP 的关键在于:让 RTSP 报文通过 HTTP 端口通信,但目前 RTSP Over HTTP 没有标准做法,苹果公司出了一份非正式文档公开在外,并且也被 Live555 等支持
基础知识
RTSP 和 HTTP
RTSP (Real Time Streaming Protocol,实时流传输协议) 和 HTTP (HyperText Transfer Protocol,超文本传输协议) 的共同点如下:
- 两者均为应用层协议
- 两者均为工作于客户端 - 服务端架构
两者区别如下:
- HTTP 协议是无连接(HTTP/1.1 版本之后支持长连接),而 RTSP 为面向连接协议 > 无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
- HTTP 协议是无状态协议,而 RTSP 为有状态协议
协议交互
Live555 的具体做法如下
首先客户端开启 2 个 socket 链接服务器 HTTP 端口,我们称这 2 个 socket 分别为 "数据 socket" 和 "命令 socket"。
-
客户端通过 "数据 socket" 发送 HTTP GET 命令,请求 RTSP 链接。
-
服务器通过 "数据 socket" 响应 HTTP GET 命令,并回复成功 / 失败。
-
客户端创建 "命令 socket",并通过 "命令 socket" 发送 HTTP POST 命令,建立 RTSP 会话。
至此,HTTP 的辅助功能完成,服务器不返回客户端的 HTTP POST 命令。接下来是 RTSP 在 HTTP 端口上的标准流程,但是需要通过 2 个 socket 协同完成,"命令 socket" 只负责发送,"数据 socket" 只负责接受。
-
客户端通过 "命令 socket" 发送 RTSP 命令(BASE64 编码加密)。
-
服务器通过 "数据 socket" 响应 RTSP 命令(明文)。
-
重复 Step4-Step5,直到客户端发送 RTSP PLAY 命令,服务器响应 RTSP PLAY 命令。
-
服务器通过 数据 socket" 向客户端传输音视频数据
数据交互...
-
客户端通过 "命令 socket" 发送 RTSP TEARDOWN 命令(BASE64 编码加密)
-
服务器通过 "数据 socket" 响应 RTSP TEARDOWN 命令(明文)。
-
关闭 2 个 socket。
交互示例
【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~