m3u8:视频流的下载
最近,偶然发现新闻联播的结尾部分有一个大美中国
,将全国各地的美景制作了一个小合集,非常震撼。所以,就想把它下载下来,这可难不倒我,毕竟我和 WEB 打交道很多年了。但没想到,还是花费了一番功夫。
m3u8
一般较小的视频,会在video标签的src属性中放入该视频的URL地址:
<video src="https://www.w3school.com.cn/i/movie.ogg"></video>
我们拿到这个URL后,在浏览器中输入网址,就可以在播放界面直接下载了,如下:
然而,当我打开央视网网页的控制台,发现前端页面通过video.js
来进行播放,其URL使用的是m3u8
,这是什么文件?
获取到的URL中,域名为dh5.cntv.qcloudcdn.com
,将其下载后,得到了一个m3u8的文件,m3u8是一个记录索引
的纯文本文件,播放时,根据索引找到对应的音视频文件的网络地址进行在线播放。
正确的URL地址
打开一个能够播放远程地址的播放器(比如,IINA),输入上面的URL进行播放,发现播放时声音正常,但是画面居然是花屏。所以这个URL并不正确,那么,真正的m3u8文件到底是哪个呢?
经过一番分析,发现了一个 Java 接口:https://vdn.apps.cntv.cn/api/getHttpVideoInfo.do,它返回了一个m3u8地址,有一个hls_url
的属性,其值为:https://hls.cntv.myhwcdn.cn/asp/hls/main/0303000a/3/default/12b1956726524e948818894bfae4794d/main.m3u8,域名为 hls.cntv.myhwcdn.cn,这个域名下的 u3m8 文件才是我们真正需要的。
到此为止,已经拿到了正确的m3u8地址,如果只是为了播放,使用video.js库
或者支持远程URL播放的Player即可,比如 MacOS 上的 VLC 或 IINA,但是,怎么将其下载呢?
下载工具ffmpeg
为了将其下载到本地,我找到了一个强大的工具:ffmpeg
。它是一个能够处理音视频的开源工具,同时支持跨平台,功能强大,能够对各种音视频进行记录和转换。比如,将flac转换为mp3格式,将mp4转换为avi格式等。它是在LGPL/GPL协议下发布的开源软件,必须严格遵守LGPL/GPL协议,有很多的播放器都使用了FFmpeg的代码,但它们并没有遵守LGPL/GPL协议,没有公开任何源代码。为此,FFmpeg在它的官网上搞了一个 Hall Of Shame,国内的暴风影音、QQ影音、万兴和格式工厂都获得过此等“荣誉”,另外,韩国知名的播放器软件 KMPlayer 和 PotPlayer 也获得过此等“荣誉。虽然没有物质上的惩罚,FFmpeg 耻辱柱更多的是一种精神层面的打击。
远程下载
使用起来很简单:
ffmpeg -i
"https://hls.cntv.myhwcdn.cn/asp/hls/main/0303000a/3/default/12b1956726524e948818894bfae4794d/main.m3u8"
"/Users/moddx/Downloads/china01.mp4"
这样,就将视频下载到了本地的Downloads文件夹下了。
查看视频信息
该工具还可以用于查看视频信息:
ffmpeg -i /Users/moddx/Downloads/demo.mp4
会显示该视频的详细信息,其中会包含二个部分。第一部分是视频
的相关信息,如创建时间、bitrate、视频时长、视频的高宽、fps等;第二部分是音频
的相关信息,如格式、音频采样率(44.1kHz)等。