Skip to content

视频流知识

HLS、FLV、RTMP、RTSP

HLS、FLV、RTMP、RTSP 的优劣势及延迟情况对比:

HLS

优势:

兼容性好:基于 HTTP 协议,能在各种设备和浏览器上播放,包括 iOS、Android、桌面浏览器等,无需安装额外插件。

自适应码率:可根据网络状况动态调整视频码率,在网络带宽不稳定的情况下,能自动选择合适的码率来保证视频的流畅播放,提高了用户体验。

稳定性高:HTTP 协议本身具有广泛的应用和良好的兼容性,因此 HLS 在不同的网络环境和设备上都能够较为稳定地运行。

便于 CDN 缓存:切片式的传输方式使得 CDN 可以更方便地对视频进行缓存和分发,减轻源服务器的负担。

劣势:

延迟较高:将直播流分割成多个小的 TS 片段,每个片段的时长通常为几秒到十几秒不等,这种分段式的传输方式导致其延迟相对较高,一般在 10-30 秒左右,对于实时性要求极高的互动直播来说不太理想。

编码解码复杂:需要对视频进行切片和编码,增加了服务器的处理负担和编码解码的复杂度。

延迟情况:

一般在 10-30 秒左右。

FLV

优势:

文件体积小:形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,在网络带宽有限的情况下,能够更快地加载和播放视频。

播放灵活:FLV 文件可以包含多种编码格式的视频和音频流,便于在 Flash 播放器上流式传输,并且可以不通过本地的微软或者 REAL 播放器播放视频。

技术成熟:曾经是 Adobe Flash Player 使用的主要视频格式,相关的技术和工具比较成熟,有较多的播放器和服务器支持。

劣势:

需要 Flash 插件:传统的 FLV 视频依赖于 Flash 插件,在一些不支持 Flash 插件的设备和浏览器上无法播放,限制了其使用范围。

相对封闭:是一种封闭的格式,只能通过 Flash Player 播放器进行播放和显示,而且其流媒体传输需要使用 RTMP 协议,不如 HLS 和 HTTP-FLV 灵活。

编码效率相对较低:与一些新兴的视频编码格式相比,FLV 的编码效率相对较低,在相同的画质下,可能需要更高的码率。

延迟情况:

如果是基于 RTMP 协议传输的 FLV,延迟一般在 2-5 秒左右;如果是基于 HTTP 协议传输的 HTTP-FLV,延迟相对较高,一般在 5-10 秒左右,但比 HLS 低。

RTMP

优势:

低延迟:基于 TCP 协议,通过保持一个持续的 TCP 连接,实现了低延迟的数据传输,适合实时互动和直播场景,一般情况下,其延迟可以控制在 1-3 秒左右,能够让主播和观众之间的互动更加流畅自然。

稳定性高:具有成熟的技术架构和完善的错误处理机制,能够在各种网络环境下保持较好的传输稳定性,即使在网络出现波动或丢包的情况下,也能够通过重传等机制来保证数据的完整性和连续性,减少直播卡顿和中断的情况发生。

支持广泛:在 Flash 平台和服务器之间传输音频、视频和其他数据,曾经被广泛应用于直播和视频会议等领域,相关的服务器和客户端软件比较丰富。

劣势:

需要特定服务器和客户端:需要搭建专用的 RTMP 服务器和使用特定的客户端来进行传输和接收,增加了实现和维护的复杂度。

容易被劫持:是一种比较容易被劫持的传输协议,存在一定的安全风险。 不支持浏览器原生播放:在浏览器中需要安装 Flash 插件才能播放,随着 Flash 插件的逐渐淘汰,其在浏览器中的兼容性问题日益突出。

延迟情况:

一般可以控制在 1-3 秒左右。

RTSP

优势:

实时性好:常用于视频聊天、视频监控等对实时性要求较高的场景,能够提供较好的实时传输效果。 可扩展性强:是一个基于文本的协议,以自描述方式增加可选参数更容易,不同的媒体服务器可以根据各自的功能,支持不同的请求集,扩展自己的新参数、方法,甚至定义新版本协议。

支持多种传输协议:可使用 TCP 或 UDP 完成数据传输,还可以与 RTP、RTCP 等协议结合使用,根据实际需求选择合适的传输方式。

控制功能强大:提供了丰富的控制命令,如播放、暂停、快进、快退等,方便客户端对媒体流进行控制。

劣势:

实现复杂:协议本身相对复杂,开发和实现难度较大,需要专业的技术人员进行开发和维护。

兼容性问题:在不同的设备和浏览器上的兼容性不如 HLS 好,可能会出现一些播放问题。

防火墙限制:由于其使用的端口可能会被防火墙拦截,在一些网络环境中可能需要进行特殊的配置才能正常使用。

延迟情况:

本身不直接控制传输延迟,延迟主要取决于 RTP 和网络条件,一般在 1-5 秒左右,但在网络条件较好的情况下可以实现更低的延迟。

H264与H265的差别

H.265(HEVC)和 H.264(AVC)是两种广泛应用的视频编码标准,它们存在多方面的差别:

视频画质

静止画面:

在画面静止时,H.265 和 H.264 的画质表现差异不大 ,都能以较低码率维持较好的清晰度。不过,H.265 由于采用了更先进的帧内预测模式,例如更多方向的预测、更大尺寸的预测块,相比 H.264 能捕捉到更细腻的纹理细节,像拍摄一幅静止的风景照,H.265 编码下树叶、岩石的纹理会稍显锐利清晰。

动态画面:

画面快速变化时,H.265 优势明显。H.265 具备更灵活的运动补偿技术,支持更大范围的运动矢量,能够更精准追踪物体运动,减少运动模糊。比如拍摄一场激烈的体育赛事,H.265 编码下运动员奔跑、球的飞行轨迹会更清晰连贯,不易出现拖影、画面撕裂现象,视觉体验更好。

文件大小

相同画质下:

H.265 编码后的视频文件大小通常比 H.264 小很多。H.265 通过更高效的编码算法,如更优的熵编码、更复杂的预测模式组合,在保证相同主观视觉质量的前提下,能节省 30% - 50% 的码率,也就意味着生成的视频文件体积更小。例如一段 10 分钟的高清视频,用 H.264 编码可能是 500MB,而用 H.265 编码可能只有 250 - 350MB。

编码复杂度与性能需求

编码端:

H.265 的编码复杂度远高于 H.264。它拥有更多的编码工具和算法选项,在编码时需要消耗更多的计算资源,对 CPU、GPU 性能要求更高。一台老旧电脑编码 H.264 视频尚可应付,但编码 H.265 视频就可能卡顿严重。

解码端:

早期,H.265 解码对硬件支持要求较高,很多老旧设备无法流畅解码 H.265 视频,导致播放卡顿甚至无法播放。随着技术普及,如今大部分智能手机、智能电视、电脑显卡都内置了 H.265 解码能力,使得 H.265 视频的播放兼容性越来越好。

兼容性

H.264 的兼容性堪称无敌,问世多年,几乎所有的视频播放设备、浏览器、视频编辑软件都原生支持 H.264。而 H.265 尽管应用越来越广泛,但仍有部分老旧设备、小众软件不支持,需要额外的插件或者转码才能播放。

编码单元与预测模式:

H.264:

采用宏块(Macroblock)作为基本编码单元,宏块大小固定为 16×16 像素。帧内预测模式相对有限,主要基于临近像素预测当前像素值,方向选择较少,一般是 9 种方向的预测模式 ,这在处理复杂纹理时稍显吃力。

H.265:

引入了编码树单元(Coding Tree Unit,CTU),尺寸最大可达 64×64 像素,这种更大的单元划分让编码器可以从更大范围考量如何编码,提升编码效率。帧内预测模式大幅扩充,有 35 种方向的预测模式,能极为细致地捕捉图像中的纹理走向,像是丝绸、毛发这类细节丰富的物体,H.265 编码能呈现出更逼真的视觉效果。

变换与量化:

H.264:

使用 4×4 和 8×8 的离散余弦变换(DCT),把空域图像数据转换到频域进行处理,量化步长调整相对简单直接,这在一定程度上限制了对数据压缩的精细程度。

H.265:

除了 4×4 和 8×8 的 DCT 变换,还新增了 16×16 和 32×32 的 DCT 变换,对于大块平坦区域能实现更优的压缩效果。同时,量化过程更为灵活,可基于编码单元特性动态调整量化参数,减少不必要的高频信息丢失,从而维持更好的画质。

熵编码:

H.264:

主要采用上下文自适应可变长度编码(CAVLC)与上下文自适应二进制算术编码(CABAC),其中 CAVLC 相对简单,但压缩效率有限;CABAC 虽然效率更高,但复杂度也较高,H.264 并没有充分发挥它的潜力。

H.265:

对 CABAC 进行优化,提升了编码效率,让算术编码在更多场景下发挥优势,减少编码冗余。同时,H.265 的熵编码可以更好地适应不同类型的数据分布,无论是高频细节多的区域,还是低频平坦区域,都能更精准压缩。

参考帧数量与管理:

H.264:

支持的参考帧数量相对有限,一般为 1 - 16 帧,在处理快速复杂的运动场景时,有限的参考帧有时难以精准重构运动画面。 H.265:

允许更多的参考帧,最多可达 32 帧,更多的参考帧意味着在处理连续运动时,编码器有更丰富的信息去匹配、还原当前帧,使得运动补偿更加精确,这在长序列的动态画面编码中效果显著。

并行处理能力:

H.264:

并行处理设计相对基础,不太容易充分利用多核 CPU、GPU 等现代硬件的并行计算能力,导致编码解码速度受限。 H.265:

从设计之初就考虑到了并行处理需求,编码和解码流程能够更方便地拆分成多个并行任务,交由多核处理器同步处理,加快编解码的整体速度,尤其在高分辨率、高帧率视频的处理上优势尽显。