Кодирование видеофайлов и Expression Encoder

83

Кодирование видеофайлов

Для получения оптимальных результатов нужно подготовить видеофайлы с учетом требований Silverlight. Например, необходимо использовать такие видеофайлы, которые не будут перегружать пользовательские каналы. Это особенно важно, если в приложении планируется использовать большие медиафайлы, такие как получасовая лекция.

Обычно файлы WMV, используемые в приложении Silverlight, представляют собой конечный продукт, подготовленный на основе больших, высококачественных исходных видеофайлов. Часто исходные файлы хранятся в форматах, отличных от WMV. Эти подробности исключительно важны, потому что в любом случае вы должны каким-либо образом перекодировать исходные видеофайлы, чтобы уменьшить их размеры и сделать их пригодными для размещения в Интернете.

Для подготовки видеофайлов к размещению в Интернете существует ряд специальных инструментов. Компания Microsoft предоставляет два инструмента:

Windows Movie Maker

Эта программа включена в последние версии Windows (в частности, Windows Vista) и предназначена для личного использования. Для профессиональных целей она слишком ограниченная. Вследствие простоты и ограниченности эта программа больше подходит для редактирования домашнего видео, чем для подготовки видеофайлов к размещению в Интернете.

Expression Encoder

Эта программа доступна как дополнительная часть пакета Expression Suite, разработанного компанией Microsoft. Содержит мощные средства редактирования видеофайлов и специально предназначена для Silverlight, предоставляя такие ценные средства, как автоматическая генерация пользовательских обложек для видеопроигрывателей Silverlight. Бесплатная версия Expression Encoder доступна по адресу: Expression Encoder

Подробно ознакомиться с кодированием видеофайлов можно, прочитав документацию программных продуктов, статьи на веб-сайтах и книги, посвященные этой теме. В следующих разделах представлены лишь базовые принципы использования программы Expression Encoder.

В платную версию Expression Encoder добавлены поддержка формата Н.264, средства неограниченного копирования с экрана (бесплатная версия копирует лишь 10 минут) и процедура IIS Smooth Streaming, позволяющая веб-серверам настраивать качество потокового видео на основе изменения условий передачи и ресурсов клиентского компьютера. Если указанные средства вам не нужны, пользуйтесь бесплатной версией, вполне пригодной для решения остальных задач.

Использование программы Expression Encoder

Эта программа предоставляет те же возможности, что и Windows Media Encoder, плюс несколько дополнительных возможностей:

Чтобы закодировать видеофайл с помощью программы Expression Encoder, выполните следующие действия:

  1. После запуска программы выберите значение Silverlight Project (Проект Silverlight) и щелкните на кнопке OK:

    Профиль Silverlight в Expression Encoder
  2. Задайте исходный файл. Для этого выберите команду File --> Import, найдите нужный мультимедийный файл, выделите его и щелкните на кнопке Open (Открыть). Возникнет небольшая задержка, в течение которой программа анализирует файл, прежде чем добавить его в список панели Media Content (Мультимедийное содержимое), расположенной в нижней левой части окна. Во время задержки можно выполнять операции редактирования над другими видеофайлами, например отсечь нежелательные фрагменты, вставить маркеры, добавить наложение и т.п. Все эти операции выполняются во вкладке Enhance (Расширенные средства), корешок которой приведен в правой части окна.

  3. Задайте целевой файл. Для этого откройте вкладку Output, в группе Job Output выберите папку и введите имя нового файла:

    Вкладка Output программы Expression Encoder
  4. Выберите значение битрейта. Для этого откройте вкладку Presets, расположенную в правом верхнем углу окна, и разверните раздел Encoding for Silverlight. Если применяется прогрессивная загрузка, выберите формат в группе Variable bitrate. При использовании потоковой загрузки и программы Windows Media Services выберите формат в группе Constant bitrate. При разных форматах будут созданы видеофайлы с разными битрейтами, качеством изображения и размерами. Подробные параметры выбранного формата выводятся во всплывающей подсказке при наведении указателя на формат:

    Выбор способа кодирования

    Выбрав нужный формат, щелкните на кнопке Apply в нижней части вкладки Presets.

  5. После задания способа кодирования будет выведена необходимая информация в группе Video вкладки Encode. Можете, например, настроить размеры выходного видеосодержимого с помощью текстового поля Size. Слева находится окно предварительного просмотра, позволяющее визуально оценить результат кодирования:

    Вкладка Encode программы Expression Encoder
  6. Щелкните на кнопке Encode, расположенной в нижней части окна на панели Media Content. По необходимости сохраните набор параметров кодирования для использования в будущем с другими видеофайлами (например, с обновленной версией закодированного файла). Запустится процесс кодирования:

    Процесс кодирования в Expression Encoder

Методы сжатия CBR и VBR

В зависимости от параметров приложения Silverlight и режима загрузки (потоковый или прогрессивный) необходимо выбрать метод сжатия видеофайлов. В Silverlight доступны два метода сжатия:

CBR (Constant Bit-Rate Encoding - кодирование с постоянным битрейтом)

Этот метод используется, когда нужно разрешить потоковую загрузку видеофайлов. При использовании данного метода среднее и пиковое значения битрейта одинаковые, поэтому интенсивность потока данных остается постоянной в каждый момент времени. Однако качество кодирования может отличаться для поддержания постоянного битрейта. Это обеспечивает плавное воспроизведение видеофайла на клиентском устройстве. При прогрессивной загрузке битрейт может быть непостоянным, потому что приложение кэширует необходимый объем содержимого.

VBR (Variable Bit-Rate Encoding — кодирование с переменным битрейтом)

Данный метод используется при прогрессивной загрузке. При его применении текущий битрейт изменяется в зависимости от сложности содержимого. Более сложное содержимое кодируется с увеличенными значениями битрейта. Качество остается постоянным, но скорость передачи изменяется.

Обычно скорость передачи ограничивается наихудшими частями содержимого, поэтому при использовании метода VBR размер видеофайла при том же качестве в общем случае меньше, чем при использовании метода CBR. Максимальное значение битрейта в Silverlight ограничивается методом VBR.

Например, если выбрать профиль VC-1 Web Server 512k DSL, будет создан видеофайл со средним значением битрейта, равным 350 Кбит/с (что меньше пропускной способности соединения, равной 512 Кбит/с), и с максимальным значением 750 Кбит/с.

Маркеры

Маркер — это текстовое примечание, внедренное в мультимедийный файл и связанное с определенным временем. Формат WMV поддерживает текстовые маркеры и команды сценариев (используемые, например, для открытия веб-страницы во время воспроизведения), однако Silverlight интерпретирует оба этих средства как одно и то же — как текстовые закладки, связанные со временем.

Маркеры предоставляют интересные возможности для создания проигрывателей на основе страниц Silverlight. Например, можно внедрить в файл набор маркеров, используемых в качестве заголовков, и выводить их в определенное время. Можно также внедрить в видеофайл инструкции для надстройки Silverlight, которые приложение будет читать и выполнять.

Платформа Silverlight предоставляет в элементе MediaElement два инструмента реагирования на маркеры: событие MarkerReached и коллекцию Markers. Однако сначала рассмотрим добавление маркера в мультимедийный файл.

Добавление маркеров с помощью программы Expression Encoder

Программа Expression Encoder содержит встроенные средства добавления маркеров. Чтобы добавить маркеры, выполните следующие действия:

  1. После импорта мультимедийного файла откройте вкладку Metadata.

  2. Перетащите ползунок в позицию, в которой нужно разместить маркер.

  3. На панели Markers щелкните на кнопке Add, чтобы создать новый маркер. Маркер будет добавлен в список:

    Добавление нового маркера в Expression Encoder
  4. По необходимости отредактируйте время и добавьте текст маркера в поле Value (Значение).

  5. Если планируется использовать маркер для индексной навигации, установите рядом с маркером флажки Key Frame (Ключевой кадр) и Thumbnail (Эскиз). Если в данной позиции создать ключевой кадр, воспроизведение будет начинаться с этого места с минимальной задержкой. Эскиз можно отобразить на экране. Когда пользователь щелкнет на эскизе, приложение перейдет к маркеру. Оба эти средства применимы, только если Expression Encoder используется для генерации видеостраницы Silverlight, хотя их можно создать и для собственной страницы.

  6. Вернитесь к п. 2 и добавьте другие маркеры. При этом можете редактировать существующие маркеры или щелкнуть на кнопке Remove (Удалить), чтобы удалить выделенный маркер.

  7. Программа Expression Encoder может создать для закодированного видеофайла проигрыватель Silverlight. Откройте вкладку Output и область Job Output. В списке Template выберите пункт, начиная с Silverlight 3. Шаблон определяет версию Silverlight и обложку проигрывателя. При выделенном шаблоне отображается область предварительного просмотра интерфейса проигрывателя. Если выбрать пункт None, программа не создаст проигрыватель.

  8. Создав нужные маркеры, щелкните на кнопке Encode (Кодировать), чтобы начать кодирование видеофайла.

Когда программа Expression Encoder генерирует мультимедийный проигрыватель на основе шаблона, она автоматически создает входную HTML-страницу и несколько скомпилированных файлов ХАР. Программа не генерирует исходный код и файлы проекта, поэтому вы не сможете приступить к точной настройке проигрывателя сразу после его создания.

Однако можно воспользоваться существующим шаблоном и применить его в качестве базиса для своего пользовательского шаблона, который затем можно будет применить совместно с любым проектом Expression Encoder. Для этого найдите подходящий шаблон и задайте его в качестве начального на вкладке Templates. Затем щелкните на значке с шестеренкой в нижнем правом углу вкладки и выберите значение Edit Copy of Template in Visual Studio (Редактировать копию шаблона в Visual Studio).

Использование маркера в приложении Silverlight

Отобразить информацию о маркере на экране можно с помощью события MarkerReached элемента MediaElement. Свойство TimelineMarkerRoutedEventArgs.Marker предоставляет объект TimelineMarker, содержащий текст маркера (в свойстве Text) и время маркера (в свойстве Time).

Извлечь коллекцию Markers из элемента MediaElement можно в любой момент времени, не дожидаясь события MarkerReached. Это особенно полезно, если маркер используется для навигации. Например, можно создать реакцию на событие MediaOpened (в это время коллекция Markers заполняется) и вывести информацию о маркерах в список:

<!-- Рефакторинг примера аудио-/видео плеера 
   рассмотренного в предыдущих статьях -->
<StackPanel Grid.Row="5" Grid.Column="1">
            <TextBlock Text="Выберите номер"/>
            <ListBox x:Name="lbxMarkers" Margin="5" Height="80" SelectionChanged="lbxMarkers_SelectionChanged_1"/>
</StackPanel>
private void media_MediaOpened(object sender, RoutedEventArgs e)
{
      ...

      foreach (TimelineMarker marker in media.Markers)
      {
          lbxMarkers.Items.Add(new MarkerInfo(marker));
      }
}

private void lbxMarkers_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
      MarkerInfo markerInfo = (MarkerInfo)lbxMarkers.SelectedItem;
      media.Position = markerInfo.Marker.Time;
      media.Play();
}

...

// Вспомогательный класс для отображения маркеров
public class MarkerInfo
{
        public TimelineMarker Marker
        {
            get;
            set;
        }

        public override string ToString()
        {
            return Marker.Text + " (" + Marker.Time.Minutes + ":" + Marker.Time.Seconds + ":" +
                    Marker.Time.Milliseconds + ")";
        }

        public MarkerInfo(TimelineMarker marker)
        {
            Marker = marker;
        }
}
Чтение маркеров

В данном примере код считывает маркеры из мультимедийного файла. Объекты TimelineMarker можно также создать программно и добавить в коллекцию Markers при загрузке файла и возникновении события MediaOpened. В этом случае маркер ведет себя как обычно, например объект MediaElement при его достижении генерирует событие MarkerReached. Однако маркер не сохраняется в видеофайле после его закрытия и повторной загрузки. Это дает возможность загружать информацию маркера из другого источника, например из текстового файла.

Программа Expression Encoder позволяет создавать эскизы изображений для маркеров. Эскизы внедрены в видеофайл или связаны с ним каким-либо способом. Эскиз можно отобразить на странице и применить в коде для навигации. Программа Expression Encoder жестко кодирует имена эскизов и позиции маркеров, что позволяет автоматически генерировать код приложения. Однако такой подход усложняет поддержку приложения.

Пройди тесты
Лучший чат для C# программистов