【发布时间】:2013-12-21 14:39:28
【问题描述】:
我正在尝试使用 ffmpeg 将 mpeg2 流转码为 x264 flv 流,并通过 php 将其传递给 Flash 播放器。我的 ffmpeg 命令在命令行中运行良好,但是当我将它包装在 php 的 passthru() 函数中时,php 不输出任何内容(从浏览器或我正在使用的 Flash 播放器)。
我的代码是:
header('Content-type: video/x-flv');
passthru('ffmpeg -y -i http://192.168.0.199:5004/auto/v10 -threads 0 -f flv -vf yadif,scale="iw/2*sar:ih/2" -pix_fmt yuv420p -c:v libx264 -preset:v ultrafast -b:v 1000k -c:a libmp3lame -ac 2 -b:a 32k -ar 11025 -strict -2 /dev/stdout 2>/dev/null');`
当我使用 php -f test.php 从命令行运行 php 文件或仅从命令行运行 ffmpeg 命令时,此方法有效。在浏览器中发送标头但没有其他内容,我假设这也是 Flash 播放器所看到的。
我在这里错过了什么?
【问题讨论】:
-
对每个请求进行转码是一件可怕的事情。您应该在上传时转码,并缓存结果。这就是 YouTube 所做的。
-
我会这样做,但我正在尝试从我的网络电视调谐器转码直播电视流。
-
您为什么要尝试使用 PHP 来执行此操作?只需使用 Adobe Flash Media Encoder(或者可能是 ManyCam 等其他软件来播放视频文件),然后将其流式传输到流媒体服务器,或制作一个。