2012-10-09 23 views
5

Tôi đã thiết lập một trang web thử nghiệm .. Tôi đang cố triển khai một video HTML5 để phát trên trang web mà tôi đang phát triển và tôi muốn sử dụng jplayer để nó rơi trở lại một tập tin swf nếu video html5 không được hỗ trợ.Khách hàng đóng kết nối khi phát trực tuyến m4v từ apache sang chrome với jplayer

http://dev.johnhunt.com.au/ là những gì tôi có cho đến thời điểm này. Nó hoạt động tốt nếu tôi cung cấp http://www.jplayer.org/video/m4v/Big_Buck_Bunny_Trailer_480x270_h264aac.m4v cho video, tuy nhiên nếu tôi lưu trữ nó trên máy chủ của riêng tôi nó chỉ đơn giản là không bao giờ bắt đầu chơi.

Loại mime chắc chắn là chính xác, video/m4v. Charles Proxy nói:

Client closed connection before receiving entire response 

Infact, đây là toàn bộ yêu cầu:

GET /Big_Buck_Bunny_Trailer_480x270_h264aac.m4v HTTP/1.1 
Host dev.johnhunt.com.au 
Cache-Control no-cache 
Accept-Encoding identity;q=1, *;q=0 
Pragma no-cache 
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4 
Accept */* 
Referer http://dev.johnhunt.com.au/ 
Accept-Language en-US,en;q=0.8 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Cookie __utma=120066461.1007786402.1349773481.1349773481.1349786970.2; __utmb=120066461.1.10.1349786970; __utmc=120066461; __utmz=120066461.1349773481.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) 
Range bytes=0- 

Và câu trả lời:

Some binary data (maybe 3 or 4kbytes long) 

nào trông ok. Tôi cho rằng 'client' là trình duyệt chrome của tôi .. tại sao nó lại từ bỏ? Làm thế nào tôi có thể sửa lỗi này? Đó là lái xe cho tôi điên như tôi không thể tìm thấy bất cứ điều gì trên google :(

Khi tôi sử dụng các tập tin m4v trên jplayer.org đây là yêu cầu:

GET /video/m4v/Big_Buck_Bunny_Trailer_480x270_h264aac.m4v HTTP/1.1 
Host www.jplayer.org 
Cache-Control no-cache 
Accept-Encoding identity;q=1, *;q=0 
Pragma no-cache 
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4 
Accept */* 
Referer http://dev.johnhunt.com.au/ 
Accept-Language en-US,en;q=0.8 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Cookie __utma=24821473.325705124.1349773077.1349773077.1349773077.1; __utmc=24821473; __utmz=24821473.1349773077.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided) 
Range bytes=0- 

đáp ứng:

Lots of binary data (very long.. working) 

Chúc mừng, John.

+0

Lưu ý, tôi không muốn sử dụng jwplayer vì nó không phải là nguồn mở. –

+0

Bổ sung: Trong Chrome dưới tab mạng của công cụ dev tôi nhận được hai yêu cầu cho tệp video, lần đầu tiên có trạng thái chờ xử lý, trạng thái thứ hai có trạng thái bị hủy, cả hai loại đang chờ xử lý nhưng trạng thái bị hủy có màu đỏ. Cả hai kích thước là 13bytes, thời gian trên là 551ms. –

Trả lời

8

Tôi nhận thấy rằng khi trình duyệt Chrome gửi yêu cầu "Phạm vi: byte = 0-", bạn KHÔNG nên trả lời bằng phản hồi "Nội dung một phần của 206". Để giúp Chrome xử lý dữ liệu đúng cách, bạn cần gửi lại tiêu đề "200 OK".

Tôi không biết liệu điều này có đúng theo thông số kỹ thuật hay không nhưng Chrome làm việc và dường như không làm hỏng các trình duyệt khác.

+1

Đó là sự thật, chrome không cung cấp video trong khi những người khác (Firefox và Safari) làm điều đó một cách hoàn hảo. –

+1

Có một cách để thay đổi trạng thái phản hồi này trong apache thay vì tạo ứng dụng để chặn luồng và thay đổi mã trạng thái? –

+1

Wow cảm ơn cho câu trả lời, tôi đã chạy vào chính xác cùng một điều viết máy chủ http của riêng tôi trên Android. Quay trở lại 200 thay vì 216 thực sự sửa chữa nó! – Maks

0

Có thể là một sự cố trên apache của bạn ... có lẽ bạn đang sử dụng apache cho thẻ.

Bạn đã thêm các loại mime vào apache chưa?

ví dụ:

AddType video/mp4 mp4

AddType video/mp4 m4v

Ngoài ra kiểm tra gzip được tắt cho cho các phương tiện truyền thông ... nó đã được nén ... và không gzip Jplayer. swf.

Bạn có thể đăng cấu hình apache của mình không? bạn đang sử dụng bất kỳ module trực tuyến như this?

Cheers Robin

EDIT

o và cũng có thể bạn muốn chấp nhận-dao byte trong apache. Nếu bạn nhìn cận cảnh ở hai liên kết bạn đang phục vụ 200 và chúng đang phục vụ dữ liệu một phần 206.

1

Chỉ cần chạy với Chrome, có vẻ như bạn cần đảm bảo rằng tiêu đề Content-Range được máy chủ của bạn đặt trong phản hồi.

Từ http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html:

Ví dụ về các giá trị byte-content-range-spec, giả định rằng các thực thể chứa tổng cộng 1234 byte:

 
     . The first 500 bytes: 
     bytes 0-499/1234 
     . The second 500 bytes: 
     bytes 500-999/1234 
     . All except for the first 500 bytes: 
     bytes 500-1233/1234 
     . The last 500 bytes: 
     bytes 734-1233/1234 
Các vấn đề liên quan