的视频传输方式【转发】简介1 .流媒体2.TCP/IP、OSI与视频传输协议的关系3 .组播、单播与广播4 .视频传输协议5 .自适应流媒体
概要
搜索“视频传输协议”将搜索RTP、RTSP、UDP等。 如果只看这些协议,可能有人会觉得奇怪,为什么udp也会一起提高,但rtp不是可以基于udp吗? 同时,许多文章主要说明各协议之间的差异,而不是从更宏观的角度考虑。 本文结合OSI的层次构想,梳理不同协议之间的所有关系; 也从视频传输和组网的角度进行介绍。
注意,视频还有许多音频-视频编码格式,例如h264和h265,它们具有许多封装格式,例如m3u8和mp4。为什么有这么多封装格式类型和音频-视频编码格式类型一方面解决存储问题,另一方面支持不同播放器的分析; 然而,更重要的是不同的传输协议所支持的语音-视频编码格式之间存在差异,这也是在不同的APP应用场景中形成的历史原因。
1 .流媒体可以通过从服务器侧向客户端广播一系列媒体分组,并且该技术允许分组如同流水一样发送。 传统方法要求在使用前下载整个文件,将其保存到本地,然后播放。 流媒体只允许下载和播放视频密钥所在的小部分。
流媒体技术不是单一技术,而是网络技术、音视频技术、终端缓存技术等的有机结合。 也就是说,在互联网上实现流媒体技术,首先需要创建、发布、传输、播放等,这需要服务器端、终端及网络能够支持。 现在很多视频软件和网站都在使用这个技术。 总结如下。
1 .内容生成。 这里,指的是将视频源设为能够向外部公开的视频形式,以及适合在网络上分发的分辨率和编码率。 它主要用于视频编解码技术。 的输出参数,例如分辨率、码率、音视频编码格式、封装格式等,必须结合APP应用场景和传输方式统一考虑。
2 .对外公布。 这里主要意味着支持服务器向外部输出视频资源的技术,一般有各种流媒体网络传输协议技术以及需要该服务器端支持的技术。 这里的流媒体网络传输协议例如:
HLS
服务端支持Adobe Flash media server、Nginx、vlc等。 达什
服务器端支持RTMPAdobe Flash服务器(如Nginx )、Nginx-rtmp 3.组网络和传输。
此处的传输还必须考虑服务器是主动将数据推送到外部,还是等待终端将数据拉向服务器的概念。 这是两种完全相反的处理方法。 在组播和广播组网方式中,在服务多采用主动将数据推送至外部的方式的单播中,终端主要是主动将数据拉向服务器端。
这里处理的IP组网方式中的传输类型是广播、单播、多播。
无论何种类型的网络方案,传输层都有UDP和TCP。 从OSI等层面也介绍了这些基本传输协议之间的关系。
4 .视频播放。 在此,主要从终端侧来看,能够在不同的操作系统中进行视频播放的播放器,例如vlc等,根据播放器的不同而支持不同种类的视频数据的播放。
2 .从2.TCP/IP、OSI和视频传输协议之间的关系图可以看出,IP层(网络层)的上层是传输层,通过TCP、UDP等进行分组传输。
(PS )下图为在网络上找到的https://blog.csdn.net/Yao Peng _ 2005/article/details/7064869 )。
结合上图,添加另一个wiki上的internet协议套件图可以更好地理解。
从上面的两幅图也可以看出,TCP和UDP在以下内容中占有重要的地位。 这里也简单介绍一下,渊博的知识请自己搜索。
1 )传输控制协议(TCP )
一种面向连接、基于可靠字节流的传输层协议。 也就是说,在发送和接收数据之前,必须与对方建立可靠的连接。 有兴趣可以了解TCP的三次握手过程。 TCP检测到丢包时会限制数据速率的利用率,因此TCP也被称为可靠的,但可能不太适合实时类型的业务。 2 )用户数据报协议(UDP )
一种简单的面向数据报的通信协议。 UDP只提供不可靠的数据传输,在发送数据后不保留备份。 只是在IP数据报的标题中添加了重用和数据验证字段。 不需要长时间检查,UDP的速度比TCP快,但有数据丢失的风险,因此适合实时语音和视频通话等要求实时性的场景。 在广电网络的场景中,以前多使用UDP进行传输,而且是组播和广播的方式。 这与组网联合可以大大降低流量的成本。 3 ) IP层(互联网协议)。
IP是网络层的主要协议,根据源主机和目标主机的地址进行数据传输。 定义了寻址方法和数据报的封装结构。 其最复杂的是寻址和路由。 寻址是指为每个终端节点分配IP地址,并如何划分网络。 路由主要是内部网关和外部网关协议,决定如何发送IP数据包。 以下列举的组播和广播等,实际上主要针对IP组播。 4 )不同层之间数据的术语称呼
数据在TCP层被称为流,数据包被称为段
数据在IP层中被称为数据分组,数据分组被称为分片(Fragment )
在UDP中,组称为Message 3.多播、单播
广播
组播(multicast)
又称为多点广播或群播,或多播,主要是指将信息同时传递给一组目的地址。消息在每个网络链路上只需传递一次,而且只有在链路分叉时,消息才会被复制,使用的效率是最高的。也正是因为这个原因,以前的广电网络中,针对直播多采用组播方式,流量的传输成本明显降低很多。
单播:
其实是组播的一种特殊方式,即常规的点到点信息传递。如果所有传输中是以单播的方式传递给多个接收方,必须向每个接收者都发送一份数据副本这么多。
广播
其实也算是组播的一种特殊方式,就是一对所有的通信方式,对每一台主机发出的信号都进行无条件复制并转发,所有的接收点都可以收到所有信息。
注意,组播一般指的是IP组播,常与RTP等音视频协议相结合。虽然组播的设计理念很好,但是它需要对网络内部的状态比单播要多得多。实际商用中,组播主要应用在较为简单的、只有单个源断的情况,如之前提到广电网络内部用到的组播方式,UDP组播。
以上是不同类型的IP组播方式,实际在采用中要结合具体情况进行调整。比如,如果非要使用广播,但是采用的场景不合适,也有可能产生广播风暴。
组播、广播、单播也介绍了基本的概念,但是他们与视频传输有什么关系呢?
文章上面也提到了,组播是从IP层面的传输策略,而所有的视频传输协议其数据包大部分都经过UDP和TCP,经由IP层进行传输到目的地。因此不同的IP传输策略与传输协议进行结合,就能够落地到具体的应用场景。
同时需要注意的是,采用组播方式可以通过设置网卡为混杂模式或为多播模式,具体也是根据网卡的特性进行差异处理。如果处理方式不当,比如设置成了广播,可能会导致在同网络下,你在播放视频,然后其他相同网络下接收端也将有相应的流量,而导致他们的对外服务网口的流量被占满。
4.视频传输协议
从下图中可以看到,标红色的就是大家经常说的视频传输协议。但是从图中可以看到他们其实是有基于的关系,比如HLS都是基于HTTP进行传输,而HTTP在传输层都是依赖tcp数据包,再经由ip层进行分发。
1)UDP
基于UDP传输的视频数据,比如udp://238.123.45.1:3001,在网络可达的情况下,即可进行播放。可以采用vlc等播放器进行播放。
UDP视频数据传输可以采用单播,组播或广播的方式,具体采用哪种方式根据具体的组网情况进行控制。
上面也有提到过,广电网络中多采用组播的方式进行直播数据传输,这也是得益于广电网络的专网特性以及视频源输出可以控制到单一等特性。
UDP的组播大部分是采用MPEG TS流,广电网络中很多视频,其视频编码格式也大部分是mepg2
2)RTP
整个RTP协议包括RTP数据协议和RTP控制协议(RTCP)。此外,这里也将经常一起提的RTSP介绍下。
RTP(实时传输协议,Real-time Transport Protocol),是一种网络传输协议
RTP协议说明了传递音频和视频的标准数据包的格式。最早是作为多播协议的,后来主要应用在单播中。RTP是创建在UDP协议之上的,主要应用于流媒体、视频会议等系统业务上。
RTP为端到端的数据传输提供了时间信息和流同步,但不保证服务质量,而是由服务质量由RTCP。
在RTP的数据包封装中,包含了时间戳、标记位、同步源标识等信息。
RTP从上层接收到流媒体的数据(如H264),封装成RTP数据包,并将其发往UDP端口中的偶数端口。
RTCP(实时传输控制协议,Real-time Transport Control Protocol或RTP Control Protocol)
RTP的姐妹协议。RTP使用的是偶数UDP端口,RTCP采用的是RTP下一个端口,也就是下一个奇数的端口。RTCP也是基于UDP进行传输的。
RTCP本身不做数据传输,主要与RTP协作,将视频媒体数据打包和发送,并定期在流媒体会话参与者之间传输控制数据,并为RTP提供QoS反馈,简单点说是主要保证音视频的同步。
RTCP接收到控制信息后,封装为RTCP控制包,并发往RTP端口下一个偶数端口。
RTSP(实时流协议,Real Time Streaming Protocol)
RTSP是一种网络应用协议,主要来创建和控制流媒体服务器与终端之间的会话。控制类的请求主要走TCP协议。
通过RTSP对流媒体数据进行控制和播放,比如进行播放、暂停、快进等操作,它定义了具体的控制消息、操作方法和状态码等。
与RTP、RTCP配合,在广电网络内部主要应用在点播场景比较多,而直播主要走UDP组播。在互联网场景下,也有用于直播和点播的,但是相对来说使用较少。
请求的url为:rtsp://testdomain/test.mp4/streamid=0
需要服务器端和客户端都能够支持RTSP的控制。一般客户端采用vlc即可,而服务器端采用Darwin Streaming Server,ffmpeg等建立流媒体服务。
3)RTMP(实时消息协议,Real-Time Messaging Protocol)
包括RTMP、RTMPT等一系列的协议,Adobe为flash播放器和服务器之间音视频数据传输的协议。
RTMP
1)主要基于TCP协议进行数据包传输,默认使用1935端口。
2)服务器端采用Nginx,支持rtmp模块的即可支持对外rtmp视频数据服务。
3)支持rtmp模块,可以支持直播rtmp输出,也能够支持hls访问。
4)RTMP支持mp4,flv等封装格式的视频对外输出RTMPS
通过SSL加密的RTMP协议RTMPE
RTMPE是一个加密版本的RTMP,和RTMPS不同的是RTMPE不采用SSL加密,RTMPE加密快于SSL,并且不需要认证管理RTMPT
采用HTTP封装以穿透防火墙,通常用80和443端口。RTMFP
使用UDP进行数据传输
4)HTTP
而基于HTTP协议的就更多了,如上图。如果服务器部署了流媒体的服务,如Nginx等,就可以对外提供视频播放服务了。
这里也需要说明,视频的播放一般分为点播和直播,有些协议作为直播的传输协议反而是更好的,比如RTMP,时延就比较低,但RTMP做CDN成本相对较高。CDN支持很好的HTTP如果能支持直播,当前也有很多协议能支持通过HTTP的方式实现直播流媒体。
5.自适应流媒体
自适性流媒体(adaptive bitrate streaming,ABS)也叫码流自适应,是流媒体服务器准备各种码流的视频流,所有的视频码流都是相同时段完全统一图像的音视频数据,客户端根据网络情况和CPU使用情况等进行动态调整。
主要有MPEG-DASH、HLS、HDS、MSS等技术方案,这几个也是上图中最上层的流媒体传输协议技术。通过这些传输协议封装的视频源,可以支持有多种码率,并支持播放器客户端在播放时,根据带宽情况自动调整码率以适应用户的最佳观看效果——不卡顿,不重新加载等。
1) DASH(MPEG-DASH)
MPEG-DASH是基于HTTP的自适应码流方案中唯一国际标准,它采用TCP传输协议。2)HLS
Apple提出的,将.m3u8作为索引文件,分片格式为ts,支持直播和时移。3)HDS
采用支持RTMP和HTTP协议,HTTP协议类似于HLS,也可以叫渐进式下载。4)MSS
是微软提出的,文件切片格式为mp4,索引文件为ism、ismc,也支持直播和时移。
这里也仅仅对码流自适应技术做了简单介绍,由于现在这种技术应用相当广泛,后面将详细介绍这种技术。
【说明】
文章转自,华为云社区,作者Higeeon,相关版权解释权归原作者所有。https://bbs.huaweicloud.com/blogs/fed3df04b1e011e9b759fa163e330718
一分快三技巧,包含了时间戳、标记位、同步源标识等信息。
RTP从上层接收到流媒体的数据(如H264),封装成RTP数据包,并将其发往UDP端口中的偶数端口。
RTCP(实时传输控制协议,Real-time Transport Control Protocol或RTP Control Protocol)
RTP的姐妹协议。RTP使用的是偶数UDP端口,RTCP采用的是RTP下一个端口,也就是下一个奇数的端口。RTCP也是基于UDP进行传输的。
RTCP本身不做数据传输,主要与RTP协作,将视频媒体数据打包和发送,并定期在流媒体会话参与者之间传输控制数据,并为RTP提供QoS反馈,简单点说是主要保证音视频的同步。
RTCP接收到控制信息后,封装为RTCP控制包,并发往RTP端口下一个偶数端口。
RTSP(实时流协议,Real Time Streaming Protocol)
RTSP是一种网络应用协议,主要来创建和控制流媒体服务器与终端之间的会话。控制类的请求主要走TCP协议。
通过RTSP对流媒体数据进行控制和播放,比如进行播放、暂停、快进等操作,它定义了具体的控制消息、操作方法和状态码等。
与RTP、RTCP配合,在广电网络内部主要应用在点播场景比较多,而直播主要走UDP组播。在互联网场景下,也有用于直播和点播的,但是相对来说使用较少。
请求的url为:rtsp://testdomain/test.mp4/streamid=0
需要服务器端和客户端都能够支持RTSP的控制。一般客户端采用vlc即可,而服务器端采用Darwin Streaming Server,ffmpeg等建立流媒体服务。
3)RTMP(实时消息协议,Real-Time Messaging Protocol)
包括RTMP、RTMPT等一系列的协议,Adobe为flash播放器和服务器之间音视频数据传输的协议。
RTMP
1)主要基于TCP协议进行数据包传输,默认使用1935端口。
2)服务器端采用Nginx,支持rtmp模块的即可支持对外rtmp视频数据服务。
3)支持rtmp模块,可以支持直播rtmp输出,也能够支持hls访问。
4)RTMP支持mp4,flv等封装格式的视频对外输出RTMPS
通过SSL加密的RTMP协议RTMPE
RTMPE是一个加密版本的RTMP,和RTMPS不同的是RTMPE不采用SSL加密,RTMPE加密快于SSL,并且不需要认证管理RTMPT
采用HTTP封装以穿透防火墙,通常用80和443端口。RTMFP
使用UDP进行数据传输
4)HTTP
而基于HTTP协议的就更多了,如上图。如果服务器部署了流媒体的服务,如Nginx等,就可以对外提供视频播放服务了。
这里也需要说明,视频的播放一般分为点播和直播,有些协议作为直播的传输协议反而是更好的,比如RTMP,时延就比较低,但RTMP做CDN成本相对较高。CDN支持很好的HTTP如果能支持直播,当前也有很多协议能支持通过HTTP的方式实现直播流媒体。
5.自适应流媒体
自适性流媒体(adaptive bitrate streaming,ABS)也叫码流自适应,是流媒体服务器准备各种码流的视频流,所有的视频码流都是相同时段完全统一图像的音视频数据,客户端根据网络情况和CPU使用情况等进行动态调整。
主要有MPEG-DASH、HLS、HDS、MSS等技术方案,这几个也是上图中最上层的流媒体传输协议技术。通过这些传输协议封装的视频源,可以支持有多种码率,并支持播放器客户端在播放时,根据带宽情况自动调整码率以适应用户的最佳观看效果——不卡顿,不重新加载等。
1) DASH(MPEG-DASH)
MPEG-DASH是基于HTTP的自适应码流方案中唯一国际标准,它采用TCP传输协议。2)HLS
Apple提出的,将.m3u8作为索引文件,分片格式为ts,支持直播和时移。3)HDS
采用支持RTMP和HTTP协议,HTTP协议类似于HLS,也可以叫渐进式下载。4)MSS
是微软提出的,文件切片格式为mp4,索引文件为ism、ismc,也支持直播和时移。
这里也仅仅对码流自适应技术做了简单介绍,由于现在这种技术应用相当广泛,后面将详细介绍这种技术。
【说明】
文章转自,华为云社区,作者Higeeon,相关版权解释权归原作者所有。https://bbs.huaweicloud.com/blogs/fed3df04b1e011e9b759fa163e330718