Воспроизведение видео Quicktime на iPhone с использованием HttpHandler и IIS 5.1

StackOverflow https://stackoverflow.com/questions/1635209

Вопрос

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

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

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

Согласно этой теме Группы, добавление заголовка «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.

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top