关于 m3u8
M3U8是Unicode版本的M3U,用UTF-8编码。"M3U"和"M3U8"文件都是苹果公司使用的HTTP Live Streaming格式的基础,这种格式可以在iPhone和Macbook等设备播放。
m3u8 其实是一个文本文件,是一个 playlist
,用来索引 ts 文件
,真正的流媒体文件其实是ts 文件
⭐️参考 wiki (https://zh.wikipedia.org/wiki/M3U#M3U8)
举个例子:
http://sc.sc.bz1.me/123123123.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-DISCONTINUITY
#EXTINF:5.133,
/fragments/z1.Newhub.5784a9645e77b0372002e792/1468570587846-1468570592979.ts
#EXTINF:5.333,
/fragments/z1.Newhub.5784a9645e77b0372002e792/1468570592238-1468570597571.ts
#EXTINF:5.334,
/fragments/z1.Newhub.5784a9645e77b0372002e792/1468570597278-1468570602612.ts
<此处省略部分>
#EXT-X-ENDLIST
七牛的 avthumb 切片或者直播的转码服务,生成的 m3u8 文件格式大体如上,有的 m3u8 文件可能是在文本中是 http://domain/key.ts
的格式。
标准的 m3u8 文件遵循了apple公司的官方标准,可以用官方工具( mediastreamvalidator
)检测看下,此处不赘述。
$ mediastreamvalidator http://sc.sc.bz1.me/123123123.m3u8
有一些可能就不是很标准,本文脚本可以拆分出每个 ts 的物理时间戳,走北京时间,并且计算出每个 ts 的时长和视频总时长,简单实用。
实用脚本前需要先在本地下载七牛的 qshell工具
http://developer.qiniu.com/code/v6/tool/qshell.html ,并且加入环境变量(全局可以运行 qshell)
脚本如下:
curl $1 | grep ts | awk -F '/z1.' '{print $2}' | awk -F '/' '{print $2}' | awk -F "." '{print $1}' | awk -F '-' '{"qshell tms2d "$1|getline a; close("qshell tms2d "$1);"qshell tms2d "$2|getline b;close("qshell tms2d "$2);print a," ",b;}' >test11
curl $1 | grep ts | awk -F '/z1.' '{print $2}' | awk -F '/' '{print $2}' | awk -F "." '{print $1}' | awk -F "-" '{print ($2 - $1)/1000 " s"}' >test22
cat test22 | awk '{sum+=$1} END {print "Total = ", sum}' >test33
paste test11 test22
echo ""
echo "m3u8中的ts文件总时长(分钟为单位)"
cat test33 | awk '{print $3/60 " min"}'
rm test11
rm test22
rm test33