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