Главная » Silverlight » Списки воспроизведения на стороне сервера

0

Если мультимедийное содержимое передается в потоковом режиме с помощью служ­бы Windows Media Services, список можно создать на стороне сервера. Такой список по­зволяет объединить в одном потоке несколько видеофайлов, не сообщая пользователю об источнике каждого видеофайла. Списки на стороне сервера предоставляют способ интеграции рекламы в поток видео (не морщьтесь, ведь вы — нанятый разработчик, а не пользователь). Для этого достаточно вставить рекламный фрагмент перед запро­шенным видеофайлом.

Файл списка на стороне сервера чаще всего имеет расширение .wsx. Как и список на стороне клиента, он содержит разметку XML.

<?wsx version="l.0"?>

<smil> <seq id="sql"> •cmedia id="video2" src="Videol.wmv" /> <media id="videol" src="Advertisement.wmv" /> <media id="video2" src="Video2.wmv" /> <seq>

</smil>

Корневой элемент <smil> содержит упорядоченную последовательность видеофай­лов, представленную элементом <seq>. Каждый видеофайл представлен элементом <media>. Более сложный список на стороне сервера может повторять видеофайлы, пе­редавать части длинных видеофайлов, задавать видеофайлы, которые будут воспро­изводиться при возникновении ошибки, и т.д. Дополнительную информацию о стан­дарте файлов . wsx и элементах стандарта, поддерживаемых и неподдерживаемых в Silverlight, можно найти по такому адресу: www.msdn.microsoft.com/en-us/library/ сс645037 (VS. 95) .aspx.

Прогрессивный и потоковый режимы загрузки

Обычно, если не предприняты никакие специальные меры, Silverlight воспроизводит медиафайл в прогрессивном (progressive) режиме. Это означает, что когда в буфере ак­кумулировано достаточно содержимого для воспроизведения на протяжении несколь­ких секунд, медиафайл начинает воспроизводиться. Остальное содержимое загружает­ся параллельно с воспроизведением.

ІДавное преимущество прогрессивного режима состоит в том, что воспроизведение начинается почти немедленно после запуска приложения. Общая длина медиафайла не влияет на время начальной задержки. На нее влияет только значение битрейта, опреде­ленное в медиафайле. Прогрессивная загрузка обладает еще одним, менее очевидным, преимуществом: для нее не нужны специальные программы на стороне сервера, пото­му что буферизация выполняется на стороне клиента. Следовательно, клиентское при­ложение может применять прогрессивную загрузку при работе с любым веб-сервером.

Для реализации потокового режима используется специальный протокол, поддержи­вающий состояния. Воспроизведение начинается немедленно, как и в прогрессивном режиме, но потоковый режим более эффективен. На его эффективность влияют мно­гие факторы, однако в среднем можно считать, что переход от прогрессивного режима к потоковому увеличивает эффективность в 2-3 раза. Следовательно, сервер может об­служивать одновременно в 2-3 раза больше пользователей. Это главная причина при­менения потоковой загрузки.

Плавный недостаток потокового режима состоит в том, что для его реализации необ­ходимы специальные программы на стороне сервера. Например, для Silverlight необходи­ма программа Windows Media Services, включенная в Windows Server 2003 и предостав­ляемая бесплатно пользователям Windows Server 2008. Эти программы сложно конфигу­рировать и сопровождать. Поддерживать прогрессивную загрузку значительно проще.

Примечание. Если в объекте MediaElement адрес URL начинается с http: // или https: //, Silverlight начинает прогрессивную загрузку. Если же адрес начинается с mms: //, Silverlight пытается начать потоковую загрузку и в случае неудачи переключается в прогрессивный режим.

Термин "потоковый режим" (streaming) не всегда используется в значении, опи­санном выше. Например, Microsoft предоставляет бесплатную хостирующую службу Silverlight, которая называется Silverlight Streaming. Она предоставляет бесплатные 10 Гбайт хостируемого пространства для приложений Silverlight и медиафайлов. Однако несмотря на свое название служба Silverlight Streaming не применяет потоковый режим, она всего лишь обслуживает медиафайлы и предоставляет их клиентским устройствам в прогрессивном режиме.

Совет. Если вам необходим эффективный способ хостирования больших медиафайлов для приложений Silverlight, используйте службу Silverlight Streaming (www.silverlight.live.com). Она бесплатная, не содержит рекламы и докучливых лицензионных требований и предоставляет потрясающие 5 Тбайт в месяц для обслуживания мультимедийного содержимого.

Настройка прогрессивной загрузки

Если не хотите усложнять конфигурирование и поддержку сервера, хостирующего службу Windows Media Services, или сайт не поддерживает эту службу, используйте прогрессивную загрузку. Чтобы оптимизировать прогрессивную за­грузку, придерживайтесь следующих рекомендаций.

•         Создайте несколько версий одного и того же медиафайла. Если приложение содержит большие медиафайлы и нужно обеспечить поддержку пользователей в широком диапазоне скоростей соединения, добавьте в приложение средства выяснения пропускной способности канала, используемого конкретным клиентским устройством. Если пропускная способность низкая, передавайте небольшие медиафайлы. Существенная про­блема состоит в том, что клиентское устройство не всегда может правильно оценить пропускную способность своего канала. Кроме того, на объем видеоданных, которые может обработать компьютер, влияют другие факторы, такие как текущая загрузка процессора, качество беспроводного соединения и т.д.

•         Настраивайте свойство Buf f eringTime элемента MediaElement. С помощью свойства Buffering- Time можно управлять объемом содержимого в буфере Silverlight при прогрессивной загрузке. По умолчанию буфер содержит 5 секунд содержимого. Большее значение BufferingTime не позволит пользователю, обладающему медленным соединением, воспроизводить видеофайлы с большим битрейтом (если не сохранить в буфере весь файл), однако при увеличении BufferingTime воспроизведение будет более плавным при ненадежном соединении.

•         Информируйте пользователя о текущем состоянии загрузки. Пользователь чувствует себя комфортнее, когда видит, какая часть медиафайла уже загружена. Многие популярные сайты, такие как YouTube, и проиг­рыватели, например Media Player, предоставляют индикаторы прогресса с затененным фоном, сообщающие о проценте загрузки. Для создания индикатора прогресса, в приложении Silverlight можно применить событие DownloadProgressChanged. Оно генерируется надстройкой Silverlight при каждом увеличении процента загрузки на 5 (например, когда загружено 5, 10, 15% и т.д.). Кроме того, оно генерируется при завершении загрузки. При возникновении события DownloadProgressChanged можно прочитать свойство Down- loadProgress, содержащее текущий процент загрузки в виде значения от о до 1. Примените значение DownloadProgress для определения ширины элемента Rectangle при разработке индикатора прогресса.

•         Сообщайте пользователю о состоянии буфера. Создать реакцию на изменение процента заполнения буфера можно с помощью события BufferingProgressChanged. Свойство BufferingProgress содержит текущий процент заполнения в виде значения от 0 до 1. Например, если свойство BufferingTime равно 5 секундам, а свойство BufferingProgress равно 1, значит, в буфере хранится 5 секунд медиафайла; если же свойство BufferingProgress равно 0.5, буфер заполнен наполовину и в нем хранится 2,5 секунды медиафайла. Информация о заполнении буфера может быть полезной, когда текущее соединение не позволяет воспроизводить медиафайл непрерывно.

•         Используйте автоматическое регулирование битрейта. Если веб-сервер принадлежит вам, можете оп­тимизировать его производительность, ограничив скорость выгрузки содержимого. Задайте максимальную скорость немного больше битрейта передаваемого видеофайла.

Источник: Мак-Дональд, Мэтью. Silverlight 3 с примерами на С# для профессионалов. : Пер. с англ. —- М. : ООО «И.Д. Вильяме», 2010. — 656 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии