2013-05-24 42 views
6

Tôi đang sử dụng thẻ video để phát video.mp4 từ PHP - Không phát trong HTML5 Thẻ video

tôi sử dụng các file php cho phát lại như thế này:

<video id="playvideo" preload="auto" width="845" height="395" 
    poster="http://video-js.zencoder.com/oceans-clip.png"> 

    <source src="../getvideo_webm.php" type='video/webm' /> 
    <source src="../getvideo_mp4.php" type='video/mp4'/> 
    <source src="../getvideo_ogv.php" type='video/ogg' /> 

    </video> 

Tất cả các file .php đang chơi tốt khi tôi kiểm tra xem chúng trực tiếp trong Brower. Nhưng thiết lập ở trên với tất cả .php dưới dạng tệp nguồn sẽ không phát. Nếu tôi đưa ra một nguồn .mp4 thẳng, nó sẽ hoạt động tốt.

Các getvideo_mp4.php trông như thế này:

$path = 'oceans-clip.mp4'; 
if (file_exists($path)) 
{ 
$size=filesize($path); 
[email protected]($path,'rb'); 
if(!$fm) { 
// You can also redirect here 
header ("HTTP/1.0 404 Not Found"); 
die(); 
} 
$begin=0; 
$end=$size; 
if(isset($_SERVER['HTTP_RANGE'])) { 
if(preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', 
$_SERVER['HTTP_RANGE'],$matches)){ 
$begin=intval($matches[0]); 
if(!empty($matches[1])) { 
$end=intval($matches[1]); 
} 
} 
} 
if($begin>0||$end<$size) 
header('HTTP/1.0 206 Partial Content'); 
else 
header('HTTP/1.0 200 OK'); 
header("Content-Type: video/mp4"); 
header('Accept-Ranges: bytes'); 
header('Content-Length:'.($end-$begin)); 
header("Content-Disposition: inline;"); 
header("Content-Range: bytes $begin-$end/$size"); 
header("Content-Transfer-Encoding: binary\n"); 
header('Connection: close'); 
$cur=$begin; 
fseek($fm,$begin,0); 
while(!feof($fm)&&$cur<$end&&(connection_status()==0)) 
{ print fread($fm,min(1024*16,$end-$cur)); 
$cur+=1024*16; 
usleep(1000); 
} 
die(); 
} 

Vì vậy, những gì tôi làm sai?

+0

NGAY BÂY GIỜ ... có vẻ như nó ĐANG LÀM VIỆC với mã trên ..: -/ – Niels

+0

Công việc tốt Niels ... –

Trả lời

3

Đoạn mã trên đang làm việc. Sau khi tôi thay đổi url src cho các tệp .php, nó đã thực sự hoạt động. Bây giờ nó chơi trong moz, tức là, chrome chỉ với các tập tin php như các nguồn trong thẻ video.

+0

Bạn có thể giải thích những gì bạn đã thay đổi không? Tôi có cùng một vấn đề nhưng mã ở trên không hoạt động – ChronosMOT

+1

Tệp của bạn có BẤT CỨ mã nào khác hay là mã ở trên mã CHỈ trong tệp php của bạn? – Niels

+0

Có rất nhiều mã khác, tôi giải mã tệp và tôi nhận được tất cả các tài nguyên được mã hóa thông qua tập lệnh php này (nhưng tôi đang sử dụng mã ở trên chỉ dành cho mp4). Tuy nhiên kể từ hôm qua tôi đã chạy nó trên IE11 và Firefox 40.0.3. Tuy nhiên, Chrome vẫn không phát tệp. Ngoài ra bây giờ tôi đang sử dụng một phiên bản sửa đổi của mã này: http://www.pixelstech.net/article/1357732373-Output-a-file-with-HTTP-range-header-in-PHP rất gần:) vào mã của bạn nhưng sử dụng các tiêu đề hơi khác nhau. – ChronosMOT

0

Bạn sẽ phải lặp lại đường dẫn sau khi truy xuất và chuyển nó đến thuộc tính 'src' của Thẻ video HTML5. Chiến lược hiện tại của bạn sẽ không hoạt động tốt, tôi hy vọng ...

Ví dụ,

<source src="<?php echo getMp4VideoUrl(); ?>" type='video/mp4'/> 
+0

Hi Vijay .. Có vẻ như bạn "chỉ" muốn phục vụ trực tiếp src bởi php. Tôi muốn ẩn vị trí tệp phương tiện thực sự và tải chúng động từ các tệp php getvideo_xx. – Niels

+0

Nếu bạn cũng làm như vậy, người dùng có thể dễ dàng tải xuống video của bạn chỉ bằng cách nhấp chuột phải vào video và chọn tùy chọn 'Sao chép Vị trí Video' từ Trình đơn Ngữ cảnh Thẻ Video. Tôi đã thử công việc này nhưng không thành công. Hãy thử liên kết này, http://stackoverflow.com/questions/9756837/prevent-html5-video-from-being-downloaded-right-click-saved –

+1

Xin chào Vijay. Nó mặc dù bây giờ có vẻ như mã trên đang làm việc .. Tôi có vẻ như một bước khá không may mắn của cố gắng cách khác nhau .. Các rightclick bị vô hiệu hóa và nó được phục vụ trong một modalwindow .. Tôi biết nó không phải là an toàn cho tập tin này. Tôi chỉ không muốn người dùng biết vị trí chính xác của các tệp .. – Niels

0

Trình duyệt xác định nội dung video từ tiêu đề được gửi tới nó cùng với yêu cầu. Chỉ cần thao tác tiêu đề và giữ phần mở rộng PHP. Nó sẽ hoạt động hoàn hảo

Các vấn đề liên quan