使用 FFMPEG 和 PHP 动态编码 HLS 视频

问题描述 投票:0回答:1

我正在使用 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);
?>
php html video ffmpeg http-live-streaming
1个回答
0
投票

您评论:

是的,事实上,如果我输出到output.m3u8而不是stdout,并将其用作播放源,...

您可以测试

<source>
元素(浏览器)是否支持扩展名

模拟

output.m3u8
文件的解决方法

  • .htaccess
    文件放入文档根目录中:
RewriteEngine on
RewriteRule ^target/stuff/output.m3u8$ redir/encode.php [NC,L]
  • encode.php
    放置到DOCROOT/redir/encode.php
  • 在新浏览器窗口中测试
    YOURDOMAIN/target/stuff/output.m3u8
    ,重定向应该成功。
  • 测试是否可以在
    /target/stuff/output.m3u8
    中使用
    <source>
    ,和之前测试成功一样

希望这有助于调试问题。

© www.soinside.com 2019 - 2024. All rights reserved.