使用php curl播放.m3u8视频

vfh0ocws  于 2023-01-08  发布在  PHP
关注(0)|答案(1)|浏览(214)

我尝试使用php curl代理播放一个.m3u8的视频,下面的代码看起来可以工作,虽然它只返回视频#EXTM3U信息,但不播放视频。
代码:

<?php
//....proxy info
$auth = 'username:password'; 
$proxy_ip = '1.2.3.4.5'; 
$proxy_port = 8080; 
$path = $_GET['link'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $path);
//curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_PROXYPORT, $proxy_port);
curl_setopt($ch, CURLOPT_PROXYTYPE, 'HTTP');
curl_setopt($ch, CURLOPT_PROXY, $proxy_ip);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $auth);
curl_exec($ch);
if (curl_error($ch)) {
    $error_msg = curl_error($ch);
    echo $error_msg;
}
curl_close($ch);
if (isset($error_msg)) {
    echo $error_msg;
}
?>

输出:

#EXTM3U #EXT-X-VERSION:3 #EXT-X-INDEPENDENT-SEGMENTS #EXT-X-STREAM-INF:BANDWIDTH=5640800,AVERAGE-BANDWIDTH=5640800,CODECS="avc1.4d4028,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=25.000 index4147.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=2421100,AVERAGE-BANDWIDTH=2421100,CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=25.000 index2073.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=1566400,AVERAGE-BANDWIDTH=1566400,CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=960x540,FRAME-RATE=25.000 index1296.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=1002100,AVERAGE-BANDWIDTH=1002100,CODECS="avc1.77.30,mp4a.40.2",RESOLUTION=746x420,FRAME-RATE=25.000 index783.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=774400,AVERAGE-BANDWIDTH=774400,CODECS="avc1.77.30,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=25.000 index576.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=421300,AVERAGE-BANDWIDTH=421300,CODECS="avc1.42c015,mp4a.40.2",RESOLUTION=426x240,FRAME-RATE=25.000 index255.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=476300,AVERAGE-BANDWIDTH=476300,CODECS="avc1.42c01f,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=25.000 index101.m3u8

关于如何播放视频有什么想法吗?

siv3szwd

siv3szwd1#

面对同样的问题...有没有运气弄清楚?我也面临着同样的问题,直到几分钟前。
能够在php中生成一个m3u8文件,并正确设置mime类型,但videojs和vlc就是不能播放它...如果我下载了输出,它将是好的vlc或videojs。
How to create dynamic m3u8 using php上遵循Markus AO的提示,该提示有效。
基本上,它应该忽略mime类型(尽管我还没有尝试删除它),而只查看扩展名。
只是使用htaccess使它,以便当他们调用一些m3u8的,它实际上调用我的php文件
将此添加到我的**.htaccess**:

重写规则^代理([^.]+).m3u8$代理.php

我实际上是将地址作为一个GET参数发送,例如$_GET ['link']代理前面和.m3u8扩展名前面的通配符,只是因为我注意到我安装在chrome中的插件可能会忽略参数更改,并且只要是proxy.m3u8文件,就只显示相同的流。
希望这能对大家有所帮助

相关问题