需要从某网页下载一个视频文件,查看之后发现视频文件是用HLS视频流的,HLS全称Http Live Streaming,是由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部分,一部分是m3u8描述文件,另一部分是ts媒体文件
HLS通过将整条流切割成多个小的可以通过HTTP下载的媒体文件,然后客户端通过顺序拉取这些媒体文件播放,来实现看上去是播放一整条流的效果
由于切割成多个小的流片段,所以可以很方便的利用CDN进行分发加速,目前在点播、直播领域大多使用HLS
打开开发者工具,点击播放视频就可以在NetWork中看到
先看下m3u8描述文件
通过wget或curl将文件下载后,通过文本方式可以打开查看
m3u8文件中主要是一个Media Playlist,里面包含一些URI和描述性的tags,比如上面的文件中描述了整个流的ts文件的播放顺序
ts文件就是切分的流文件,视频编码主要格式是h264/mpeg4,音频为acc/MP3,主要分三层:ts层Transport Stream、pes层Packet Elemental Stream、es层Elementary Stream,es层就是音视频数据,pes层是在音视频数据上加了时间戳等对数据帧的说明信息,ts层就是在pes层加入数据流的识别和传输必须的信息
想要获取一个网站的视频,需要将视频完整播放一次,然后从开发者工具中获取m3u8文件和所有的ts文件地址,通过wget或curl将文件下载到本地
因为m3u8文件里面是URI,所以ts文件要放到对应m3u8中描述的位置,比如我上面的是需要将ts文件和m3u8文件同目录
通常情况下ts文件地址都是通过数字编码标识的如下
所以简单可以写个for循环,把所有的ts文件都下载到本地
下载完成后,就可以通过ffmpeg,将ts文件合并为mp4,命令如下:
合并输出如下:
最终会在该目录下生成一个完整的mp4文件
注意下载ts文件的时候,要和m3u8文件的分辨率对应
本文分享自微信公众号 - 运维研习社(gh_4135e2716ad3)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。