[英]Chrome HTML5 video with mp4/webm loaded via PHP fpassthru(): can't set currentTime?
所以這是我遇到的一個奇怪的問題。 我只在Mac上測試了Chrome和Safari,在這些瀏覽器之間,問題只出現在Chrome上。
我有一個非常基本的HTML5視頻元素,它從我的服務器加載視頻,用戶在屏幕上有幾個按鈕跳轉到視頻中的特定時間。
當視頻文件被引用為直接鏈接時,例如:
<video id="thevideo" width="720" height="480">
<source type="video/webm" src="videos/vid102.webm" />
<source type="video/mp4" src="videos/vid102.mp4" />
<p>Your browser does not support this video.</p>
</video>
......它運作得很好。
但是,我只是設置它,以便可以通過PHP fpassthru加載視頻,例如:
<video id="thevideo" width="720" height="480">
<source type="video/webm" src="getvideo.php?t=webm&v=166" />
<source type="video/mp4" src="getvideo.php?t=mp4&v=166" />
<p>Your browser does not support this video.</p>
</video>
其中getvideo.php
看起來像這樣:
<?php
$videoID = $_REQUEST["v"];
$videoType = $_REQUEST["t"];
$vidPath = "videos/video$vidFile.$videoType";
$fp = fopen($vidPath, 'rb');
header("Content-Type: video/$videoType");
header("Content-Length: " . filesize($vidPath));
fpassthru($fp);
?>
奇怪的行為是這樣的:在兩個瀏覽器上,視頻加載並播放得很好。 但是,在Chrome上,使用fpassthru PHP腳本的版本會破壞設置播放器“currentTime”屬性的功能,從而跳轉到視頻中的某個位置。 如果我調用document.getElementById('thevideo').currentTime = 50
,而不是跳到50秒標記,它就會停留在原來的位置。
知道為什么會這樣嗎?
更新:我已經看到一些跡象表明這與Chrome有關,特別要求在響應中提供“Accept-Ranges”標題。 我已經將標題“Accept-Ranges:bytes”添加到.php腳本的輸出中,我確保Web服務器允許字節范圍請求,但仍然無法正常工作。
作為HTTP Byte Serving的一部分,您對要求“Accept-Ranges”標頭是正確的。 我建議閱讀這個類似問題的答案:
添加響應頭是不夠的。 您還必須使用“206 Partial Content”狀態代碼進行響應,並僅返回請求的字節范圍。 聽起來你還在歸還整個文件。 fpassthru
會將文件一直讀回到最后,所以看起來你需要找到另一種方法來讀取文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.