RTSP服务器(二)

一:单播、多播(组播)和广播、直播、点播、点播试直播

单播、多播和广播单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在?

1:单播:

网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,只是一般网络用户不知道而已。例如,你在收发电子邮件、浏览网页时,必须与邮件服务器、Web服务器建立连接,此时使用的就是单播数据传输方式。但是通常使用“点对点通信”(Point to Point)代替“单播”,因为“单播”一般与“多播”和“广播”相对应使用。

2:多播(组播)

“多播”也可以称为“组播”,在网络技术的应用并不是很多,网上视频会议、网上视频点播特别适合采用多播方式。因为如果采用单播方式,逐个节点传输,有多少个目标节点,就会有多少次传送过程,这种方式显然效率极低,是不可取的;如果采用不区分目标、全部发送的广播方式,虽然一次可以传送完数据,但是显然达不到区分特定数据接收对象的目的。采用多播方式,既可以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的。  IP网络的多播一般通过多播IP地址来实现。多播IP地址就是D类IP地址,即224.0.0.0至239.255.255.255之间的IP地址。Windows 2000中的DHCP管理器支持多播IP地址的自动分配。

3:广播:“广播”在网络中的应用较多,如客户机通过DHCP自动获得IP地址的过程就是通过广播来实现的。但是同单播和多播相比,广播几乎占用了子网内网络的所有带宽。拿开会打一个比方吧,在会场上只能有一个人发言,想象一下如果所有的人同时都用麦克风发言,那会场上就会乱成一锅粥。集线器由于其工作原理决定了不可能过滤广播风暴,一般的交换机也没有这一功能,不过现在有的网络交换机(如全向的QS系列交换机)也有过滤广播风暴功能了,路由器本身就有隔离广播风暴的作用。  广播风暴不能完全杜绝,但是只能在同一子网内传播,就好像喇叭的声音只能在同一会场内传播一样,因此在由几百台甚至上千台电脑构成的大中型局域网中,一般进行子网划分,就像将一个大厅用墙壁隔离成许多小厅一样,以达到隔离广播风暴的目的。  在IP网络中,广播地址用IP地址“255.255.255.255”来表示,这个IP地址代表同一子网内所有的IP地址。

4:直播:是对视频源的实时的观看,用比较直白的话就是我播你看,我播哪你看哪。

5:点播:是对以往的视频文件进行回放。
6:点播试直播:即将直播的流存成小片文件,用点播的方式访问文件做直播,例如hls方式做直播,优点可回看,难点文件调度。

二:RTSP、 RTMP、HTTP的区别

共同点:

1:首先看下这个图:RTSP RTMP HTTP都是在应用应用层。

2: 理论上RTSP RTMPHTTP都可以做直播和点播,但一般做直播用RTSP RTMP,做点播用HTTP。

做视频会议的时候原来用SIP协议,现在基本上被RTMP协议取代了。

区别:

1:HTTP: 即超文本传送协议(ftp即文件传输协议)。

HTTP:(Real Time Streaming Protocol),实时流传输协议。

HTTP全称Routing Table Maintenance Protocol(路由选择表维护协议)。

2:HTTP将所有的数据作为文件做处理。http协议不是流媒体协议。

RTMP和RTSP协议是流媒体协议。

3:RTMP协议是Adobe的私有协议,未完全公开,RTSP协议和HTTP协议是共有协议,并有专门机构做维护。

4:RTMP协议一般传输的是flv,f4v格式流,RTSP协议一般传输的是ts,mp4格式的流。

HTTP没有特定的流。

5:RTSP传输一般需要2-3个通道,命令和数据通道分离,HTTP和RTMP一般在TCP一个通道上传输命令和数据。

三:RTSP、RTCP、RTP区别

1:RTSP实时流协议 
  作为一个应用层协议,RTSP提供了一个可供扩展的框架,它的意义在于使得实时流媒体数据的受控和点播变得可能。总的说来,RTSP是一个流媒体表示协议,主要用来控制具有实时特性的数据发送,但它本身并不传输数据,而是必须依赖于下层传输协议所提供的某些服务。RTSP可以对流媒体提供诸如播放、暂停、快进等操作,它负责定义具体的控制消息、操作方法、状态码等,此外还描述了与RTP间的交互操作(RFC2326)。

2:RTCP控制协议 
  RTCP控制协议需要与RTP数据协议一起配合使用,当应用程序启动一个RTP会话时将同时占用两个端口,分别供RTP和RTCP使用。RTP本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完成。通常RTCP会采用与RTP相同的分发机制,向会话中的所有成员周期性地发送控制信息,应用程序通过接收这些数据,从中获取会话参与者的相关资料,以及网络状况、分组丢失概率等反馈信息,从而能够对服务质量进行控制或者对网络状况进行诊断。

RTCP协议的功能是通过不同的RTCP数据报来实现的,主要有如下几种类型:
SR:发送端报告,所谓发送端是指发出RTP数据报的应用程序或者终端,发送端同时也可以是接收端。(SERVER定时间发送给CLIENT)。
RR:
接收端报告,所谓接收端是指仅接收但不发送RTP数据报的应用程序或者终端。(SERVER接收CLIENT端发送过来的响应)。
SDES:
源描述,主要功能是作为会话成员有关标识信息的载体,如用户名、邮件地址、电话号码等,此外还具有向会话成员传达会话控制信息的功能。
BYE:通知离开,主要功能是指示某一个或者几个源不再有效,即通知会话中的其他成员自己将退出会话。
APP:由应用程序自己定义,解决了RTCP的扩展性问题,并且为协议的实现者提供了很大的灵活性。

3:RTP数据协议 
  RTP数据协议负责对流媒体数据进行封包并实现媒体流的实时传输,每一个RTP数据报都由头部(Header)和负载(Payload)两个部分组成,其中头部前12个字节的含义是固定的,而负载则可以是音频或者视频数据。

RTP用到的地方就是 PLAY ,服务器往客户端传输数据用UDP协议,RTP是在传输数据的前面加了个12字节的头(描述信息)。

RTP载荷封装设计本文的网络传输是基于IP协议,所以最大传输单元(MTU)最大为1500字节,在使用IP/UDP/RTP的协议层次结构的时候,这其中包括至少20字节的IP头,8字节的UDP头,以及12字节的RTP头。这样,头信息至少要占用40个字节,那么RTP载荷的最大尺寸为1460字节。以H264 为例,如果一帧数据大于1460,则需要分片打包,然后到接收端再拆包,组合成一帧数据,进行解码播放。

四:RTSP流程

1:RTSP常见的命令:

DESCRIBE,ANNOUNCE,GET_PARAMETER,OPTIONS,PAUSE,PLAY,RECORD,SETUP,SET_PARAMETER,TEARDOWN,这里只说下常用的几种请求。

2:流程示例图:

 

3:OPTIONS:

C主动发出请求,查询S有哪些方法可以用(这10种当中),然后S回应给C自己有什么处理方法可以用。

4:DESCRIBE:

C主动发出请求,要求S给出C请求媒体的描述信息(即要C要接收的媒体,音频或视频的描述信息SDP),S将从文件或采集时读取的信息填写到固定格式的SDP中发送给请求本媒体的C。

5:SETUP

C主动发出请求,要求S创建传输数据的连接一般为UDP,S创建UDP,C与之连接。

6:PLAY

C主动发出请求,要求S开始往C传输数据,这时用到的就是SETUP建立的UDP连接,S开始往C传输数据,C接收,然后显示,存储等等。

7:TEARDOWN:

C主动发出请求,要求S关闭连接的会话,一个传输命令的TCP,一个传输数据的UDP,一般先停止传输数据(UDP),然后关闭连接。

五:SDP

1:SDP介绍

SDP用到的地方就是在DESCRIBE的,服务器将从文件或采集时读取的信息填写到固定格式的SDP中发送给请求本媒体的客户端。

SDP目的就是在媒体会话中,传递媒体流信息,允许会话描述的接收者去参与会话。SDP基本上在internet上工作。他定义了会话描述的统一格式,但并不定义多播地址的分配和SDP消息的传输,也不支持媒体编码方案的协商,这些功能均由下层传送协议完成。典型的会话传送协议包括:SAP(Session Announcement Protocol 会话公告协议),SIP(SessionInitiation Protocol,会话初始协议),RTSP,HTTP,和使用MIME的E-Mail。

SDP包括以下一些方面:

(1)会话的名称和目的

(2)会话存活时间

(3)包含在会话中的媒体信息,包括:

媒体类型(video, audio, etc)

传输协议(RTP/UDP/IP, H.320, etc)

媒体格式(H.261 video, MPEG video, etc)

多播或远端(单播)地址和端口

(4)为接收媒体而需的信息(addresses,ports, formats and so on)

(5)使用的带宽信息

(6)可信赖的接洽信息(Contactinformation)

2:SDP的结构

SDP 信息是文本信息,采用 UTF-8 编 码中的 ISO 10646 字符集。SDP 会话描述如下:(标注 * 符号的表示可选字段):
   v= (协议版本)
   o= (所有者/创建者和会话标识符)
   s= (会话名称)
   i= * (会话信息)
   u= * (URI 描述)
   e= * (Email 地址)
   p= * (电话号码)
   c= * (连接信息 ― 如果包含在所有媒体中,则不需要该字段)
   b= * (带宽信息)
   一个或更多时间描述(如下所示):
   z= * (时间区域调整)
   k= * (加密密钥)
   a= * (0 个或多个会话属性行)
   0个或多个媒体描述(如下所示)时间描述
   t= (会话活动时间)
   r= * (0或多次重复次数)
   编辑本段媒体描述m = (媒体名称和传输地址)
   i= * (媒体标题)
   c= * (连接信息 — 如果包含在会话层则该字段可选)
   b= * (带宽信息)
   k= * (加密密钥)
   a= * (0 个或多个会话属性行)

3:SDP举例

点播mp4文件sdp信息

v=0

o=HWPSS 3427743244 1084119141 IN IP4127.0.0.1

s=test1.mp4

test1.mp4:媒体文件名

c=IN IP4 0.0.0.0

t=0 0

a=control:*

a=range:npt=0-44.000000

44.000000:mvhd原子:ntohl (movie_header->duration)/ ntohl(movie_header->time_scale)

m=video 0 RTP/AVP 96

96:track->payload_type     视频:96 音频:97

a=control:trackID=101

101:轨道ID。  视频:101,102, 103  音频: 201,202, 203,204, 205

a=rtpmap:96 MP4V-ES/90000

90000:track->time_scale

a=fmtp:96 profile-level-id=2;config=000001b0020;

profile-level-id=2:    mp4v的子原子esds中得来

config=000001b0020: mp4v的子原子esds中得来

 

m=audio 0 RTP/AVP 97

a=control:trackID=201

a=rtpmap:97 mpeg4-generic/24000/1

24000: track->time_scale

1:mp4a的子原子esds中得来的

a=fmtp:97 streamtype=5;profile-level-id=15; mode=AAC-hbr; config=1308; SizeLength=13; IndexLength=3;IndexDeltaLength=3; Profile=1;

config=1308:mp4a的子原子esds中得来的

streamtype=5; profile-level-id=15; mode=AAC-hbr:写死

SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1:写死

RTSP服务器(二)相关推荐

  1. RTSP 和 RTMP原理 通过ffmpeg实现将本地摄像头推流到RTSP服务器

    RTSP 和 RTMP原理 & 通过ffmpeg实现将本地摄像头推流到RTSP服务器 文章目录 RTSP 和 RTMP原理 & 通过ffmpeg实现将本地摄像头推流到RTSP服务器 一 ...

  2. 探索C++与Live555实现RTSP服务器的艺术

    探索C++与Live555实现RTSP服务器的艺术 一.引言(Introduction) 1.1 RTSP服务器的重要性(Importance of RTSP Server) 1.2 C++与Live ...

  3. Rtsp协议,FFmpeg推流,rtsp服务器,vlc拉流播放下载安装使用使用详细流程以及EasyDarwin服务的方案

    FFmpeg推流,rtsp服务器,vlc拉流播放测试 FFmpeg 1. 简述: FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提 ...

  4. RTSP协议的一些分析(三)——简单的rtsp服务器的实现

    目录 一.简介 二.套接字的创建 三.解析请求 四.OPTIONS的响应 五.DESCRIBE的响应 六.SETUP的响应 七.PLAY的响应 八.源码 一.简介 RTSP服务器有两个部分组成,一个是 ...

  5. live555从RTSP服务器读取数据到使用接收到的数据流程分析

    本文在linux环境下编译live555工程,并用cgdb调试工具对live555工程中的testProgs目录下的openRTSP的执行过程进行了跟踪分析,直到将从socket端读取视频数据并保存为 ...

  6. 使用VLC搭建RTSP服务器

    VLC 是一款自由.开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD.音频 CD.VCD 及各类流媒体协议.既可以作为客户端来播放远程视频,也可以作为RTSP服务器对外发布视频,今 ...

  7. LIVE555再学习 -- VLC搭建RTSP服务器(转)

    实时流协议 RTSP 是在实时传输协议的基础上工作的,主要实现对多媒体播放的控制.用户对多媒体信息的播放.暂停.前进和后退等功能就是通过对实时数据流的控制来实现的. 而这些播放控制功能的实现不仅需要多 ...

  8. RTSP服务器实例live555源代码分析

    1. RTSP连接的建立过程      RTSPServer类用于构建一个RTSP服务器,该类同时在其内部定义了一个RTSPClientSession类,用于处理单独的客户会话.      首先创建R ...

  9. mac下RTSP服务器搭建(ZLMediaKit)

    mac下RTSP服务器搭建(ZLMediaKit) 目录 获取代码 编译器 cmake 依赖库 构建和编译项目 运行 测试 注:参考wiki(包含其他系统安装方式):https://github.co ...

最新文章

  1. 查询两张表 然后把数据并在一起_工作表数据查询时,类似筛选功能LIKE和NOT LIKE的应用...
  2. 【转帖】如何通过 javascript 访问 GridView/DataGrid 选中 CheckBox 行各列的值
  3. SOJ 4543 4542
  4. 2019年第一个工作日!
  5. 《iOS 6核心开发手册(第4版)》——2.1节UIControl类
  6. 惊呆了,JDK中这些常用方法也有Bug?
  7. 《MyBatis技术原理与实战》之动态SQL
  8. 老赖名下无财产,可以执行老赖子女名下的财产吗?
  9. 动态添加新元素事件无法触发解决方法
  10. 数据结构与算法--图的概念
  11. SoapUI接口测试-基本操作
  12. 自适应控制与鲁棒控制的区别
  13. 怎么把.nii文件转成.dcm文件
  14. 【工具】ubuntu16安装sendip发包工具,模拟发送tcp/udp/icmp报文
  15. [科研][转载] 对科研思维方法的整理(节选) from 玉泉老博
  16. 【思想感悟】站在巨人的肩膀上
  17. 【RCV】接收单号丢失处理
  18. 雾里看菊:热点IP是怎么生成的
  19. 抖音小程序基础之 TTSS 样式是什么
  20. 【Python游戏】用Python基于centernet在win10平台开发,射击游戏 | 附带源码

热门文章

  1. 爱普生打印机维修资料大全
  2. 汇道科技it培训让学员都能月入过万
  3. 软件 2.0 时代的程序分析
  4. 黑客精神 与 清心寡欲
  5. 服务器怎么当虚拟主机,服务器怎么做虚拟主机
  6. Rust在windows下安装以后cargo build Error: linker `link.exe` not found
  7. 大疆无人机参数解释YAW/Roll/Pitch
  8. 为了写论文给Linux引入漏洞,导致整个大学都被Linux拉黑!
  9. 居转户问题1-被退回之后附件如何删除?
  10. python程序员职业规划书_读书笔记之《程序员必读的职业规划书》