2012-07-11 53 views
13

Tôi hiện đang cố gắng phân phối video MP4 để sử dụng trong video HTML5 (sử dụng video-js) thông qua tập lệnh PHP để kiểm soát quyền truy cập video. Sau một số nghiên cứu tôi có thể làm việc này, với sự giúp đỡ của stackoverflow article found here. Nếu tôi điều hướng đến tập lệnh PHP, tôi có thể xem video như thể tôi đang xem nó qua đường dẫn tuyệt đối của nó (ví dụ localhost/myvideo.mp4 thay vì localhost/myscript.php) trong Firefox, Safari và IE. Vấn đề của tôi là với Google Chrome, điều này chỉ đơn giản là hiển thị một màn hình bị bôi đen với một trình phát phương tiện nhỏ ở trung tâm và không làm gì cả.Phân phối video MP4 qua PHP không thành công trong Google Chrome

Tôi đã thử sử dụng viết lại nhanh như localhost/avideo.mp4 để định tuyến tới tập lệnh PHP, nhưng tiếc là điều này không thay đổi bất cứ điều gì.

Dưới đây là kịch bản của tôi:

if (is_file($uri)) { 
    header('Content-Type: video/mp4'); 
    if (isset($_SERVER['HTTP_RANGE'])) { 
     $this->rangeDownload($uri); 
     exit; 
    } else { 
     header("Content-Length: ".filesize($uri)); 
     $this->readfile_chunked($uri); 
     exit; 
    } 
} else { 
    //error 
} 

Phương pháp rangeDownload đã được lấy trực tiếp từ phụ lục A của this link như đề xuất trong bài viết stackoverflow nói trên.

+0

Bạn có thể gửi tất cả các thông tin tiêu đề bạn đang gửi? – ethrbunny

+0

Loại nội dung, Phạm vi chấp nhận, Phạm vi nội dung, Nội dung dài, HTTP/1.1 206 Nội dung một phần. Các tiêu đề này được sử dụng trong trường hợp đầu tiên sử dụng rangeDownload, được sử dụng cho Chrome, mặc dù readfile_chunked sử dụng ít tiêu đề hơn (vẫn không hoạt động trong chrome). – AaronDS

+0

Chỉ khác tôi có thể đề nghị là Content-Transfer-Encoding: binary. Im có thể truyền âm thanh qua PHP cho tất cả các trình duyệt bằng cách sử dụng combo này. – ethrbunny

Trả lời

2

Có thể sự cố xảy ra với URL (cụ thể hơn là phần mở rộng). Thông thường, bạn sẽ sử dụng tiêu đề Content-Disposition, nhưng tôi hiểu rằng điều này là không mong muốn khi cung cấp nội dung cho điện thoại di động.

Hãy thử sử dụng localhost/myscript.php/myvideo.mp4

Điều quan trọng không phải là để sử dụng "Content-Disposition" HTTP header, kể từ một số điện thoại từ chối chấp nhận nội dung khi sử dụng nó. Bằng cách đưa tên tệp vào URL, bạn sẽ đánh lừa điện thoại nghĩ rằng đó là một tệp thực và chấp nhận nó.

Bây giờ, khi bạn gửi URL tải xuống cho khách hàng, bạn thường không biết thiết bị nào khách hàng có, do đó bạn không biết định dạng tệp thiết bị sẽ hỗ trợ. Do đó, bạn không thể bao gồm tên tệp trên URL đó và một lần nữa, bạn sẽ cần một trang tải xuống trung gian. Một lần nữa, chúng tôi sẽ sử dụng URL như:

http://wap.mydomain.tld/get.php/123456abcdef 

Lần này, khi khách hàng kết nối để tải xuống nội dung, tập lệnh get.php sẽ không tạo tệp tạm thời, nhưng trỏ đến tập lệnh khác phát tệp nội dung. Giả sử nội dung kết quả để tải về sẽ là "image.jpg", trang download trung gian có thể chỉ cho khách hàng đến một URL như:

http://wap.mydomain.tld/download.php/123456abcdef/image.jpg 

Từ (http://mobiforge.com/developing/story/content-delivery-mobile-devices)

+0

Cảm ơn phản hồi của bạn, mặc dù như tôi đã nêu trong câu hỏi của mình, "Tôi đã thử viết lại nhanh như localhost/avideo.mp4 để chuyển sang tập lệnh PHP, nhưng tiếc là điều này không thay đổi gì cả". Tôi không chắc bạn đang đề nghị tôi làm gì khác? – AaronDS

+0

Sự khác biệt có thể nằm trong URL thực tế mà trình duyệt nhận được. Nếu bạn đang sử dụng chuyển hướng (30x), thì trình duyệt cuối cùng sẽ nhận được URL cuối cùng, với phần mở rộng .php thay vì phần mở rộng .mp4 - điều này có thể rất quan trọng. Bạn có thử so sánh tất cả các tiêu đề yêu cầu/phản hồi (sử dụng Fiddler không?) –

+0

Tôi đang xem thông tin tiêu đề ngay bây giờ trong Chrome, nhưng tôi không chắc chắn nên làm gì với nó. Điều tôi có thể nói là có sự khác biệt rõ ràng. Tôi sẽ theo dõi bài đăng này với một ảnh chụp màn hình trong một vài giờ. – AaronDS

2

Tôi hiểu bạn sử dụng video-js nhưng tôi khuyên bạn nên sử dụng html5media (cũng xem github page để biết thêm thông tin). Tôi đã phải làm cho video có sẵn trên một trang web cho công việc và tôi đã thử một vài điều bao gồm cả video-js nhưng html5media là người duy nhất mà tôi có thể làm việc trong tất cả các trình duyệt. Một trong những yêu cầu là chúng tôi đã lưu trữ tất cả các tệp để chúng tôi không phụ thuộc vào máy chủ của bên thứ ba để phân phát tệp JavaScript hoặc trình phát flash, tôi không thể nhớ nếu có video-js điều này thật dễ dàng nhưng tôi biết với html5media, chúng tôi có thể tải xuống flowplayer và có mọi thứ trên máy chủ của chúng tôi.

Và để tạo ra 3 định dạng video giới thiệu (mp4, WebM và Theora) Tôi sử dụng Miro Video Converter

+0

Cảm ơn bài đăng này, tuy nhiên vấn đề không nằm trong Video-JS, nó đặc biệt với chrome (video không phát trên chrome có video-j s ra hình ảnh, và khi sử dụng các tập tin video bình thường, video-js hoạt động tốt). Trải nghiệm của tôi với video-js rất tốt; Tôi đã sử dụng thắng tay để chuyển đổi tập tin và cho đến nay tôi đã không chạy vào bất kỳ vấn đề. Tuy nhiên, tôi đã lưu ý html5media trong trường hợp tôi cần phải tìm một cái gì đó mới trong tương lai. Chúc mừng. – AaronDS

+0

Không có vấn đề gì @Noobatron. Tôi không muốn ngăn cản mọi người sử dụng video-j, bởi vì nếu bạn có thể làm cho nó hoạt động thì tuyệt vời! Tôi chỉ nghĩ ai đó có thể được hưởng lợi từ việc nghe về những gì tôi đã làm trong trường hợp họ chạy vào cùng một loại vấn đề (có lẽ tôi chỉ không biết những gì tôi đã làm với video-js). Tôi có Handbrake ở nhà mà tôi sử dụng để chuyển đổi dvd của điện thoại Android của tôi và nó hoạt động một điều trị.Tôi vẫn sẽ đi đến Miro tại nơi làm việc cho 3 định dạng cho web đơn giản chỉ vì giao diện thực sự đơn giản. Hy vọng bạn sẽ làm cho video của mình hoạt động được Chrome! – Dean

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