一、流媒体协议
1.1 基本概念
各种流媒体协议都是将视频分解为多个块,然后发送给视频播放端,播放端接收、重新组合、完成播放。根据传输是否顺序传输,还有实时流式传输和顺序流式传输的区别。接下来我们就介绍常用的几种常用技术:RTP、RTSP、RTMP、HLS、SRT、WebRTC。
1.1.1 HLS
HLS是HTTP Live Streaming,由Apple公司提出的基于短连接HTTP的媒体流传输协议,用于实时音视频流的传输。由于其实基于HTTP协议的,所以网络支持很好,能方便穿透防火墙或代理服务器。任何播放器都可以播放。
HLS协议将整条流切割成一个小的能够经过HTTP下载的媒体文件,而后提供一个配套的媒体列表文件M3U8。客户端拿到M3U8后,根据内容顺序地拉取媒体文件播放。
HLS有很明显的优势,因为其针对HTTP协议进行针对设计,客户端只须要支持HTTP请求即可。另外,使用HTTP协议网络兼容性好,HTTP数据包也能够方便地经过防火墙或者代理服务器,CDN支持良好。还有就是Apple公司提出的HLS,Apple全系列产品支持HLS协议,Android也已经加入了对HLS的支持。
但HLS由于采用切片式的多媒体文件,因为切片需要时间编码,所以切片的延时不可避免。另外使用HTTP短连接,需要不断的与server建立连接,且需要完成TCP的三次握手,四次挥手,交互耗时长。所以HLS的延时较高,难以用到时延要求更严格的直播场景。另外,由于HLS切片一般较小,海量碎片在文件分发、一致性缓存都有较大挑战。
协议:HLS使用HTTP协议进行传输,这使得它适用于通过Web服务器分发视频流。它利用HTTP的可靠性和广泛的支持。
容器格式:HLS通常使用.ts(MPEG Transport Stream)作为容器格式,但也可以使用.mp4等其他格式。这使得它能够包含音频、视频和字幕等多种流。
自适应流:HLS支持自适应流,它可以根据观众的网络速度和设备性能动态调整视频质量和比特率,以提供更好的用户体验。
广泛支持:由于苹果的推广和广泛支持,HLS在各种设备和平台上都有很好的兼容性,包括iOS、Android、Web浏览器等。
1.1.2 m3u8
学习链接:https://juejin.cn/post/7213240802378498104?searchId=2023122115444110F5C8E06C9094E62BDF
m3u8 是「MPEG-3 Unicode UTF-8」
的缩写,其中 MPEG-3
是一种音频压缩标准,而 Unicode UTF-8
是一种字符编码标准。因此,m3u8 文件是一种使用 MPEG-3 音频编码和 Unicode UTF-8 字符编码的多媒体文件格式。它用于指定分段视频文件的地址和顺序,以便于流媒体播放器能够按照正确的顺序请求和播放这些分段文件。m3u8 通常用于 HLS 协议的视频流媒体传输中。
下方是控制台中获取的 m3u8 格式文件:
在这里插入图片描述
一个 m3u8
格式的文件通常包含以下内容:
- #EXTM3U:文件头,指示这是一个 m3u8 格式文件。
- #EXT-X-VERSION:指定 HLS 版本号。
- #EXT-X-MEDIA-SEQUENCE:指定第一个分段的序号。
- #EXT-X-TARGETDURATION:指定每个分段的时长。
- #EXTINF:指定每个分段的时长和 URL 地址。
- URL地址:分段视频文件的 URL 地址。
m3u8
文件中的每个 URL 地址指向一个包含媒体数据的分段文件。播放器会按照m3u8 文件中指定的顺序依次请求这些分段文件,并在播放过程中动态地调整分段文件的请求顺序和质量,以实现更稳定和流畅的播放效果。
1.2.1 FLV(Flash Video)
FLV是由Adobe Flash技术引入的,曾经是网络视频传输的主要格式。然而,随着HTML5的兴起和Flash的逐渐淘汰,FLV的使用已经大幅减少。
FLV(Flash Video)是Adobe公司设计开发的一种流行的流媒体格式,由于其视频文件体积轻巧、封装简单等特点,使其很适合在互联网上进行应用。此外,FLV可以使用Flash Player进行播放,且任何播放器都可以播放,比较大众的一种格式,而Flash Player插件已经安装在全世界绝大部分浏览器上,这使得通过网页播放FLV视频十分容易。
原文链接:https://blog.csdn.net/zranxi/article/details/122866828
协议:FLV使用RTMP(Real-Time Messaging Protocol)或HTTP进行传输。RTMP在传输实时视频流方面表现出色,但需要专门的服务器支持,而HTTP-FLV则使用HTTP协议。
容器格式:FLV使用自己的容器格式,通常包含音频和视频轨道。
逐渐过时:由于HTML5视频标准的广泛支持,以及Adobe决定于2021年停止支持Flash Player,FLV的使用逐渐减少。许多现代浏览器不再支持Flash。
安全性:FLV曾经面临一些安全性和漏洞问题,这也是它逐渐被淘汰的原因之一。
总的来说,HLS和FLV在使用和特点上有很大的差异。HLS在今天更为常见,因为它具有更好的兼容性、自适应流传输以及更广泛的支持。FLV则主要用于旧版Flash应用程序和特定的流媒体服务器环境,不再是现代互联网视频传输的首选格式。
1.3.1 RTMP (Real-Time Messaging Protocol)
RTMP(Real-Time Messaging Protocol)
RTMP是由Adobe公司(前身Macromedia)开发的一种专有的实时流传输协议,主要用于将音频、视频和数据信息进行低延迟、高效率的传输。RTMP基于TCP协议,确保了数据传输的可靠性,并能在客户端(如Flash Player)和服务器(如Adobe Media Server)之间建立并维持持久连接。
特点:
- 低延迟:RTMP在设计之初就注重实时性,能够提供相对较低的延迟,适合实时直播场景。
- 全双工通信:支持双向通信,不仅可以用于流媒体推送,还可以用于实时交互数据传输,例如用户输入、聊天等互动功能。
- 多路复用:在同一连接上可以同时传输音频、视频和数据消息,每个消息都有独立的时间戳保证同步播放。
- 安全性:RTMP有多种加密变种,如RTMPS(基于SSL/TLS加密)、RTMPE(使用Adobe私有加密算法)等。
1.3.2 SRT (Secure Reliable Transport)
SRT(Secure Reliable Transport)
SRT是一种开源的、专为互联网不稳定环境设计的低延迟视频传输协议,由Haivision公司在2013年发起并贡献给开源社区。SRT既利用了UDP协议的高效性,也克服了其不可靠性的弱点,实现了类似于TCP的错误恢复和重传机制。
特点:
- 低延迟:通过智能拥塞控制算法优化带宽使用,减少延迟,特别适合实时广播和远程协作场景。
- 可靠性:尽管基于UDP,但通过引入ACK/NACK、重传、拥塞控制和带宽探测等机制,提供了接近TCP级别的可靠性。
- 安全性:支持AES加密,保障数据传输安全。
- 适应网络状况:能够在丢包率较高、带宽波动较大的网络环境下保持稳定、高质量的视频传输。
简而言之,RTMP是一个广泛应用的传统流媒体协议,尤其在Flash时代广泛应用于在线视频和直播领域,随着Flash退出历史舞台,现代流媒体解决方案更倾向于采用开放标准和更为灵活高效的协议。而SRT作为新一代流媒体传输协议,因其对网络条件的高度适应性和安全性,正逐渐成为业界的新宠,特别是在专业广电和远程通信领域得到广泛应用。
二、视频编码
I帧(Intra-coded picture, I-frame 或者 Intra frame)在视频压缩技术中具有重要地位,尤其是在MPEG和H.26x系列视频编解码标准中。I帧是一种采用帧内编码方式的图像帧,其主要特点包括:
独立性:I帧是编码序列中的一个独立单元,它不依赖于视频序列中的其他帧进行解码。这意味着解码器仅需要I帧自身的数据就能够重构出完整的图像,无需参照其他帧的信息。
关键帧:由于其独立性,I帧通常作为编码序列或GOP(Group of Pictures)的起始帧,也被称为关键帧。在流媒体传输、随机访问和编辑操作中,I帧起到了关键作用,因为它提供了随机访问点,用户可以从任意一个I帧开始解码和播放视频流。
高数据量:相较于P帧和B帧,I帧由于包含了完整的图像信息,所以数据量较大,压缩率相对较低。
重建基准:后续的P帧和B帧会根据与最近的I帧之间的差异来进行编码,从而节省带宽。P帧基于前向预测,B帧基于双向预测,它们都需要参考前面或后面的I帧或P帧来解码。
总的来说,I帧在视频编码中扮演着基础参照的角色,是视频压缩和传输的重要组成部分,用于保证视频质量和提供错误恢复机制的关键结构。