2009-10-28 38 views
5

Tôi đang cố phát trực tuyến video QuickTime sang iPhone từ ứng dụng web ASP.NET bằng HttpHandler. Khi lưu trữ ứng dụng web từ IIS 5.1 (Windows XP), trình phát video sẽ mở ra và sau đó hiển thị lỗi 'Máy chủ không được định cấu hình chính xác'. Tuy nhiên, khi sử dụng IIS 7.5 (Windows 7), video sẽ phát tốt.Phát video Quicktime trên iPhone bằng HttpHandler và IIS 5.1

Môi trường sản xuất đang chạy IIS 6.0 và có cùng sự cố, khi cố gắng phát video trên iPhone qua Mobile Safari hiển thị lỗi ở trên.

Tôi đã kiểm tra các tiêu đề Http và chúng xuất hiện giống nhau giữa hai máy chủ (ngoài một số ít, chẳng hạn như tiêu đề Server, rõ ràng là khác nhau), ngoại trừ chúng xuất hiện theo thứ tự khác nhau , mặc dù tôi nghi ngờ rằng điều này đang gây ra vấn đề.

Theo this thread trên Google Groups, việc thêm tiêu đề 'Accept-Ranges: bytes' có thể giúp, mặc dù điều này không có sự khác biệt đối với chúng tôi. Tôi cũng đã thêm tiêu đề ETag, không có may mắn.

Mã thực sự chịu trách nhiệm cho việc gửi các tập tin trông giống như sau:

Context.Response.Buffer = true; 
Context.Response.ContentType = "video/x-m4v"; 

Context.Response.AppendHeader("Content-Disposition", "filename=\"Video.m4v\""); 
Context.Response.AppendHeader("Content-Length", "23456789"); 

Context.Response.AppendHeader("Accept-Ranges", "bytes"); 
Context.Response.AppendHeader("ETag", GetETag(path)); 

Context.Response.TransmitFile(path); 

Đoạn mã trên mà truyền file xuất hiện để được hoạt động một cách chính xác và các file video phát lại một cách chính xác trong tất cả các trình duyệt máy tính để bàn và khi lưu trữ từ IIS 7.5 trên Windows 7. Vấn đề chỉ rõ ràng khi cố gắng phát các tập tin video trên iPhone bằng cách sử dụng Mobile Safari sử dụng mã trên với ứng dụng web ASP.NET được lưu trữ trên IIS 5.1 hoặc IIS 6.0.

Có ai khác có kinh nghiệm bất cứ điều gì như thế này và có bất kỳ ý tưởng về những gì tôi có thể làm để có được điều này làm việc?

+0

Mẹo Accept-Ranges đã giúp tôi với một vấn đề tương tự với ASP.NET MVC. – kim3er

Trả lời

2

Tại sao bạn đặt Response.Buffer thành true?

Bạn không thể chỉ thêm tiêu đề "Chấp nhận phạm vi" trừ khi bạn cũng đảm bảo rằng máy chủ hỗ trợ yêu cầu Phạm vi HTTP. Nếu trình phát của khách hàng yêu cầu hỗ trợ cho các yêu cầu Phạm vi và máy chủ từ chối xử lý chúng, có vẻ như hợp lý rằng yêu cầu đó sẽ bị từ chối.

Bạn có thể thử sử dụng Fiddler làm proxy ngược và xem IPhone có tạo yêu cầu Phạm vi hay không. http://www.fiddler2.com/Fiddler/Help/ReverseProxy.asp

0

Sử dụng thứ gì đó như Fiddler để hiển thị phản hồi HTTP chính xác đến từ máy chủ. Fudge chuỗi User-Agent của khách hàng để phù hợp với trình duyệt iPhone (hoặc chỉ sử dụng Safari?) Và so sánh đầu ra từ IIS 5.1 và 7.5. Rõ ràng các luồng phản hồi không giống nhau hoặc nó sẽ hoạt động trên cả hai.

Bạn cũng có thể sử dụng NetMon, một công cụ tuyệt vời ... và sẽ cho phép bạn kiểm tra bằng chính iPhone.

Rất tiếc, tôi không có câu trả lời cụ thể cho bạn, nhưng tôi nghĩ bạn sẽ bị bẩn tay với cái này.

+0

Cảm ơn lời khuyên. Video thực sự phát lại tốt trong Safari trên Windows và trong Firefox cũng vậy khi sử dụng chuỗi tác nhân người dùng iPhone, vì vậy tôi không nghĩ đó là điều gì đó với điều này. Vấn đề có vẻ như nó là nhiều hơn một cái gì đó để làm với cách IIS5/6 đang truyền các tập tin như trái ngược với IIS7, mà không cho phép iPhone để chơi nó. Đã không sử dụng các công cụ giám sát mạng nhiều trước đây, nhưng sẽ kiểm tra NetMon/Wireshark và xem họ có thể giúp đỡ hay không. – Mun

3

Sau khi tìm kiếm, tôi đã xem qua bài viết Range-Specific Requests in ASP.NET mô tả vấn đề chính xác mà tôi gặp phải. Việc triển khai lớp học RangeRequestHandlerBase từ trang này (với một số sửa đổi nhỏ để phù hợp với cấu trúc dự án hiện có của chúng tôi) dường như đã giải quyết được vấn đề và phát lại video hiện hoạt động chính xác từ IIS5/6.

@Eric - Tôi đã upvoted câu trả lời của bạn khi nhận xét của bạn là một cú huých đi đúng hướng.Chỉ cần thêm tiêu đề 'Accept-Ranges' là không đủ (mặc dù làm việc trong IIS7), và trình xử lý http cần phải được sửa đổi để xử lý các yêu cầu phạm vi và đảm bảo rằng dữ liệu chính xác đang được gửi đi.

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