常见格式分析 --- hls和m3u8
hls和m3u8是干什么,
我们打开的在线视频播放功能很多都是m3u8格式,还有摄像头监控的web播放视频的格式
hls是HLS(HTTP Live Streaming,HTTP实时流媒体)是一种基于HTTP的流媒体传输协议,由苹果公司(Apple)推出。
M3U8 是一种基于文本的播放列表文件格式,常用于描述音视频内容的存储位置和播放顺序。它是 M3U(MP3 URL)的扩展,专门用于支持UTF-8编码。M3U8文件广泛应用于 HTTP Live Streaming (HLS) 协议中,作为流媒体播放列表的核心,帮助播放器在播放过程中加载和播放音视频片段。
HLS的工作流程:
视频准备和切片:
视频源被分割成多个小的 .ts 片段,每个片段通常持续10秒左右。这些片段会存储在服务器上。
生成播放列表:
创建一个或多个 .m3u8 播放列表文件,指明每个片段的URL和媒体流的相关信息。
播放:
客户端(例如浏览器、移动设备等)会请求 .m3u8 播放列表,解析列表中的片段信息,按照顺序逐一请求片段进行播放。
如果网络条件变化,播放器会动态选择不同质量的片段进行播放。
m3u8格式
#EXTM3U 这是每个HLS播放列表文件的开始标志。#EXTM3U是M3U播放列表的扩展标识符,表明这个文件是HLS格式的播放列表文件。
#EXT-X-VERSION:3 版本号
#EXT-X-MEDIA-SEQUENCE:0 播放器会从第0个片段开始播放。
#EXT-X-TARGETDURATION:4 每个.ts视频片段的最大时长是4秒(尽管实际时长可能稍短,但绝不会超过4秒)
#EXT-X-DISCONTINUITY 指示播放列表中存在一个时间上的不连续性(即播放器在播放下一个片段时需要跳跃到一个新的时间点)。通常,这意味着播放列表中有不同编码设置、不同分辨率或不同码率的片段,播放器需要调整或重新同步播放。它通常出现在流的切换点。
#EXTINF:3.924, no desc 是每个视频片段的信息标记。后面跟着的是该片段的时长(单位为秒)。在这个例子中,3.924表示该片段的持续时间是3.924秒。后面的“no desc”是该片段的描述,通常用于标记信息或附加数据,但在这里没有具体描述。
0.ts?hls_ctx=45ec9e52eec247d49f7f682d5109f53a 1这是视频片段的URL,0.ts是视频片段的文件名(通常是视频数据的实际内容)。?hls_ctx=45ec9e52eec247d49f7f682d5109f53a是一个查询参数,通常用于传递上下文或身份验证信息,确保请求的合法性或在播放时保持会话状态。
#EXTINF:3.923, no desc
1.ts?hls_ctx=45ec9e52eec247d49f7f682d5109f53a
#EXTINF:3.924, no desc
2.ts?hls_ctx=45ec9e52eec247d49f7f682d5109f53a
为什么需要 #EXT-X-DISCONTINUITY:
不同的编码设置: 比如在播放过程中切换视频分辨率(从 720p 切换到 1080p),编码方式(从 H.264 切换到 HEVC)或者帧率(从 30fps 切换到 60fps)等。播放器需要处理这种变化,并确保视频播放的连续性和流畅性。
广告插入: 例如,视频播放过程中可能插入广告,广告和正常视频内容之间可能会有不同的编码方式或其他设置。通过使用 #EXT-X-DISCONTINUITY,播放器能够理解广告片段的开始和结束,并正确处理时间上的跳跃。
内容切换: 比如一些直播流中的内容切换,可能会导致时间戳不一致或片段播放顺序不完全连续。通过这个指令,播放器能正确处理和播放。
HLS的优缺点:
优点:
跨平台兼容性强:HLS支持的设备范围非常广泛,尤其在苹果设备中表现优越。HLS支持所有的苹果设备(如iPhone、iPad、Apple TV等),也可以在Android、Windows和Mac等设备上通过各种播放器(如VLC、JWPlayer等)进行播放。
自适应码率流:支持根据网络条件动态调整视频质量,保证了流畅的播放体验。
简单易用:基于HTTP的传输,部署简单,且与现有的Web基础设施兼容。
支持加密:可以对内容进行AES加密保护,确保流媒体的安全性。
缺点:
延迟较高:HLS的传输是基于小的文件片段(如 .ts 文件),并且通常有几秒钟的延迟,这对实时直播场景可能不理想。
不适合低延迟应用:相比于其他协议(如WebRTC),HLS的延迟相对较高,一般在6-30秒之间,不适合低延迟实时应用(如互动直播、视频通话等)。
片段大小:每个视频片段的大小通常较小,因此对于长时间播放的视频,可能会有较多的请求。
总结:
HLS是一种非常适用于流媒体内容传输的协议,尤其是在移动设备和网络不稳定的环境下。其自适应比特率的特性和良好的跨平台支持,使得HLS成为互联网视频流媒体传输的主流选择之一。尽管它存在一定的延迟和一些局限性,但在大多数场景下(如直播、点播)表现优异。