PHP动态生成m3u8文件
1 需求
由于要在视频播放前(中)播放广告,一种HLS
是在电影m3u8文件中插入广告的m3u8,动态生成一个新的m3u8文件,播放这个新的m3u8文件,就可以实现播放视频时插播广告,或在播放电影之前播放广告。
广告m3u8文件
电影m3u8文件:
2 PHP源码
PHP程序读取这两个文件的ts部分内容,合成一个新的文件即可。
PHP源码参考:
";
//echo $mvname."
";
//echo date('ymdhis',time());
//echo "aa".file_exists("test.txt");
//$fileName = 'test.m3u8';
$fileName = $adname . $mvname . ".m3u8";
//echo $fileName;
if (file_exists("ad2mov8.m3u8")) {
//echo "file already exist";
}
else
{
//根据传进来的路径,解析出广告和电影切片文件所在路径
//取最后一个/之前的内容即可
$adSegSrc = substr($adsrc, 2, strrpos($adsrc, "/") - 1);
$movSegSrc = substr($moviesrc, 2, strrpos($moviesrc, "/") - 1);
//echo $adSegSrc ."
";
//echo $movSegSrc."
";
//读广告m3u8文件
$fp = fopen($adsrc, "r");
if ($fp) {
for ($i = 1; !feof($fp); $i++) {
$lineStr = fgets($fp);
if (false == strpos($lineStr, "EXT-X-ENDLIST")) {
if (strpos($lineStr, ".ts")) {
//echo $domainAddr.$adSegSrc.$lineStr;
file_put_contents($fileName, $domainAddr . $adSegSrc . $lineStr, FILE_APPEND);
} else {
//echo $lineStr;
file_put_contents($fileName, $lineStr, FILE_APPEND);
}
}
}
} else {
echo "打开文件失败";
}
fclose($fp);
//读电影m3u8文件
$fp2 = fopen($moviesrc, "r");
if ($fp2) {
for ($i = 1; !feof($fp2); $i++) {
$lineStr = fgets($fp2);
if (strpos($lineStr, ".ts")) {
//echo $domainAddr.$movSegSrc.$lineStr;
file_put_contents($fileName, $domainAddr . $movSegSrc . $lineStr, FILE_APPEND);
} else if (strpos($lineStr, "EXTINF")) {
//echo $lineStr;
file_put_contents($fileName, $lineStr, FILE_APPEND);
}
}
} else {
echo "打开文件失败";
}
fclose($fp2);
//最后输出一个m3u8结尾
file_put_contents($fileName, "#EXT-X-ENDLIST", FILE_APPEND);
//echo "#EXT-X-ENDLIST";
}
//返回m3u8 file url 给调用者
echo $domainAddr . "/php/" . $fileName;
?>