我正在使用 FFMPEG 和 PHP 将 MP4 视频重新编码为 HLS。然后我尝试直接将输出提供给 HTML 页面的
<video>
标签。下面的脚本(encode.php)根据我的需要对视频进行编码,如果我直接在 VLC 播放器中使用脚本 url,它就可以工作,但我很难让 gtml 页面来播放它。生成的视频文件应与大多数浏览器兼容。我在播放器 html 页面上使用 video.src = 'encode.php'
。
任何帮助表示赞赏。
<?php
$input_video = 'whatever.mp4';
// video passthrough
// hls format
// audio (english strems only) to aac (6 channel)
// output to stdout
$ffmpeg_command = 'ffmpeg -i ' . escapeshellarg($input_video) . ' -map 0:v -c:v copy -map 0:a:m:language:eng -c:a aac -ac 6 -b:a 320k -f hls -hls_time 30 -hls_list_size 120 -start_number 0 -';
$handle = popen($ffmpeg_command, 'rb');
header('Content-Type: application/vnd.apple.mpegurl');
header('Content-Disposition: inline; filename="output.m3u8"');
// stream the output to the browser
fpassthru($handle);
pclose($handle);
?>
您评论:
是的,事实上,如果我输出到output.m3u8而不是stdout,并将其用作播放源,...
您可以测试
<source>
元素(浏览器)是否支持扩展名?
模拟
output.m3u8
文件的解决方法
.htaccess
文件放入文档根目录中:RewriteEngine on
RewriteRule ^target/stuff/output.m3u8$ redir/encode.php [NC,L]
encode.php
放置到DOCROOT/redir/encode.phpYOURDOMAIN/target/stuff/output.m3u8
,重定向应该成功。/target/stuff/output.m3u8
中使用<source>
,和之前测试成功一样希望这有助于调试问题。