m3u8 ⽂件实质是⼀个播放列表(playlist),其可能是⼀个媒体播放列表(Media Playlist),或者是⼀个主列表(Master Playlist)。
通过了解m3u8标准格式中的几个关键字段即可找出规律。
- EXTM3U:这个是M3U8文件必须包含的标签,并且必须在文件的第一行,所有的M3U8文件中必须包含这个标签。
- EXT-X-VERSION:M3U8文件的版本,常见的是3(目前最高版本应该是7)。
- EXTINF:代表这个ts文件的时长。
- EXT-X-ENDLIST:表示PlayList的末尾了,它可以在PlayList中的任意位置出现,但只能出现一个。
- EXT-X-TARGETDURATION:指定最大的媒体段的时长(秒)。所以#EXTINF中指定的时间长度必须小于或等于这个值。
由此可以看出#EXTINF:后的内容就是每一个分片的时长,单位为秒
,所以我们只需要按行读取m3u8文件并使用正则提取每一个分片的时长后使用array_sum
求和即可得出该m3u8文件的总时长,代码如下:
<?php
$file = file_get_contents('video.m3u8');//打开m3u8文件
$vtime = getDuration($file);//获取文件时长
$duration = gmdate("H:i:s", $vtime);//将秒换算为分钟
//解析m3u8文件,获取视频总时长
function getDuration($uri){
try{
$res = file_get_contents($uri);
}catch(\ErrorException $e){
return 0;
}
//preg_match_all('/\d+[.]\d+/',$res,$arr);
preg_match_all('/\EXTINF:(.*?)\,/i',$res,$arr);
$res = array_sum($arr[1]);
return (int)$res;
}