На прошлой неделе Microsoft объявил о новой фиче для медиа-стриминга, которая будет выполнена как расширение для веб-сервера IIS7 - называется Smooth Streaming. Идея заключается в том, чтобы закодировать исходный видео-поток в нескольких битрейтах и так и хранить - например, в HD, в мегабите в секунду, в 500kbps и в 300kbps (можно выбрать свои битрейты и более четырёх, конечно). Делается это с помощью продукта Microsoft Expression Encoder 2 SP1 - его надо натравить на исходный, например HD-файл. В итоге получим несколько файлов разных bitrates.
Далее надо взять один из встроенных в Encoder плееров на Silverlight. Там же можно нажать кнопочку "редактировать плеер в Expression Blend" и поправить его по желанию - например, приделать свой логотип. Далее, прямо из Encoder публикуем всё это дело на IIS7.
Что происходит у пользователя. Как только он запрашивает медиа-файл, IIS7 отправляет ему (плееру на Silverlight) XML со списком тех уровней качества, в которых может быть предоставлен контент. Silverlight-плагин умеет думать! Поэтому он выбирает нужный битрейт в зависимости от качества канала, которым сейчас пользуется юзер. Причем, еще раз, он умеет думать, и поэтому выбирает именно то качество, которое в данный момент доступно пользователю для просмотра исходя из реальных текущих условий канала.
Что делает IIS. Он на лету создаёт маааленькие (по две секунды, допустим) кусочки видео с нужным битрейт, и по HTTP (!!!) отдаёт видео плееру. Когда качество канала у пользователя изменяется (стало хуже на минуту потому что пользователь решил параллельно чего-нибудь громоздкое скачать, к примеру), то IIS7 с Silverlight плеером это понимают и пользователю начинают приходить кусочки видео худшего качества. Причем, никакой буфферизации нет, потому что не надо этого делать, так как это маленькие файлики, а не бесконечный поток. Маленькие файлики такого качества, которое реально "пролезает" в текущий канал.
Кстати, так как по сути эти кусочки - маленькие статические файлы, то их можно кэшировать везде где нужно! Например, на сетях доставки контента. Вот пример работы IIS7 Smooth Streaming на сети Akamai CDN на сайте специального демо-проекта - http://www.smoothhd.com/. Более подробно об этом проекте можно почитать на сайте Akamai вот тут.
Я попробовал - у меня это реально работает. В зависимости от качества канала в текущий момент видео реально меняет качество на лету без буфферизации ;-) Как видите, для этого теста рекомендуется иметь хотя бы 768kbps, причем не до провайдера, а до ближайшей точки Akamai, но их много - 35 тысяч серверов в 900 сетях по всему миру. Если канал хороший - получите HD. Если нет - получите контент худшего качества. Думать вам, как пользователю, какой же битрейт выбрать, не надо - оно само, причём в реальном времени на лету.
Кстати, о грустном - всё это пока работает в виде демки. Реально доступно это расширение для IIS7 будет только через некоторое время. Но если вы заинтересованы, то можно с нами уже начинать говорить - мы готовы, например, дать ранний доступ к тестированию.
Ключевые технические моменты: контейнер Fragmented MP4, кодес VC-1 (и будет ещё), протокол HTTP, объекты могут кэшироваться, дополнительный, отдельный, проприетарный и специализированный стриминг-сервер не нужен вообще - его роль выполняет обычный веб-сервер IIS7 с плагином Smooth Streaming.
Кстати, как вы заметили, скриншот я сделал в Firefox, так как Silverlight это кроссбраузерная и кроссплатформенная технология (SmoothHD.com в Safari на маке ;). Ну что, мир становится лучше ;-) Пусть будет больше технологий, конкуренции и идей. Тогда не будет застоя и пользователь будет получать только всё лучшее.