Подтвердить что ты не робот

Потоковый видеоконтент через Web API 2

Я сейчас разрабатываю наилучший способ сделать следующее:

У меня есть куча видеоматериалов CCTV (файлы MP4 размером от 4 МБ до 50 МБ), которые я хочу сделать доступными через веб-портал. Моя первая мысль заключалась в том, чтобы передать файл через Web API, поэтому я нашел ссылку ниже:

http://www.strathweb.com/2013/01/asynchronously-streaming-video-with-asp-net-web-api/

После реализации примера проекта я понял, что пример основан на Web API 1, а не на Web API 2.1, который я использую. Проведя еще несколько исследований, я получил код для компиляции с помощью WebAPI 2.1. Затем я понял, что если я хочу делать потоковое вещание, я не могу использовать файлы MP4, за этим стоит немало технических деталей, поэтому вот поток:

Лучший подход к потоку HTTP в реальном времени для видеоконтента HTML5

Кажется, что для этого мне нужно закодировать файлы MP4 на что-то вроде WebM, но это займет слишком много времени. Icecast (http://icecast.org/), который является потоковым сервером, но я еще не пробовал его, снова не уверен, что это то, что я необходимо сделать.

Теперь, когда я думаю об этом, мне на самом деле не нужна прямая трансляция, мне просто нужно разрешить клиенту воспроизводить видеофайл через браузер, возможно, используя элемент видео HTML5? Дело в том, что мое приложение также должно работать на IOS, поэтому я считаю, что я не могу даже кодировать свой MP4 в FLV и просто использовать flash.

Все, что мне действительно нужно, это иметь все мои видеоклипы в виде эскизов на веб-странице, и если клиент нажимает на них, он начинает играть как можно скорее, не загружая весь файл. Подумайте о функции "Watch Trailer" на imdb.com. Просто просто играйте в видеофайл, это действительно то, что я хочу. Мне не нужна потоковая передача LIVE, для чего я думаю WebM? Опять же, не уверен.

4b9b3361

Ответ 1

Две вещи:

  • Используйте элемент видео в своем HTML (это работает в браузерах AND iOS):

    <video src="http://yoursite.com/api/Media/GetVideo?videoId=42" /> 
    
  • Поддержка 206 PARTIAL CONTENT запросов в вашем веб-интерфейсе API. Это важно для потоковой передачи и поддержки iOS, и упоминается в этом потоке, который вы опубликовали.

Просто следуйте приведенному ниже примеру:

http://blogs.msdn.com/b/webdev/archive/2012/11/23/asp-net-web-api-and-http-byte-range-support.aspx

В двух словах:

if (Request.Headers.Range != null)
{
    // Return part of the video
    HttpResponseMessage partialResponse = Request.CreateResponse(HttpStatusCode.PartialContent);
    partialResponse.Content = new ByteRangeStreamContent(stream, Request.Headers.Range, mediaType);
    return partialResponse;
}
else 
{
    // Return complete video
    HttpResponseMessage fullResponse = Request.CreateResponse(HttpStatusCode.OK);
    fullResponse.Content = new StreamContent(stream);
    fullResponse.Content.Headers.ContentType = mediaType;
    return fullResponse;
}

Ответ 2

Поместите статические видеофайлы на веб-сервер и укажите их в видеоплеере. Вы можете использовать стандартный HTML-плеер (< video src= "http://location/of/file.mp4" > ) или пойти на что-то более интересное - просто Google для "html video player".

Чтобы убедиться, что видеофайлы не загружаются полностью, прежде чем начать играть, запустите их заранее, qt-faststart.