簡體   English   中英

通過PHP fpassthru()加載mp4 / webm的Chrome HTML5視頻:無法設置currentTime?

[英]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”標頭是正確的。 我建議閱讀這個類似問題的答案:

Seekbar無法在Chrome中運行

添加響應頭是不夠的。 您還必須使用“206 Partial Content”狀態代碼進行響應,並僅返回請求的字節范圍。 聽起來你還在歸還整個文件。 fpassthru會將文件一直讀回到最后,所以看起來你需要找到另一種方法來讀取文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM