2012-07-11 105 views
13

我目前正在嘗試通過PHP腳本來控制視頻訪問,以便在HTML5視頻(使用視頻-js)中使用MP4視頻。經過一番調查後,我可以在stackoverflow article found here的幫助下完成這項工作。如果我導航到PHP腳本,我可以在Firefox,Safari和IE中查看視頻,就好像我正在通過其絕對路徑(例如localhost/myvideo.mp4而不是localhost/myscript.php)查看視頻。我的問題在於谷歌瀏覽器,它只是顯示中間有一個小型媒體播放器的黑屏,並且什麼都不做。通過PHP的MP4視頻傳輸在Google Chrome中失敗

我曾嘗試使用一個快速重寫,例如localhost/avideo.mp4,它將路由到PHP腳本,但不幸的是這並沒有改變任何東西。

這裏是我的腳本:

if (is_file($uri)) { 
    header('Content-Type: video/mp4'); 
    if (isset($_SERVER['HTTP_RANGE'])) { 
     $this->rangeDownload($uri); 
     exit; 
    } else { 
     header("Content-Length: ".filesize($uri)); 
     $this->readfile_chunked($uri); 
     exit; 
    } 
} else { 
    //error 
} 

的rangeDownload方法已採取直接從this link附錄A爲上述計算器文章中建議。

+0

你可以張貼您發送的頭信息的? – ethrbunny 2012-07-13 14:58:59

+0

內容類型,接受範圍,內容範圍,內容長度,HTTP/1.1 206部分內容。在第一種情況下,這些頭文件使用rangeDownload用於Chrome,儘管readfile_chunked使用較少的頭文件(仍然無法在chrome中運行)。 – AaronDS 2012-07-13 15:02:57

+0

我可以建議的唯一一個是Content-Transfer-Encoding:二進制。我能夠通過PHP將音頻傳輸到使用此組合的所有瀏覽器。 – ethrbunny 2012-07-13 15:09:07

回答

2

也許問題出在URL(更具體地說是擴展名)。通常情況下,您可以使用Content-Disposition標題,但我知道在向移動設備提供內容時這不是理想的。

嘗試使用localhost/myscript.php/myvideo.mp4

不要使用「內容處置」 HTTP標頭是很重要的,因爲一些手機拒絕使用時接受的內容。 通過在URL中包含文件名,您可以欺騙手機認爲這是一個真實的文件並接受它。

現在,當您將下載URL發送給客戶時,您通常不知道客戶擁有什麼設備,因此您不知道設備將支持哪種文件格式。因此,您不能在該URL上包含文件名,並且您需要再次使用中間下載頁面。再次,我們將使用類似網址:

http://wap.mydomain.tld/get.php/123456abcdef 

這一次,當用戶連接到下載內容時,get.php腳本不會創建一個臨時文件,而是指向另一個腳本流文件內容。 假設生成的內容下載將是「image.jpg的」,中間下載頁面可以在客戶指向像一個網址:

http://wap.mydomain.tld/download.php/123456abcdef/image.jpg 

從(http://mobiforge.com/developing/story/content-delivery-mobile-devices

+0

感謝您的回覆,雖然正如我在我的問題中所述,「我嘗試使用快速重寫,例如localhost/avideo.mp4,該路徑指向PHP腳本,但不幸的是這並沒有改變任何內容。」我不確定你還有什麼建議我做不同? – AaronDS 2012-07-16 19:41:40

+0

區別可能在於瀏覽器獲得的實際URL。如果您使用重定向(30x),那麼瀏覽器最終會獲得最終的URL,並帶有.php擴展名而不是.mp4擴展名 - 這可能非常重要。您是否嘗試過比較所有請求/響應標題(例如,使用Fiddler?) – 2012-07-17 06:54:45

+0

我正在查看Chrome中的標題信息,但我不確定要做什麼。我可以說的是,有一個明顯的區別。我會在幾個小時後按照這篇文章進行截圖。 – AaronDS 2012-07-17 17:30:06

2

我理解你使用視頻-js,但我建議使用html5media(也可以查看github page瞭解更多信息)。我不得不在工作網站上製作視頻,我嘗試了一些東西,包括video-js,但是html5media是我能在所有瀏覽器中工作的唯一一個。

一個可能幫助他人的備忘錄:其中一個要求是我們託管了所有文件,以便我們不依賴於第三方服務器來提供JavaScript文件或flash播放器,我不記得是否與視頻-js這很容易,但我知道與html5media我們能夠下載flowplayer並擁有我們的服務器上的一切。

,併產生了3種推薦的視頻格式(MP4和WebM和Theora格式),我用Miro Video Converter

+0

感謝您的這篇文章,但問題不在於Video-JS,它是專門與鉻(視頻不會在視頻-j上播放出來的圖片,當使用正常的視頻文件,視頻-js工作正常)。我對video-js的體驗很好,我用手剎進行文件轉換,到目前爲止我還沒遇到任何問題。但是,我已經注意到html5media,以免我將來需要找到新的東西。乾杯。 – AaronDS 2012-07-17 17:22:59

+0

沒問題@Noobatron。我不想阻止用戶使用視頻-js,因爲如果你能使它工作,那麼嘿,太棒了!我只是覺得有人可能會從聽到我所做的事情中獲益,以防他們遇到同樣的問題(也許我只是不知道我在用video-j做什麼)。我在家使用Handbrake來轉換​​DVD到我的android手機,它可以工作。我仍然會去米羅工作,因爲這些界面非常簡單。希望你的視頻能夠在Chrome上運行! – Dean 2012-07-17 22:07:22