最近下载解析某视频网站上的视频,想下载下来,一顿操作猛如虎,发现获取到的视频文件不是mp4,不是flv,不是mav,而是m3u8格式的,只有几十B大小。
那这个m3u8格式的视频文件是怎么加载到视频的呢?
且看下文。
流媒体文件格式
M3U8视频是一种流媒体文件格式。
M3U8文件是UTF-8编码格式的M3U文件,主要用于描述多段音频和视频数据的URL地址。它不是传统的下载后播放格式,而是直接在浏览器或移动设备上播放。M3U8文件通常用于存储和管理多个视频、音频和字幕流的播放列表。它基于HTTP Live Streaming(HLS)协议,支持直播和点播,并且可以实现多码率视频的适配,根据用户的网络带宽情况自动匹配合适的码率文件进行播放,从而保证视频的流畅度。
M3U8是一种常见的流媒体格式,主要以文件列表的形式存在,既支持直播又支持点播,尤其在Android、iOS等平台最为常用。
M3U8的优点
1、可以做多码率的适配。根据网络带宽,客户端会自动选择一个适合自己码率的文件进行播放,保证视频流的流畅,代表是苹果的HLS(HTTP Live Streaming)。HLS有一个特点:自适应码率流播(adaptive streaming),客户端可以根据网络状况自动选择不同码率的视频流,条件允许的情况下使用高码率,网络繁忙的时候使用低码率,并且自动在二者间随意切换。这对移动设备网络状况不稳定的情况下保障流畅播放非常有帮助。
2、降低源服务器的负载压力。M3U的特点是将流媒体切分为若干 TS 片段,然后通过一个扩展的 m3u 列表文件将这些 TS 片段集中起来供客户端播放器接收。这样做相比使用 RTSP 协议的好处在于,一旦切分完成,之后的分发过程完全不需要额外使用任何专门软件,普通的网络服务器即可,大大降低了 CDN 边缘服务器的配置要求,可以使用任何现成的CDN。分发使用的协议是最常见 HTTP,代理服务器对这个协议的缓存优化相当成熟,而很少有代理服务器对 RTSP 的进行缓存优化。
3、对于非实时视频,好处同样存在:播放使用HTTP协议的单个 MP4 格式的视频文件时,需要代理服务器支持 HTTP range request 以获取大文件中的一部分,但不是所有的代理服务器都对此有良好的支持。而 M3U 则只需要根据列表文件中的时间轴找出对应的 TS 片段下载即可,不需要 range request,对代理服务器的要求小很多。所有代理服务器都支持小文件的高效缓存。
4、为什么要用 TS 而不是 MP4,这是因为两个 TS 片段可以无缝拼接,播放器能连续播放,而 MP4 文件由于编码方式的原因,两段 MP4 不能无缝拼接,播放器连续播放两个 MP4 文件会出现破音和画面间断,影响用户体验。
下载
这里是python的代码演示:
1 | """ |
后面再记录下如何分段下载这类视频流媒体文件吧。
一起学习,一起进步。
欢迎关注微信公众号,你的资源可变现:【乐知付加密平台】
一起学习,一起进步。
