Microsoft User Group Винница feedback XNA 3.1 - Видео поддержка - Human-programmer beeing - Microsoft User Group Винница

Планируемые события:

Запуск Internet Explorer 9 в Виннице - сентябрь

 

XNA 3.1 - Видео поддержка

Недавно была выпущена новая версия XNA Game Studio 3.1.

Среди остальных прикольных нововведений (таких как рендеринг трехмерных аватаров) была также добавлена и поддержка видео.

Теперь поподробнее.

Требования к исходному видео:

  • формат - Windows Media Video, Series 9. Енкодер можно найти здесь.
  • максимальное разрешение экрана 1280x720
  • Видео и аудио должны быть закодированы с постоянным битрейтом (constant bit rate aka (CBR)
  • Поддерживаеться незащищенное видео без DRM защиты
  • Невозможно воспроизводить части видео файла - файл всегда воспроизводиться полностью.

Импортировать видео можно через стандартные средства Content Pipeline.

Воспроизвидение видео

Обьекты,  с которыми нам надо работать, это Video (исходное видео) и VideoPlayer (непосредственно проигрыватель).

Создадим и инициализируем их в конструкторе класса игры.

GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;

// Create the variables needed to hold and play back my video.
Video myVideoFile;
VideoPlayer videoPlayer;

public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";

// Create the VideoPlayer
videoPlayer = new VideoPlayer();
}

Для загрузки даных из contetnt pipeline используем:

protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);

// TODO: use this.Content to load your game content here

// Load in my video file (just like any other content!)
myVideoFile = Content.Load<Video>(@"Bear");
}

Теперь для проигрывания видео нужно нажать А на контролере, а для остановки - В. Эту функциональность дописываем в апдейт функцию.

protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();

// TODO: Add your update logic here

// Start the video playback when the user presses A
if (GamePad.GetState(PlayerIndex.One).Buttons.A == ButtonState.Pressed)
{
videoPlayer.Play(myVideoFile);
}

// Start the video playback if the user presses B
if (GamePad.GetState(PlayerIndex.One).Buttons.B == ButtonState.Pressed)
{
videoPlayer.Stop();
}

base.Update(gameTime);
}

В функции Draw рисуем картинку из нашего плеера:

protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);

// TODO: Add your drawing code here

// Render the video in it's orginal resolution to the screen using SpriteBatch
spriteBatch.Begin();
if (videoPlayer.State == MediaState.Playing)
{
spriteBatch.Draw(videoPlayer.GetTexture(), new Rectangle(0, 0, myVideoFile.Width, myVideoFile.Height), Color.White);

}
spriteBatch.End();

base.Draw(gameTime);
}

Дополнительно следует помнить о возможности отключить звук (свойство VideoPlayer.IsMuted) и возможности зациклить видео (свойство VideoPlayer.IsLooping). Их можно установить например в конструкторе.

На что еще следует обратить внимание:

  • поскольку воспроизводимая картинка являеться текстурой, вы можете применять к ней эффекты.
  • VideoSoundtrackType позволит вам миксить ваш звук с видео (если в плеере установлено свойство IsMuted для родной дорожи видео файла)
  • Высокое качество видео (с высоким разрешением и битрейтом) к сожалению приведет к тормозам во время воспроизведения.

Источники:

Тестовый проект


Related Posts with Thumbnails Posted июл 01 2009, 07:26 by LexRema View 344 1
Filed under: , ,

Comments

LexRema on 07-09-2009 23:29

Апдейт.

Видео изображение конвертируеться сначала из wmv файла текстуру типа YUV аппаратным способом, что есть очень быстрым вариантом. Но потом для того, чтобы отдать изображение вашему коду, происходит попиксельная конвертация в RGB текстуру. Эта процедура уже грузит процессор вашей системы, видеоплеер не справляеться, что приводит к значительным тормозам при воспроизведении широкоформатных изображений. Как варианты решения можно рассмотреть уменьшение размера фрейма видео (увеличение битрейта ничего не поменяет), или, скажем, разрезание видео на несколько частей, который будут воспроизводиться в нескольких отдельных склееных окнах. Это может повлиять на синхронизацию, однако поможет в многопроцессорной системы.

Вобщем видео - конечно полезная вещь, но пока сыровата в этой версии.

Add a Comment

(required)  
(optional)
(required)  
Remember Me?
Please add 5 and 1 and type the answer here:

Enter captcha:

Информация

О нас
Timeline
Партнеры
Инфопартнерство
Реклама на сайте
Поддержать сайт

Разделы

Блоги
Медиа
Форумы
Вики
Презентации

Работа

Вакансии
Компании

Контакты

msugvn@gmail.com
krakovetsky.alex
@msugvnua
ВКонтакте
LinkedIn
Facebook
INETA

Разработка логотипа: Helen

RSS подписка - Microsoft User Group Винница  Twitter - Microsoft User Group Винница

Статистика

Powered by Community Server (Non-Commercial Edition), by Telligent Systems