Россия, Башкирский Государственный университет, 2006 |
Deep Zoom и Deep Zoom Composer
Роль HTTP протокола
Есть несколько причин использования HTTP протокола в качестве транспорта для Smooth Streaming:
- Служба скачивания через веб-сайт традиционно менее затратна и более распространена у провайдеров, чем службы потокового вещания
- Протоколы потокового вещания хуже проходят сквозь брэндмауэры и маршрутизаторы, т.к. используют не TCP, а UDP и номера портов, отличные от широко распространенного 80-го порта
- Доставка с помощью HTTP не требует специализированных прокси- и кэш-серверов. Кэширование медиафайлов осуществляется точно также, как и кэширование любых других файлов
- Самый дешевый способ доставки контента конечному пользователю
Кроме того, сейчас Интернет построен в основном на HTTP и оптимизирован под HTTP.
Примеры реализации Smooth Streaming
http://www.smoothhd.com/ - образцы видео
http://www.iis.net/media/experiencesmoothstreaming - можно увидеть качество потока, транслируемое сервером
http://hdbeta.ctv.ca/ - образцы видео
Smooth Streaming и Silverlight
Silverlight поддерживает воспроизведение видео Smooth Streaming, включая обработку MPEG-4, загрузку по протоколу HTTP, переключение между кусочками с различным битрейтом и управление в .NET коде. Это дает возможность разработчикам расширять возможности текущей версии Silverlight, не дожидаясь нового релиза.
Самая интересная часть Silverlight клиента Smooth Streaming - эвристический модуль, который определяет когда и как переключить битрейт. Функциональность Smooth Streaming требует от Silverlight клиента без промедления адаптироваться к изменяющимся условиям, а именно решить:
- Что если клиент имеет достаточную полосу пропускания, но не имеет достаточной мощности процессора, чтобы обработать видео с высоким битрейтом
- Что должно случиться, если пользователь нажал на паузу или минимизировал окно проигрывателя
- Что, если разрешение принимаемого видео больше, чем разрешение экрана клиента
- Каков должен быть размер буфера
- Как гарантировать прокрутку рекламы
Для того чтобы минимизировать необходимость программирования для разработчика существуют:
- Шаблоны Expression Encoder. Expression Encoder - средство, входящее в состав Microsoft Expression 3. Шаблоны Expression Encoder содержат готовый модуль Smooth Streaming и все исходные коды. Проект Smooth Streaming может быть легко интегрирован в проект Silverlight (библиотека AdaptiveStreaming.dll).
- Open Video Player (OVP). Это инициатива, предлагающая открытые коды для видеоплееров на платформах Silverlight and Flash.
Архитектура Smooth Streaming
Smooth Streaming это первый формат медиа файлов Microsoft кроме ASF. Он базируется на спецификации ISO/IEC 14496-12, больше известной, как MP4. Используется MP4, а не ASF, т.к.:
- MP4 более легкий контейнер с меньшими накладными расходами
- MP4 легче обрабатывать из управляемого кода .NET
- MP4 - широко используемый формат
- MP4 поддерживает видео кодек H.264, используемый в продуктах Microsoft таких, как Silverlight 3, Windows 7, Xbox 360, … Этот стандарт часто используется в фильмах высокой четкости
- MP4 поддерживает фрагменты (в т.ч. рекламные) внутри файла
В Smooth Streaming полноразмерное видео записывается на диск как один файл (один файл с видео одного битрейта), но пересылается в виде небольших кусочков.
Типичный набор файлов Smooth Streaming состоит из:
- Файлы MP4, содержащие аудио и/или видео
-
*.ismv
- содержит аудио и видео, или только аудио
- 1 файл ISMV на 1 битрейт видео
-
*.isma
- Содержит только аудио
- Аудио дорожка может быть мультиплексирована в видеофайл ISMV вместо отдельного файла ISMA
-
*.ismv
- Файл манифеста на сервере
-
*.ism
- Описывает взаимоотношение между дорожками, битрейтами и файлами на диске
- Используется только сервером IIS с Smooth Streaming, не клиентом
-
*.ism
- Файл манифеста на клиенте
-
*.ismc
- Описывает доступные клиенту потоки: используемые кодеки, закодированные битрейты, разрешение видео, маркеры, заголовки и т.д.
- Это первый доставляемый файл клиенту
-
*.ismc
Манифест - это XML файл. Серверный манифест основан на специализированном формате SMIL 2.0 XML.
Воспроизведение Smooth Streaming
Общий адаптивный подход к трансляции видео основывается на разделении длительного видео на небольшие кусочки. Чтобы скачать кусочки с веб сервера, необходимо последовательно скачать файлы 00001.vid, 00002.vid, 00003.vid и т.д. Smooth Streaming использует более сложную схему. Видео не разделено на множество файлов-кусочков, а виртуально разделено на фрагменты, которые расположены в одном MP4 файле. Обычно 1 фрагмент на 1 GOP1GOP (Group of pictures) - группа кадров между ключевыми кадрами внутри кодируемого видеопотока. Это некая группа изображений, которая занимает определённый иерархический уровень (место) в потоке MPEG данных и содержит последовательность кадров. Такая последовательность может включать несколько кадров и должна обязательно начинаться с I-кадра. Остальные кадры вычисляются из предыдущих и ключевого . Это подразумевает определенные изменения в дизайне сервера и клиента:
- Сервер извлекает из веб запроса точный сдвиг по времени внутри файла MP4
- Клиент может запросить кусочек в более понятном формате для разработчика, например, во временном коде, вместо значения индекса
Сначала плеер запрашивает сервер Smooth Streaming файл-манифест *.ismc. Там указано какой кодек используется, битрейт и разрешение, список имеющихся кусочков, их время начала и продолжительность. Вот примерная форма запроса фрагмента:
http://video.foo.com/NBA.ism/QualityLevels(400000)/Fragments(video=610275114)
Здесь 400000 - битрейт, 610275114 - начало фрагмента ( 1 = 100 наносекунд ). Эти значения берутся из манифеста клиента.
После запроса IIS сервер со Smooth Streaming ищет соответствующий файл *.ismv или *.isma на диске, как указано в манифесте сервера *.ism. Затем внутри файла сервер находит начало фрагмента и отсылает его клиенту, как отдельный автономный файл. Это принципиальное решение, т.к. такой файл легко кэшируется на клиенте и хранится на его диске или на кэширующем сервере.
Теперь о смене битрейта. Сервер в процессе переключения не играет ровно никакой роли. Клиентская часть анализирует время загрузки фрагмента, заполненность буфера, скорость обработки (рендеринга) кадров и решает запросить больший или меньший битрейт с сервера. Приложение Expression Encoder гарантирует правильность расположения кадров, индексацию, длину группы кадров и т.д. для обеспечения плавного воспроизведения видео при смене битрейта.