2012-05-10 108 views
0

因此,我正在開發的項目已經在服務器上存在大量的需要在嵌入式播放器中播放的MP4文件。理想情況下,我們希望使用已爲大部分視頻設置的JW Player。不幸的是,很多較舊的視頻都是MPEG-4編碼的,需要額外的插件才能在瀏覽器中播放。PHP和ffmpeg - 爲JW播放器實時轉換爲H.264

我想要做的就是能夠將這些視頻實時轉碼爲JW Player支持的格式,例如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播放機作爲視頻源:在JW玩家變量的腳本,像這樣:

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

雖然我認爲這應該工作,它只是不。

即使轉換似乎有效併發送給播放器,也很難說,因爲我認爲瀏覽器在播放任何內容之前都試圖下載整個文件。顯然,我不能讓用戶等待。

我已經查看了qt-faststart,並且能夠在我的計算機上使用它來修改文件,以便它可以在加載時開始播放。不幸的是,這需要兩個步驟。我首先必須徹底轉換文件,然後當它完成時,我必須使用qt-faststart.exe。再說一次,這並不是真正的即時解決方案。我確信必須有一些方法可以在單個命令中產生類似的結果,並輸出給玩家......對吧?

服務器上的視頻數據比我目前在硬盤上佔用的空間要多,因此即使在批量中對每個視頻進行永久重新編碼也會很麻煩,因爲我必須下載一些視頻數據,重新上傳,下載更多,等等。如果必須這樣做,我會,但是我寧願將它們保留原樣,並且能夠隨時進行轉碼。

任何想法?

回答

0

我不認爲這是可能的。轉換必須先發生,然後才能加載文件。看Vimeo。當您上傳文件時,系統在格式可供播放之前轉換格式

+0

是的。那很糟糕。謝謝。我想我只需要將它們全部轉換。好吧。無論如何,從長遠來看這是更好的。 – vertigoelectric

+0

:)是的,我聽到你的聲音。我可能是錯的,所以它可能值得研究多一點。然而,我見過的所有東西都表明這是不可能的(沒有完成定製工作)。 –

+0

我已經花了幾個小時研究可能性。到目前爲止,可以找到轉碼即時解決方案。然而,無論如何,將它們全部永久轉換是更加理想的,並且使用AHK腳本,我使得該過程大部分是自動的。再次感謝。 – vertigoelectric