Воспроизведение видео с помощью Scaleform GFx

Материал из CryWiki Russia

Перейти к: навигация, поиск

Содержание

Конвертирование видео

Чтобы воспороизвести видео используя Scaleform, вам сконвертировать видео-файл в формат USM. Scaleform Video SDK содержит инструмент ScaleformVideoEncoder.exe, которые позволяет конвертировать AVI-файлы в формат USM.

Загрузка видео в CryENGINE

Есть два спасоба загрузить видео в CryENGINE:

  1. Загрузить USM-файла напрямую.
  2. Вложить объект «Linked video» в Flash-ассет.

1. Загрузка USM-файла напрямую

Простой способ отобразить видео: Напрямую загрузить USM-файл через экземпляр IFlashPlayer.

IFlashPlayer* pFlashPlayer = gEnv->pSystem->CreateFlashPlayerInstance();
bool bRes = pFlashPlayer->Load("myvideo.usm");

Теперь вы можете вывести видео на экран, аналогично любым GFX-файлам.

pFlashPlayer->Advance(fDeltaTime);
pFlashPlayer->Render();

2. Вложение видео-объекта в Flash-ассет

Иным способом является размещение видео-объекта в вашем Flash-файле, загрузка USM-файла через объект NetStream и привязка его к вашему видео-объекту. Чтобы добавить видео-объект в ваш Flash-ассет, щёлкните правой кнопкой мыши в библиотеке и выберите «New Video…» из контекстного меню.

NewVid.png

Разместите видео-объект в Stage и укажите имя экземпляра, например, «MyVideo». Затем, добавьте следующий ActionScript в ваш FLA-файл:

// включаем расширение GFX
_global.gfxExtensions = true;
 
// создаём новый объект NetStream из объекта NetConnection
var NetC = new NetConnection();
NetC.connect(null);
ns = new NetStream(NetC);
 
// привязываем NetStream к видео-объекта на Stage
MyVideo.attachVideo(ns);
 
// воспоизводим видео
onLoad = function()
{
  ns.play("myvideo.usm");
}

Если вы хотите получить информацию о состояние видео, например, чтобы отправить уведомление через FSCommand в код C++, вы можете добавить функцию «onStatus» в ваш ActionScript:

// прослушиваем событие видео
ns.onStatus = function (infoObject)
{
    if (infoObject.level == "status")
    {
    if(infoObject.code == "NetStream.Play.Start")
        fsCommand("onVideoStart");
    else if (infoObject.code == "NetStream.Play.Stop")
        fsCommand("onVideoStop");
    }
    else if (infoObject.level == "error")
    {
        if (infoObject.code == "NetStream.Play.StreamNotFound")
        fsCommand("onVideoNotFound");
    }
}