2014-02-07 73 views
1

我有一個Chromecast和一個在線mp4文件的URL。我也有一個2Mbps的下載連接,這是可悲的,並且使Chromecast的緩存速度過慢。這就是我到目前爲止的嘗試:Chromecast PHP緩衝區MP4

通過開發者控制檯,我只需將location.href設置爲mp4的在線URL。 Chromecast會緩衝20秒,播放10秒鐘的視頻,然後再緩衝。所以,通過控制檯,我暫停了視頻並讓它緩衝了5分鐘。當我再次播放它時,它播放了大約15秒,然後失去了所有進度,不得不返回到主屏幕。

由於我不想等待mp4的整個下載完成,我目前正在嘗試這樣做:我將mp4緩存到位於我的htdocs目錄中的本地文件中,然後將Chromecast指向該文件的位置。但是,當通過Chrome瀏覽器打開mp4文件時(而不是播放),它會顯示下載提示,並且Chromecast會返回到主屏幕。

我已經實現在PHP中的緩衝,它看起來是這樣的:

$bufferSource = 'http://example.com/path/to/file.mp4'; 

$bufferedReader = fopen($bufferSource, 'r'); 

while(!($finished = feof($bufferedReader))){ 

    if($finished !== false){ break; } 

    //get onle line 
    $buffer = fgets($bufferedReader); 


    file_put_contents('buffer.mp4', $buffer, FILE_APPEND); 

} 

fclose($bufferedReader); 

我知道PHP做它的工作,因爲我可以看文件的大小增長我的電腦上,我可以打開文件與VLC。是否有另一個PHP腳本可以訪問本地緩衝的mp4文件來模擬「緩衝區」,因此Chrome不會顯示下載對話框,而是緩衝文件,Chromecast應該如此?

編輯:還有一件事。我不是將Chromecast指向PHP腳本。我實際上是直接將它指向buffer.mp4文件。

回答

1

您錯過了PHP腳本中的Content-Type標題。

找出原始內容類型頭是從你的服務器(可能video/mp4),並與您的代理腳本發送這樣的:

header('Content-Type: video/mp4'); 

這將允許瀏覽器來檢測內容類型和播放直接(如果支持),無需下載。

此外,我會考慮使用真正的代理服務器,如Nginx,而不是重新發明輪子。這將會更容易,更可靠。

+0

其實,我只使用PHP腳本緩衝到文件中。我不訪問Chromecast上的PHP腳本,而是訪問生成的文件本身,我認爲由於腳本緩衝文件,標題自動包含在其中。因此,服務器 - >客戶端和本地服務器 - > Chromecast是兩個獨立的獨立進程。 – arik

+0

@ arik-so無論哪種方式你的問題是相同的。您的本地服務器未配置爲發送正確的內容類型標題。如果你要發佈你正在使用的服務器,我可以更具體地指導你。 – Brad

+0

我正在使用XAMPP本地服務器。在這種情況下,明天我會嘗試製作另一個頁面,在發送mp4頭文件後訪問該文件。 – arik

0

您可以使用帶有媒體元素標籤的接收器,然後將其來源指向服務器上的mp4文件。如果您不想編寫自己的接收器,則可以使用defaultStyled Media Receiver。您需要一個非常簡單的發件人發送網址,查看github回購示例