m3u8 ⽂件实质是⼀个播放列表(playlist),其可能是⼀个媒体播放列表(Media Playlist),或者是⼀个主列表(Master Playlist)。
通过了解m3u8标准格式中的几个关键字段即可找出规律。

  1. EXTM3U:这个是M3U8文件必须包含的标签,并且必须在文件的第一行,所有的M3U8文件中必须包含这个标签。
  2. EXT-X-VERSION:M3U8文件的版本,常见的是3(目前最高版本应该是7)。
  3. EXTINF:代表这个ts文件的时长。
  4. EXT-X-ENDLIST:表示PlayList的末尾了,它可以在PlayList中的任意位置出现,但只能出现一个。
  5. 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;
}
如果觉得我的文章对你有用,请随意赞赏