基于EasyDarwin的实现无人机远程视频传输--RTSP协议分析篇

申明该文章参考了http://blog.csdn.net/haolipengzhanshen/article/details/50802081 的文章,在这里标示感谢!

这篇文章主要从几个方面分析EasyDarwin的RTSP内容

RTSP协议概述

wireshark抓包实例分析 一次完整RTSP的交互流程

EasyDarwin项目代码中 RTSP的初始化

EasyDarwin项目代码中 RTSP请求的处理过程

如果你是只想实现视频流的传输,对转发服务器没有太大要求,建议只要研究EasyDarwin的客户端即可,客户端涉及到解码播放显示在地面站上。对于EasyDarwin的使用在EasyDarwin的官方有详细说明。

第一部分:RTSP协议

一、RTSP协议概述

RTSP(Real-TimeStream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似。HTTP协议相信大家都比较熟悉了.

RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。尽管有时可以把RTSP控制信息和媒体数据流交织在一起传送,但一般情况RTSP本身并不用于转送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完成。

一次基本的RTSP操作过程是:

首先,客户端连接到流服务器并发送一个RTSP描述命令(DESCRIBE)。

流服务器通过一个SDP描述来进行反馈,反馈信息包括流数量、媒体类型等信息。

客户端再分析该SDP描述,并为会话中的每一个流发送一个RTSP建立命令(SETUP),RTSP建立命令告诉服务器客户端用于接收媒体数据的端口。

流媒体连接建立完成后,客户端发送一个播放命令(PLAY),服务器就开始在UDP上传送媒体流(RTP包)到客户端。

在播放过程中客户端还可以向服务器发送命令来控制快进、快退和暂停等。最后,客户端可发送一个终止命令(TERADOWN)来结束流媒体会话

二、RTSP 重要方法

 C->S
表示从客户端给服务器发数据,S->C表示从服务器给客户端发数据。通过以上几个方法完成客户端和服务器之间的指令交互,构成RTSP协议的基本框架。

我们用 wireshark来分析下这个RTSP的命令流程熟悉指令流程对于我们理解EasyDarwin有很重要的帮助。

来分析下rtsp包:

图1.1 客户端推流给服务器

 
                                      图1.2 播放器从服务器获得视频流

RTSP协议基本流程,我们打开EasyDarwin工程运行,流媒体服务器。

1.C->S:OPTION request //询问S有哪些方法可用
1.S->C:OPTION response //S回应信息中包括提供的所有可用方法

2.C->S:DESCRIBE request //要求得到S提供的媒体初始化描述信息
2.S->C:DESCRIBE response //S回应媒体初始化描述信息,主要是sdp
客户端向服务器端发送DESCRIBE,用于得到URI所指定的媒体描述信息,一般是SDP信息。客户端通过Accept头指定客户端可以接受的媒体述信息类型。
OPTIONS 字段后的rtsp://192.168.1.100:8003/st0.sdp RTSP/1.0\r\n
是请求的Server上的URI资源。
Content-Type: application/sdp //表示回应为SDP信息
Content-Length: 1383 //以下为具体的SDP信息 媒体描述是我们分析时常用的。
v=<version>
o=<username> <session id> <version> <network type> <address type> <address>
s=<session name>
i=<session description>
u=<URI>
e=<email address>
p=<phone number>
c=<network type> <address type> <connection address>
b=<modifier>:<bandwidth-value>
t=<start time> <stop time>
r=<repeat interval> <active duration> <list of offsets from start-time>
z=<adjustment time> <offset> <adjustment time> <offset> ....
k=<method>
k=<method>:<encryption key>
a=<attribute>
a=<attribute>:<value>
m=<media> <port> <transport> <fmt list>
v = (协议版本)
o = (所有者/创建者和会话标识符)
s = (会话名称)
i = * (会话信息)
u = * (URI 描述)
e = * (Email 地址)
p = * (电话号码)
c = * (连接信息)
b = * (带宽信息)
z = * (时间区域调整)
k = * (加密密钥)
a = * (0 个或多个会话属性行)
时间描述:
t = (会话活动时间)
r = * (0或多次重复次数)
媒体描述:
m = (媒体名称和传输地址)
i = * (媒体标题)
c = * (连接信息 — 如果包含在会话层则该字段可选)
b = * (带宽信息)
k = * (加密密钥)
a = * (0 个或多个媒体属性行)
3.C->S:SETUP request //设置会话的属性,以及传输模式,提醒S建立会话
3.S->C:SETUP response //S建立会话,返回会话标识符,以及会话相关信息

用于确定转输机制,建立RTSP会话。客户端能够发出一个SETUP请求为正在播放的媒体流改变传输参数,服务器可能同意这些参数的改变。若是不同意,它必须响应错误”455 Method Not Valid In This State”
4.C->S:PLAY request //C请求播放
4.S->C:PLAY response //S回应该请求的信息
方法告知服务器通过SETUP中指定的机制开始发送数据 。在尚未收到SETUP请求的成功应答之前,客户端不可以发出PLAY请求。PLAY请求将正常播放时间(normal play time)定位到指定范围的起始处,并且传输数据流直到播放范围结束。PLAY请求可能被管道化(pipelined),即放入队列中(queued);服务器必须将PLAY请求放到队列中有序执行。也就是说,后一个PLAY请求需要等待前一个PLAY请求完成才能得到执行。
5.S->C:发送流媒体数据
6.C->S:TEARDOWN request //C请求关闭会话
6.S->C:TEARDOWN response //S回应该请求
一个完整的RTSP协议请求流程就是这样

上述的过程只是标准的、友好的rtsp流程,但实际的需求中并不一定按此过程。

其中第三和第四步是必需的!第一步,只要服务器客户端约定好,有哪些方法可用,则option请求可以不要。第二步,如果我们有其他途径得到媒体初始化描述信息(比如http请求等等),则我们也不需要通过rtsp中的describe请求来完成。

更多内容请看:http://www.amovauto.com/?p=481 阿木社区

QQ群: 526221258

时间: 2024-10-10 16:55:02

基于EasyDarwin的实现无人机远程视频传输--RTSP协议分析篇的相关文章

基于EasyDarwin的局域网摄像头视频远程查看方案

基于EasyDarwin的局域网摄像头视频远程查看方案 1,EasyScreenLive+EasyDarwin EasyScreenLive+ EasyDarwin是一种基于windows的免费局域网摄像头视频远程查看方案 EasyScreenLive负责采集局域网摄像头视频源,并将其视频流转发给EasyDarwin. EasyDarwin负责视频收集与播放服务. EasyScreenLive,负责采集视频源,上图位置1.位置3 EasyScreenLive,视频转发,上图位置2.位置4 架构如

基于EasyDarwin云视频平台的幼儿园视频直播解决方案

一.方案介绍 1.1.方案背景 在2016年10月25日至28日的安博会上,我们看到了不少的幼教平台厂商,我们注意到大部分的幼教平台,为了追求极佳的用户体验,在微信或者APP端能够做到极快的打开速度,具备秒开画面的功能,采用的是摄像机长期推流,公网的HLS流媒体服务器长期切片的方案,在跟有一部分厂家进行交流的过程中发现,他们对其带宽资源非常自信,他们基本都是租用百兆阿里云主机.百兆腾讯云主机等云主机.这里,我们不得不深入探讨一下长期不间断推送和进行HLS切片会产生的几个问题: 从终端视频采集设备

基于RTP的h.264视频传输系统设计(一)

一.H.264 的层次介绍 H.264 定义三个层次,每个层次支持一组特定的编码功能,并且依照各个层次指定所指定的功能.基础层次(baselineprofile)支持I 帧和 P 帧[1]的帧内和帧间编码,支持自适应的可变长度的熵编码(CAVLC).主要层次(main profile)支持隔行扫描视频,B帧[2]的帧内编码,使用加权预测的帧内编码和使用上下文的算术编码(CABAV).扩展层次(extendedprofile)不支持隔行扫描视频和CABAC,但增加了码流之间高效的转化模式(SP 和

计算机网络——网页上(或其他情况下)的视频传输是基于TCP还是UDP

计算机网络——网页上(或其他情况下)的视频传输是基于TCP还是UDP 1. 综述 链接:百度知道 当然,需要清楚,这里说基于TCP还是UDP是在传输层,应用层的协议估计种类多多. 总结找到的内容,应该说: 1. 网页上的视频是基于HTTP/HTTPS,传输层是TCP 2. QQ视频聊天等是基于UDP 3. 甚至有的应用使用p2p协议,传输层应该也是TCP 4. 通过http进行流化视频有很多种方法 5. 传输视频还有很多其他的应用层协议 一方面,在网页上看视频可以忍受缓冲5s看到更清楚的视频,所

基于wifi无线PLC远程控制实现io开关量信号远程采集传输技术

深圳市综科智控科技开发有限公司是一家专注于生产与研发工业智能自动化设备及软件系统.工业物联网设备及软件系统的高新技术企业.公司致力于为客户提供从前端数据采集.传感器接入.IO控制.通信组网到云端联网.人机交互的一整套系统及方案,帮助客户实现其自动化设备及物联网设备的本地或者远程分布式控制与管理.本文档以综科智控无线IO模块为例,详细讲解基于wifi无线PLC远程控制实现io开关量信号远程采集传输的技术,无线PLC广泛应用于工业控制场合,物联网场合,智能家居场合,安防场以及不方便布线的场合,实测性

一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(六)RTP音视频传输解析层之音视频数据传输格式

一.差异 本地音视频数据格式和用来传输的音视频数据格式存在些许差异,由于音视频数据流到达客户端时,需要考虑数据流的数据边界.分包.组包顺序等问题,所以传输中的音视频数据往往会多一些字节. 举个例子,有时候一个媒体分包数据量很大(比如H264的一个分包常常会有2-4K),而大多数网络的MTU(最大传输单元)基本都是1500字节. 如果频繁收发这么大的数据包,会额外增添路由器的负担,甚至会导致网络阻塞,不利于网络的稳定. 于是服务器就自行对H264进行了分包以适应MTU,每个分包的开始处往往会多出一

转:FFmpeg的远程视频监控系统编解码

0 引言 随着视频编解码技术.计算机网络技术.数字信号处理技术和嵌入式系统的发展,以嵌入式网络视频服务器为核心的远程视频监控系统开始在市场上崭露头角.该系统把摄像机输出的模拟视频信号通过内置的嵌入式视频编码器直接转换成视频流,通过计算机网络传输出去.嵌入式网络视频服务器具备视频编码处理.网络通信.系统控制等强大功能,直接支持网络视频传输和网络管理,使得监控范围达到前所未有的广度.在远程视频监控系统中,摄像头获取的原始视频流在传输之前需要压缩,而FFmpeg可以将原始视频压缩为H264格式视频流,

奥运转播加速上云,北京冬奥组委测试阿里云视频传输技术

摘要: 10月11日晚,北京冬奥组委与国际奥林匹克转播机构进行了云视频传输技术测试,工作人员通过阿里云传输技术,对布宜诺斯艾利斯青奥会多个项目进行多路电视转播测试,监测了实时传播的画面清晰度.延时等指标,并模拟了整套体育赛事远程视频制作流程. 10月11日晚,北京冬奥组委与国际奥林匹克转播机构进行了云视频传输技术测试,工作人员通过阿里云传输技术,对布宜诺斯艾利斯青奥会多个项目进行多路电视转播测试,监测了实时传播的画面清晰度.延时等指标,并模拟了整套体育赛事远程视频制作流程. 在接受北京电视台采访

linux下视频传输测试

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 在上一篇<ubuntu下基于qt+OpenCV控制摄像头>的基础上测试了视频传输. 环境:主机:PC + Ubuntu10.04 + OpenCV + Qt 从机:s3c6410 + linux2.6.38 + Qt 主机有摄像头,捕捉摄像头,然后通过网络传输,从机接收数据后显示. 实现流程: 主机代码: 主要代码如下,socket编程采用Linux本身提供的方法. widget.h [html]