2011-03-17 41 views
3

我知道ogg視頻和mp4視頻的區別之一是ogg視頻沒有描述文件大小的元數據,所以當加載ogg視頻時,控件無法顯示文件完全加載之前的剩餘時間。這可能是一個問題,如果ogg視頻超過幾分鐘長。有沒有辦法在請求頁面時獲取這種文件大小?有沒有辦法在完全加載之前告訴.ogg視頻的文件大小?

(客戶端開發者,要求,我認爲有一個服務器端回答的問題。我歡迎編輯建議對這個問題,如果你能想到的辦法要求更明確。)

回答

2

好儘管不是最直接的,但你可以試試這個。

首先,建立一個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標頭中提取文件大小。

希望這會有所幫助。

+0

投票結果 - 就像答案一樣,我認爲這是正確的軌道,但還沒準備好接受。當你說「如果服務器不自動發送文件大小標題」 - 它通常這樣做嗎?如果是這樣,有沒有辦法讀取該文件大小頭?另外,當你說「從HTTP頭文件中提取文件大小」 - 我想這就是我想要做的第一件事,但我不確定如何。 – 2011-03-17 05:08:12

+0

明天我會用一個實際的文件來試試這個,如果我可以得到它來填充$ filesize數據。 – 2011-03-17 05:09:42

+0

現在最後的評論:你說「雖然不是最直接的」 - 什麼*是最直接的?有沒有一種我不知道的明顯方式? – 2011-03-17 05:11:46

相關問題