2010-06-22 24 views
2

我在Safari中遇到了一個奇怪的錯誤,當我通過PHP爲MP4視頻提供服務時(使用基於令牌的方式對文檔根目錄下的文件進行模糊處理認證系統),Safari出於某種原因觸發了<video>'s onerror事件,並且視頻從未加載(我無法從發送給onerror的事件對象中獲取任何有用的信息 - 所有內容都未定義)。無法在Safari/Mac上通過PHP提供HTML5視頻(5.0)

當我直接訪問PHP腳本(即,視頻未嵌入頁面中)時,視頻控件會在瞬間出現,然後閃爍到QuickTime問號。

當我直接訪問MP4文件時,它按預期工作。

奇怪的是,嵌入式視頻在最新版本的Chrome for Mac中完美運行。

這裏是頭通過PHP訪問時:

Connection:Keep-Alive 
Content-Disposition:inline; filename="test.mp4" 
Content-Length:5558749 
Content-Type:video/mp4 
Date:Tue, 22 Jun 2010 01:24:25 GMT 
Keep-Alive:timeout=10, max=29 
Server:Apache/2.2.15 (CentOS) mod_ssl/2.2.15 0.9.8l DAV/2 mod_auth_passthrough/2.1 FrontPage/5.0.2.2635 
X-Powered-By:PHP/5.2.13 

這裏是頭時test.mp4直接訪問:

Accept-Ranges:bytes 
Connection:Keep-Alive 
Content-Length:5558749 
Content-Type:video/mp4 
Date:Tue, 22 Jun 2010 01:26:45 GMT 
Etag:"1c04757-54d1dd-489944c5a6400" 
Keep-Alive:timeout=10, max=30 
Last-Modified:Tue, 22 Jun 2010 01:25:36 GMT 
Server:Apache/2.2.15 (CentOS) mod_ssl/2.2.15 0.9.8l DAV/2 mod_auth_passthrough/2.1 FrontPage/5.0.2.2635 

唯一不同的標題是:接受-範圍(我認爲這是不必要的),Etag,Last-Modified,Content-Disposition和X-Powered-By。

Chrome不僅可以處理PHP提供的視頻,而且當我使用相同的腳本通過Flash播放器加載MP4時,它也可以正常工作。我無法弄清楚Safari是如何窒息的。

編輯:此外,當我更改內容處置爲「附件」時,Safari將下載MP4文件就好了。

回答

3

在誰碰到這個問題來的人的利益,這裏的解釋:

我問什麼,我認爲是關於另一個野生動物園specifc HTML5視頻問題無關的問題:Single PHP 「exit;」 statement prevents HTML5 video in Safari

最終,這個問題與PHP exit聲明無關。事實上,問題在於我使用$_SESSION變量來驗證請求,Safari使用單獨的進程來處理無法訪問相同$_SESSION數據的視頻回放(與Chrome不同)。

令人困惑的是,原始的Safari進程和播放進程分別請求了視頻文件。我只看到原來的請求,它沒有通過基於$_SESSION的認證,所以我認爲它不是問題的一部分。

無論如何,如果您使用$_SESSION數據來驗證Safari中的HTML5 <video>播放器的請求,check out the solution

+0

我發現這很好。謝謝。同樣的問題似乎發生在當前版本的Firefox 27和Win 7上的IE 11上。在Chrome 32上工作時。 – Haprog 2014-02-19 14:51:22

+0

那麼解決方案是什麼? – Geo 2014-03-17 18:50:01

+0

@Geo我想我最終使用查詢字符串來存儲狀態,因爲你不能使用'$ _COOKIE' /'$ _SESSION'。 – JKS 2014-03-18 22:58:14

1

您是否嘗試修改通過php發送的頭文件以匹配直接文件發送的頭文件,然後逐個刪除它們/更改它們以查看它是您自己的文件?

+1

準確地說,我一直在做最後一個小時!與Etag混用,Accept-Ranges,Content-Disposition等等,不要運氣!老實說,我無法分辨兩者的區別。 – JKS 2010-06-22 02:30:02

1

正如我昨天發現的那樣,iPhone版的Safari推遲播放mp4文件到集成在iPhone中的quicktime播放器。這個播放器首先獲取mp4的前兩個字節(以某種方式確定我想的關鍵幀)。它爲此使用接受範圍標題。然後再次使用接受範圍請求整個文件。

我正在使用PHP的as well as這些mp4文件,並且我發現支持這個可接受範圍的頭文件突然間開始工作。它可能會解決您的桌面版Safari的問題,儘管這對我來說一直沒有接受範圍的支持。

成功。

鮑勃。

0

我在safari上遇到了類似的問題。我有一個PHP腳本,流mp4/webm/ogv到html5視頻播放器。直到幾個星期前,它在safari中工作正常。它繼續在其他所有瀏覽器中運行,並且所有的請求/響應頭信息對我來說都不錯,儘管我一直在獲取一個插件無法在safari中加載錯誤。我終於意識到,由於我已將我的虛擬主機更改爲https並使用openssl爲自己的證書籤名,safari阻止了對媒體內容的GET請求。道德故事......如果您使用openssl並在本地開發,safari不會爲您檢索視頻數據,如果它不信任您的ssl證書。