PHP和ffmpeg - 为JW Player即时转换为H.264

时间:2012-05-10 20:10:56

标签: php ffmpeg h.264

所以我正在研究的项目已经在服务器上有大量的MP4文件需要在嵌入式播放器中播放。理想情况下,我们想使用已经为大多数视频设置的JW播放器。不幸的是,许多较旧的视频都是MPEG-4编码的,需要在浏览器中播放额外的插件。

我想做的是能够将这些视频动态转码为JW播放器支持的格式,例如H.264。现在,我在那里的一部分,因为我可以让它转换旧的MP4文件,但我很难将数据直接传递给播放器。

这是我当前执行转换的脚本(这是media_converted.php):

<?php
    error_reporting(0);
    if (!isset($_GET["MediaName"])) {
        $_GET["MediaName"] = "GSX238";
    }       
    require_once("php/media_center_functions.php");
    $MediaURL = ConstructVideoURLInternap($_GET["MediaName"]);  
    header("Content-Transfer-Encoding: binary");
    //header('Content-type: video/mp4');
    //$calculatedFileSize = filesize($MediaURL);
    //header("Content-Length: {$calculatedFileSize}");

    $cmd = 'ffmpeg -i "'.$MediaURL.'"  -vcodec libx264 -acodec copy -f mp4  -moov_size 32000 "_temp/'.time().'_temp.mp4"  2> _temp/media_converter_output.txt';
    passthru($cmd);

?>

我正在尝试将上述文件作为视频源传递给JW Player:在JW Player的变量脚本中,如下所示:

so.addVariable('file','media_converted.php?MediaName=12345');

虽然我认为这应该有用,但事实并非如此。

即使转换似乎有效并且发送给播放器,也很难说,因为我认为浏览器在播放任何内容之前都试图下载整个文件。显然我不能让用户那样等待。

我已经查看了qt-faststart,我可以在我的计算机上使用它来修改文件,以便它可以在加载时开始播放。不幸的是,这需要两个步骤。我首先必须完全转换文件,然后当它完成时我必须使用qt-faststart.exe。同样,这并不是一个真正的即时解决方案。我确信必须有一些方法可以在一个命令中产生类似的结果输出到播放器......对吗?

服务器上的视频数据比我目前硬盘上的空间要多,所以要永久重新编码每个视频,即使是批量重复,也会很麻烦,因为我必须下载一些,转换,重新加载,下载更多,等等。如果我必须这样做,我会,但我宁愿保留它们,并能够动态转码。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我不认为这是可能的。必须首先进行转换,然后才能加载文件。看看Vimeo。上传文件时,系统会在格式可用于播放之前转换格式