2011-12-01 141 views
0

我想通過PHP輸出一個MP4視頻文件。 當它通過Flash播放器(例如流式播放器)使用時,它工作得很好。 但是,當我試圖使用它作爲html5視頻標籤的來源或直接調用php文件時,它不起作用。通過PHP的MP4文件不播放HTML5視頻

我使用的代碼如下:

 $filesize = filesize($file); 
     header("Content-Type: video/mp4"); 

     if (empty($_SERVER['HTTP_RANGE'])) 
     { 
      header("Content-Length: $filesize"); 
      readfile($file); 
     } 
     else //violes rfc2616, which requires ignoring the header if it's invalid 
     { 
      rangeDownload($file); 
     } 

rangeDownload功能是從http://mobiforge.com/developing/story/content-delivery-mobile-devices附錄A.

即使當我使用Content-Range報頭(Content-Range:bytes 0-31596111/31596112),它stucks上下載30.13 MB的視頻。

+1

那麼,你的php.ini'max_execution_time'比視頻長嗎?您是否在靜態和readfiled文件之間探測了其他標題差異(Firebug)? – mario

+0

我建議檢查php.ini中的最大內存設置 - 好像你用來發送視頻給客戶端的兩個函數都是將整個文件讀入內存然後發送給用戶,你可能需要使用小塊讀取併發送它(例如2MB)。 –

+0

建議不要將mp4用於html5視頻。看看這裏的圖表,哪些瀏覽器目前支持HTML5視頻的視頻文件類型。 http://en.wikipedia.org/wiki/HTML5_video – dqhendricks

回答

1

最後,我已經找到一種方法,使工作

header("Content-Type: $mediatype"); 

if (empty($_SERVER['HTTP_RANGE'])) 
{ 
    header("Content-Length: $filesize"); 

    $fh = fopen($file, "rb") or die("Could not open file: " .$file); 

    # output file 
    while(!feof($fh)) 
    { 
     # output file without bandwidth limiting 
     echo fread($fh, $filesize); 
    } 
    fclose($fh); 
} 
else //violes rfc2616, which requires ignoring the header if it's invalid 
{ 
    rangeDownload($file); 
} 

它在PHP文件的直接聯繫和HTML5視頻標籤內工作。
但爲了在的Flowplayer工作(也許在其他Flash/HTML5廣告播放器),你需要添加一個MP4擴展(如view.php?ID = XXX &文件= type.mp4)

0

這可能與您的瀏覽器和它使用什麼插件來查看視頻文件ie)quicktime。它與Flash協同工作的原因是Flash處理緩衝和時間同步等。通常不建議讓瀏覽器處理播放媒體文件,因爲它完全取決於瀏覽器配置和安裝的插件。

某些瀏覽器會自動下載媒體文件,它可以完全由瀏覽器和最終用戶配置。

+0

感謝您的建議馬修,但MP4直接訪問時,Safari瀏覽器/ Chrome完美播放視頻。問題是,當我出於安全考慮將它包裝在PHP文件中時。 – GRaecuS