Воспроизведение видео Quicktime на iPhone с использованием HttpHandler и IIS 5.1 - PullRequest
5 голосов
/ 28 октября 2009

Я пытаюсь транслировать видео QuickTime на iPhone из веб-приложения ASP.NET, используя HttpHandler. При размещении веб-приложения из IIS 5.1 (Windows XP) открывается видеоплеер, а затем отображается ошибка «Сервер настроен неправильно». Однако при использовании IIS 7.5 (Windows 7) видео воспроизводится нормально.

Производственная среда работает под управлением IIS 6.0 и имеет ту же проблему, когда при попытке воспроизведения видео на iPhone через Mobile Safari отображается ошибка, приведенная выше.

Я проверил заголовки Http, и они кажутся практически одинаковыми между двумя серверами (кроме нескольких, таких как заголовок Server , который, очевидно, будет отличаться), за исключением того, что они появляются в другом порядке, хотя я сомневаюсь, что это вызывает проблему.

Согласно этой теме в Группах Google, добавление заголовка 'Accept-Ranges: bytes' может помочь, хотя для нас это не имеет значения. Я также добавил заголовок ETag без всякой удачи.

Код, действительно ответственный за отправку файла, выглядит примерно так:

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);

Приведенный выше код, который передает файлы, по-видимому, работает правильно, и видеофайлы воспроизводятся правильно во всех браузерах настольных компьютеров и при хостинге из IIS 7.5 в Windows 7. Проблема проявляется только при попытке воспроизведения видеофайлов на iPhone с помощью Mobile Safari использует приведенный выше код, а веб-приложение ASP.NET размещается на IIS 5.1 или IIS 6.0.

Кто-нибудь еще испытывал что-то подобное и получил какие-либо идеи о том, что я могу сделать, чтобы это работало?

Ответы [ 3 ]

3 голосов
/ 29 октября 2009

После некоторых поисков я наткнулся на статью Запросы, зависящие от диапазона в ASP.NET , в которой описана точная проблема, с которой я столкнулся. Реализация класса RangeRequestHandlerBase с этого сайта (с некоторыми незначительными изменениями, чтобы соответствовать нашей существующей структуре проекта), похоже, решила проблему, и воспроизведение видео теперь работает корректно из IIS5 / 6.

@ Эрик - я проголосовал за твой ответ, так как твой комментарий был толчком в правильном направлении. Простого добавления заголовка «Accept-Ranges» было недостаточно (несмотря на работу в IIS7), и обработчик http необходимо было изменить для обработки запросов диапазона и обеспечения отправки правильных данных.

2 голосов
/ 28 октября 2009

Почему вы устанавливаете Response.Buffer в true?

Нельзя просто добавить заголовок «Accept-Ranges», если вы также не убедитесь, что сервер поддерживает запросы диапазона HTTP. Если клиентский проигрыватель требует поддержки запросов Range, а сервер отказывается их обрабатывать, кажется логичным, что запрос будет отклонен.

Вы можете попробовать использовать Fiddler в качестве обратного прокси-сервера и посмотреть, выполняет ли IPhone запрос Range. http://www.fiddler2.com/Fiddler/Help/ReverseProxy.asp

0 голосов
/ 28 октября 2009

Используйте что-то вроде Fiddler для предоставления точного HTTP-ответа от серверов. Выделите строку User-Agent клиента в соответствии с браузером iPhone (или просто используйте Safari?) И сравните выходные данные IIS 5.1 и 7.5. Очевидно, что потоки ответов не идентичны, или это будет работать на обоих.

Вы также можете использовать NetMon, который является отличным инструментом ... и позволит вам проводить испытания с самим iPhone.

Извините, у меня нет конкретного ответа для вас, но я думаю, что вам придется испачкать руки этим.

...