HLS(HTTP Live Streaming)是苹果公司针对iPhone、iPod、iTouch和iPad等移动设备而开发的基于HTTP协议的流媒体解决方案
在一些视频网站,F12打开一些video标签的src地址,发现并不是想象中的xxx.mp4,而是这样开头的一个地址
src="blob:https://www.xxx.com/023603e2-0d9f-4398-ba53-027b242f520b"
这明显是加密了视频的真实地址,先不管这个奇怪的东西,有兴趣的同学可以搜一下blob:http
然后尝试在Network查找地址,随着视频播放,发现这样几条信息:
https://xxx.com/x/y/z/xyz/hls-360p0.ts?e=12345&h=d56591aa6ccc48c0
https://xxx.com/x/y/z/xyz/hls-360p1.ts?e=23456&h=6ccc48c0d56591aa
https://xxx.com/x/y/z/xyz/hls-360p2.ts?e=76431&h=aa6cccd5659148c0
...
在新标签页中打开地址,自动下载了一个后缀名为ts的视频文件,时长为10s,所有文件拼起来就是完整的原视频,这个视频体系就是遵循HLS协议,将完整视频切分成一个个小碎片,按需传给用户。
network中有一个请求时 xxx.m3u8 的文件,xxx.m3u8文件,它是一个播放索引列表,类似于视频文件播放目录,管理着请求的每个 xxx.ts 视频
切分视频示例
ffmpeg 工具演示,切分过程如下
1.将mp4转换为ts:
ffmpeg -i out.mp4 -c copy -bsf h264_mp4toannexb output.ts
2.将ts切分:
ffmpeg -i output.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 10 output%03d.ts
这样就得到一大堆.ts文件和一个.m3u8文件
打开.m3u8文件,发现它是一个播放索引列表
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:15
#EXTINF:14.472789,
output000.ts
#EXTINF:10.427078,
output001.ts
#EXTINF:10.427078,
output002.ts
...
...
#EXTINF:10.427078,
output017.ts
#EXTINF:8.883867,
output018.ts
#EXT-X-ENDLIST
一款牛逼的在线获取 m3u8 类型视频文件工具
http://blog.luckly-mjw.cn/tool-show/m3u8-downloader/index.html
一款牛逼的播放器