3
我知道ogg視頻和mp4視頻的區別之一是ogg視頻沒有描述文件大小的元數據,所以當加載ogg視頻時,控件無法顯示文件完全加載之前的剩餘時間。這可能是一個問題,如果ogg視頻超過幾分鐘長。有沒有辦法在請求頁面時獲取這種文件大小?有沒有辦法在完全加載之前告訴.ogg視頻的文件大小?
(客戶端開發者,要求,我認爲有一個服務器端回答的問題。我歡迎編輯建議對這個問題,如果你能想到的辦法要求更明確。)
我知道ogg視頻和mp4視頻的區別之一是ogg視頻沒有描述文件大小的元數據,所以當加載ogg視頻時,控件無法顯示文件完全加載之前的剩餘時間。這可能是一個問題,如果ogg視頻超過幾分鐘長。有沒有辦法在請求頁面時獲取這種文件大小?有沒有辦法在完全加載之前告訴.ogg視頻的文件大小?
(客戶端開發者,要求,我認爲有一個服務器端回答的問題。我歡迎編輯建議對這個問題,如果你能想到的辦法要求更明確。)
好儘管不是最直接的,但你可以試試這個。
首先,建立一個htaccess來透明地抓住所有的.ogv視頻,並與PHP處理它們
的.htaccess
RewriteEngine On
RewriteRule ^(.*)\.ogv$ ogv.php?file=$1
ogv.php
<?php
$file = $_GET['file'] . '.ogv';
while (strpos($file, '..') !== false)
{
$file = str_replace('..', '', $file);
}
$filesize = filesize($file);
header("Content-Type: video/ogg");
header("Content-Transfer-Encoding: binary");
header("Content-Length: {$filesize}");
readfile($file);
exit()
?>
HTML:
<video src="video.ogv" id="video" controls></video>
<script>
var video_src = document.getElementById('video').src;
var xhr = new XMLHttpRequest();
xhr.open('GET', video_src, false);
xhr.send(null);
var size = xhr.getResponseHeader('Content-Length');
alert(size);
</script>
這就是這個系統的工作原理。只需像普通鏈接一個.ogv視頻,但.htaccess文件首先捕獲請求並將其發送到ogv.php。 PHP文件然後專門發送一個文件大小頭,以防服務器不自動。好吧,這仍然不會對你有好處,對吧?那麼,您可以對視頻進行Ajax請求,並從HTTP標頭中提取文件大小。
希望這會有所幫助。
投票結果 - 就像答案一樣,我認爲這是正確的軌道,但還沒準備好接受。當你說「如果服務器不自動發送文件大小標題」 - 它通常這樣做嗎?如果是這樣,有沒有辦法讀取該文件大小頭?另外,當你說「從HTTP頭文件中提取文件大小」 - 我想這就是我想要做的第一件事,但我不確定如何。 – 2011-03-17 05:08:12
明天我會用一個實際的文件來試試這個,如果我可以得到它來填充$ filesize數據。 – 2011-03-17 05:09:42
現在最後的評論:你說「雖然不是最直接的」 - 什麼*是最直接的?有沒有一種我不知道的明顯方式? – 2011-03-17 05:11:46