关于RTSP-Over-HTTP
--------------------更新2018.07.10-------------------
myRtspClient-1.3.0开始支持RTSP-Over-HTTP
--------------------更新2018.07.10结束-------------------
一、概述
RTSP-Over-HTTP的关键(同时也是全部内容)在于:让RTSP报文通过HTTP端口(即80端口)通信。
我们知道RTSP的标准端口是554,但是由于各种不同的防火墙等安全策略配置的原因,客户端在访问554端口时可能存在限制,从而无法正常传输RTSP报文。
但是HTTP端口(80端口)是普遍开放的,于是就有了让RTSP报文通过80端口透传的想法,即RTSP-Over-HTTP。
二、暂无标准
目前RTSP-Over-HTTP没有标准做法,苹果公司出了一份非正式文档公开在外,并且也被LIVE555等支持。
三、LIVE555的RTSP-Over-HTTP
对照着苹果公司的“Tunneling QuickTime RTSP and RTP over HTTP”文档,LIVE555的具体做法如下:
首先客户端开启2个socket链接服务器HTTP端口,我们称这2个socket分别为“数据socket”和“命令socket”。
Step 1、客户端通过“数据socket”发送HTTP GET命令,请求RTSP链接。
Step 2、服务器通过“数据socket”响应HTTP GET命令,并回复成功/失败。
Step 3、客户端创建“命令socket”,并通过“命令socket”发送HTTP POST命令,建立RTSP会话。
至此,HTTP的辅助功能完成,服务器不返回客户端的HTTP POST命令。接下来是RTSP在HTTP端口上的标准流程,但是需要通过2个socket协同完成,“命令socket”只负责发送,“数据socket”只负责接受。
Step 4、客户端通过“命令socket”发送RTSP命令(BASE64编码加密)。
Step 5、服务器通过“数据socket”响应RTSP命令(明文)。
Step 6、重复Step4-Step5,直到客户端发送RTSP PLAY命令,服务器响应RTSP PLAY命令。
Step 7、服务器通过“数据socket”向客户端传输音视频数据
数据交互完毕后。。。
Step 8、客户端通过“命令socket”发送RTSP TEARDOWN命令(BASE64编码加密)
Step 9、服务器通过“数据socket”响应RTSP TEARDOWN命令(明文)。
Step 10、关闭2个socket。
四、TCP分包
UDP传输时,对应每一次Send,数据包之间存在明确的边界。但是TCP则不同,TCP的数据传输始终是一串流畅而没有边界的数据流,“封包”的概念得由应用层来定义,否则就会出现“断包”和“粘包”现象。为此,RFC7826[14 Embeded (Interleaved) Binary Data]规定了,在传输媒体数据时,会前缀4字节包头:

字节1:固定值字符'$'
字节2:通道ID,一般可取2个值,1个表示是RTP数据包(数值小),另一个表示RTCP数据包(数值大),具体在RTSP会命令中指明(如下图:客户端申请使用通道0和1,服务器返回5和6,则以5和6为准)
字节3-4:数据内容大小。
五、HTTP透传现状
各个厂家的音视频服务器客户端之所以兼容RTSP协议,为的就是RTSP协议的标准通用,不同厂家的设备可以相互兼容。
如果套了一层非标准非通用的透传协议,那么各个厂家就失去了做RTSP-Over-HTTP的理由。Live555在具体实现苹果的RTSP-Over-HTTP时,使用双socket收发的方式,如果不是使用Live555的函数库,只是根据苹果的RTSP-Over-HTTP文档实现透传,若是具体实现方式不同的话,也不一定可以和Live555保持兼容。而且他们大都有自己的私有音视频传输协议,这时候,他们往往会问这么一个问题:为什么不用自己的私有协议做HTTP透传呢?
所以,市场上另有一种透传做法就是利用私有协议通过HTTP透传,而不是RTSP,反正也解决了防火墙问题。
myRtspClient暂不支持RTSP-Over-HTTP
五、相关链接
LIVE555 RTSP-Over-HTTP透传示例:http://www.rosoo.net/a/201509/17373.html
LIVE555 RTSP-Over-HTTP透传wireshark抓包(透传端口8000):https://pan.baidu.com/s/1hrNWyna
关于RTSP-Over-HTTP的更多相关文章
- Atitit onvif协议获取rtsp地址播放java语言 attilx总结
Atitit onvif协议获取rtsp地址播放java语言 attilx总结 1.1. 获取rtsp地址的算法与流程1 1.2. Onvif摄像头的发现,ws的发现机制,使用xcf类库1 2. 调用 ...
- 使用vlc播放器做rtsp流媒体服务器
可参考: 使用vlc播放器播放rtsp视频 web网页中使用vlc插件播放相机rtsp流视频 使用vlc进行二次开发做自己的播放器 首先需要安装vlc播放器,下载及安装步骤略 使用vlc播放器做rts ...
- 使用vlc播放器播放rtsp流视频
可参考: 使用vlc播放器做rtsp服务器 web网页中使用vlc插件播放相机rtsp流视频 使用vlc进行二次开发做自己的播放器 首先需要安装vlc播放器,下载及安装步骤略 使用vlc播放器播放rt ...
- web网页中使用vlc插件播放相机rtsp流视频
可参考: 使用vlc播放器做rtsp服务器 使用vlc播放器播放rtsp视频 使用vlc进行二次开发做自己的播放器 vlc功能还是很强大的,有很多的现成的二次开发接口,不需配置太多即可轻松做客户端播放 ...
- RTSP协议转换RTMP直播协议
RTSP协议转换RTMP直播协议 RTSP协议也是广泛使用的直播/点播流媒体协议,最近实现了一个RTSP协议转换RTMP直播协议的程序,为的是可以接收远端设备或服务器的多路RTSP直播数据,实时转换为 ...
- 前段播放 流媒体(RTMP,RTSP,HLS)
前言 最近项目需要流媒体的播放,后端一共提供了 三种流数据(RTSP,RTMP,HLS),在不同的场景可能会使用到不同方式播放,就需要做到适配, 支持所有的流数据播放.花了一段时间研究,在这里和大家分 ...
- Onvif设备Rtsp地址解析和播放
今天把Onvif搜索以及Rtsp流这一块的功能集成了下, 主要包含以下功能: 1. onvif设备的搜索 2. 设备rtsp地址的解析 3. Rtsp流的播放 4. 建立Rtsp流服务器, 使用vlc ...
- RTSP流和USB摄像头转MJPEG使用VLC
测试环境: 系统: Ubuntu14.04 LTS Desktop 设备:海康IP摄像头和USB摄像头 1.需要先安装vlc包,命令行运行 sudo apt-get update sudo apt-g ...
- RTSP协议媒体数据发包相关的细节
最近完成了一RTSP代理网关,这是第二次开发做RTSP协议相关的开发工作了,相比11年的简单粗糙的版本,这次在底层TCP/IP通讯和RTSP协议上都有了一些新的积累,这里记录一下.基本的RTSP协议交 ...
- 流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
RTP 参考文档 RFC3550/RFC3551 Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议.RTP协议详细 ...
随机推荐
- 强大的JQuery表单验证插件 FormValidator使用介绍
jQuery formValidator表单验证插件是客户端表单验证插件. 在做B/S开发的时候,我们经常涉及到很多表单验证,例如新用户注册,填写个人资料,录入一些常规数据等等.在这之前,页面开发者( ...
- nginx启用TCP反向代理日志配置
Nginx使用TCP反向代理日志配置不同于http 修改nginx配置文档/usr/local/nginx/conf/nginx.conf 设置日志格式 stream { log_format pro ...
- .NET Core开发日志——Controller
在理清路由的工作流程后,接下来需要考虑的,是MVC框架如何生成Controller以及它的生成时机. 根据以前ASP.NET MVC的经验,Controller应该是由一个ControllerFact ...
- [No0000167]CPU内部组成结构及指令执行过程
计算机的基本硬件系统由运算器.控制器.存储器和输入.输出设备五大部件组成.运算器和控制器等部件被集成在一起统称为中央处理单元(Central Processing Unit,CPU). CPU的功能 ...
- [No0000E4]C# 常量
常量是固定值,程序执行期间不会改变.常量可以是任何基本数据类型,比如整数常量.浮点常量.字符常量或者字符串常量,还有枚举常量. 常量可以被当作常规的变量,只是它们的值在定义后不能被修改. 整数常量 整 ...
- java8集合--LinkedList纯源码
package Queue; import java.util.*; import java.util.function.Consumer; /** * 双端队列主要实现list接口和Deque接口, ...
- 机器学习使用sklearn进行模型训练、预测和评价
cross_val_score(model_name, x_samples, y_labels, cv=k) 作用:验证某个模型在某个训练集上的稳定性,输出k个预测精度. K折交叉验证(k-fold) ...
- nginx反向代理服务器获取不到端口的问题的解决办法
使用nginx为反向代理服务器时,后端应用程序获取不到请求端口的解决办法. 以下是nginx 简单的配置 server { listen 81; serve ...
- 2017年蓝桥杯省赛A组c++第5题(递归算法填空)
/* 由 A,B,C 这3个字母就可以组成许多串. 比如:"A","AB","ABC","ABA","AACB ...
- wpf之WrapPanel与StackPanel
WrapPanel: WrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列,当长度或高度不够是就会自动调整进行换行.他有三个属性 Orientation——根据内容自动换行,ItemHei ...