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

0

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

•         Средства редактирования видеофайлов. С помощью программы Expression En­coder можно вырезать и вставлять фрагменты содержимого, а также выполнять другие простые операции редактирования.

•         Наложение водяных знаков. На основное содержимое можно накладывать во­дяные знаки в виде неподвижных или анимированных логотипов. Водяные знаки могут быть наложены постоянно или отключаться в заданные моменты времени.

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

•         Готовность видеофайла для Silverlight. Программа Expression Encoder постав­ляется с набором предопределенных профилей, приспособленных для приложе­ний Silverlight (некоторые из этих профилей доступны также в Windows Media Encoder). Кроме того, программа Expression Encoder позволяет создавать для Sil­verlight видеопроигрыватели с пользовательскими обложками.

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

1. Задайте исходный файл. Для этого выберите команду File^lmport (Файл^Импорт), найдите нужный мультимедийный файл, выделите его и щелкните на кнопке

Open (Открыть). Возникнет небольшая задержка, в течение которой программа анализирует файл, прежде чем добавить его в список панели Media Content (Муль­тимедийное содержимое), расположенной в нижней левой части окна. Во время задержки можно выполнять операции редактирования над другими видеофай­лами, например отсечь нежелательные фрагменты, вставить маркеры, добавить наложение и т.д. Все эти операции выполняются во вкладке Enhance (Расширен­ные средства), корешок которой приведен в правой части окна.

2.     Задайте целевой файл. Для этого откройте вкладку Output (Выход) и в группе Job Output (Результат выполнения задания) выберите папку и введите имя но­вого файла.

3.     Выберите значение битрейта. Для этого откройте вкладку Presets (Параметры), расположенную в правом верхнем углу окна, и разверните раздел Encoding for Sil­verlight (Кодирование для Silverlight). Если применяется прогрессивная загрузка, выберите формат в группе Variable bitrate (Настраиваемый битрейт). При использо­вании потоковой загрузки и программы Windows Media Services выберите формат в группе Constant bitrate (Постоянный битрейт). При разных форматах будут соз­даны видеофайлы с разными битрейтами, качеством изображения и размерами. Подробные параметры выбранного формата выводятся во всплывающей подсказке (рис. 11.3) при наведении указателя на формат. Выбрав нужный формат, щелкни­те на кнопке Apply (Применить), расположенной в нижней части вкладки Presets.

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

5.     Щелкните на кнопке Encode, расположенной в нижней части окна на панели Me­dia Content. При необходимости сохраните набор параметров кодирования для использования в будущем с другими видеофайлами (например, с обновленной версией закодированного файла).

Методы сжатия 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 Кбит/с.

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

Маркеры

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

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

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

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

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

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

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

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

Рис. 11.4. Добавление нового маркера в Expression Encoder

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

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

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

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

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

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

Отобразить информацию о маркере на экране можно с помощью события

MarkerReached элемента MediaElement. Свойство TimelineMarkerRoutedEventArgs. Marker предоставляет объект TimelineBaker, содержащий текст маркера (в свойстве Text) и время маркера (в свойстве Time).

Ниже приведен обработчик события, копирующий текст маркера в элемент TextBlock страницы Silverlight (рис. 11.5).

private void media_MarkerReached(object sender,

‘ TimelineMarkerRoutedEventArgs e) {

lblMarker.Text = e.Marker.Text + " в момент времени " + e.Marker.Time.TotalSeconds + " секунды";

}

1 Media – Mn.rocoft Internet Explorer

‘3 Media – Microsoft Internet Expl

Рис. 11.9. Перемешивание фрагментов видеомозаики

Необходим контейнер, содержащий фрагменты мозаики. В данном случае использует­ся контейнер Canvas, потому что анимация должна перемещать фрагменты по странице.

<Canvas Margin="20" x:Name="puzzleSurface" Width="300" Height="300"

Background="White" HorizontalAlignment="Center" VerticalAlignment="Center"> </Canvas>

Наиболее важный код выполняется при щелчке на кнопке Сгенерировать мозаику. Он вычисляет размеры прямоугольника, необходимого для размещения фрагмента, и ди­намически создает элемент Rectangle.

private void cmdGeneratePuzzle_Click(object sender, RoutedEventArgs e)

{

/ / Извлечение количества строк и столбцов int rows; int cols;

Int32.TryParse(txtRows.Text, out rows); Int32."TryParse(txtCols.Text, out cols); if ((rows < 1) I I (cols <1)) return;

/ / Очистка поверхности puzzleSurface.Children.Clear();

// Вычисление размеров прямоугольника

double squareWidth = puzzleSurface.ActualWidth / cols; double squareHeight = puzzleSurface.ActualHeight / rows;

// Создание кисти videoClip для элемента MediaElement VideoBrush brush = new VideoBrush (); brush.SetSource(videoClip);

// Создание прямоугольников

double top = 0; double left =0;                                                            1

for (int row = 0; row < rows; row++)

{

for (int col = 0; col < cols; col++) {

Затем необходимо обеспечить вывод в каждом прямоугольнике только нужного фрагмента. Эта задача решается путем применения объекта преобразований к объек­ту VideoBrush. Для разных прямоугольников можно использовать разные объекты VideoBrush, однако в данном случае применяется другой способ: отсечение областей прямоугольников. Каждый прямоугольник получает размеры всего окна, а затем отсе­кается. Ниже приведен код, создающий прямоугольники и устанавливающий параме­тры отсечения.

// Создание прямоугольника; каждому прямоугольнику // присваиваются размеры контейнера Canvas Rectangle rect = new Rectangle () ; rect. Width = puzzleSurface .ActualWidth; rect.Height = puzzleSurface.ActualHeight; rect.Fill = brush; SolidColorBrush rectBrush = new SolidColorBrush(Colors.Blue); rect.StrokeThickness = 3; rect.Stroke = rectBrush;

// Отсечение прямоугольника

RectangleGeometry clip = new RectangleGeometry();

// Коррекция на 1 пиксель, чтобы не было рамок clip.Rect = new Rect(left, top, squareWidth+1, squareHeight+1); rect. Clip = clip;

// Обработка щелчка на прямоугольнике

rect.MouseLeftButtonDown += rect_MouseLeftButtonDown; puzzleSurface.Children.Add(rect);

// Переход к следующему столбцу left += squareWidth;

}

// Переход к следующей строке left = 0;

top += squareHeight;

}

// Если видеосодержимое не воспроизводится, //в этом месте его можно запустить

}

При щелчке на прямоугольнике код запускает две анимации, которые перемещают его в случайную позицию. Анимации можно создать вручную, однако легче определить их в коллекции ресурсов. Это обусловлено тем, что в приложении применяется только две анимации, которые можно повторно использовать при щелчке на прямоугольнике.

Ниже приведен код обеих анимаций. Первая анимация, перемещающая прямоуголь­ник по горизонтали, длится 0,25 секунды, а вторая анимация, перемещающая его по вертикали, — 0,15 секунды.

<UserControl.Resources> <Storyboard x:Name="squareMoveStoryboard"> <DoubleAnimation x:Name="leftAnimation"

Duration="0:0:0.25"

Storyboard.TargetProperty="(Canvas.Left)"> </DoubleAnimation>

<DoubleAnimation x:Name="topAnimation" Duration="0:0:0.15"

Storyboard.TargetProperty="(Canvas.Top)"> </DoubleAnimation> </Storyboard> </UserControl.Resources>

В коде используется одна раскадровка для обеих анимаций, поэтому при ее исполь­зовании нужно быть осторожным. Перед запуском новой анимации необходимо вруч­ную разместить прямоугольник в новой позиции, а затем остановить раскадровку. Альтернативный способ состоит в динамическом создании новой раскадровки при каж­дом щелчке (этот способ используется в главе 10 при создании игры с бомбами).

Ниже приведен код, управляющий раскадровкой и перемещающий прямоугольник при щелчке на нем.

private Rectangle previousRectangle;

private void rect_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

{

// Извлечение прямоугольника Rectangle rectangle = (Rectangle)sender;

if (previousRectangle != null) {

double left = Canvas.GetLeft(rectangle); double top = Canvas.GetTop(rectangle); squareMoveStoryboard.Stop(); Canvas.SetLeft(rectangle, left); Canvas.SetTop(rectangle, top);

}

// Остановка анимации squareMoveStoryboard.Stop ();

// Подключение анимации

Storyboard.SetTarget(squareMoveStoryboard, rectangle);

// Выбор случайных значений направления и смещения Random rand = new Random () ; int sign = 1;

if (rand.Next (0, 2) == 0) sign = -1; leftAnimation.To = Canvas-GetLeft(rectangle) + rand.Next (60,150) * sign;

topAnimation.To = Canvas.GetTop(rectangle) + rand.Next (60, 150) * sign;

// Сохранение ссылки на анимируемый прямоугольник previousRectangle = rectangle;

// Запуск анимации squareMoveStoryboard.Begin ();

}

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

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

По теме:

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