前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何下载完整的HLS流视频

如何下载完整的HLS流视频

作者头像
李俊鹏
发布2020-11-12 10:45:52
7.4K0
发布2020-11-12 10:45:52
举报
文章被收录于专栏:运维研习社运维研习社

需要从某网页下载一个视频文件,查看之后发现视频文件是用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,命令如下:

ffmpeg -i DOD_108040913-512x288-442k-hls.m3u8 -vcodec copy -acodec copy -absf aac_adtstoasc DOD_108040913-512x288-442k-hls.mp4

合并输出如下:

最终会在该目录下生成一个完整的mp4文件

注意下载ts文件的时候,要和m3u8文件的分辨率对应

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档