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

среда, 1 июля 2009, Oleksandr Reminnyi

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

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

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

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

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

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

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

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

GraphicsDeviceManager graphics;<br />SpriteBatch spriteBatch;<br /><br />// Create the variables needed to hold and play back my video.<br />Video myVideoFile;<br />VideoPlayer videoPlayer;<br /><br />public Game1()<br />{<br />    graphics = new GraphicsDeviceManager(this);<br />    Content.RootDirectory = "Content";<br /><br />    // Create the VideoPlayer<br />    videoPlayer = new VideoPlayer();<br />}<br /><br />Для загрузки даных из contetnt pipeline используем:<br /><br />protected override void LoadContent()<br />{<br />    // Create a new SpriteBatch, which can be used to draw textures.<br />    spriteBatch = new SpriteBatch(GraphicsDevice);<br /><br />    // TODO: use this.Content to load your game content here<br /> <br />    // Load in my video file (just like any other content!)<br />    myVideoFile = Content.Load<Video>(@"Bear");<br />}<br /><br />Теперь для проигрывания видео нужно нажать А на контролере, а для остановки - В. Эту функциональность дописываем в апдейт функцию.<br /><br />protected override void Update(GameTime gameTime)<br />{<br />    // Allows the game to exit<br />    if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)<br />        this.Exit();<br /><br />    // TODO: Add your update logic here<br />    <br />    // Start the video playback when the user presses A<br />    if (GamePad.GetState(PlayerIndex.One).Buttons.A == ButtonState.Pressed)<br />    {<br />        videoPlayer.Play(myVideoFile);<br />    }<br /><br />    // Start the video playback if the user presses B<br />    if (GamePad.GetState(PlayerIndex.One).Buttons.B == ButtonState.Pressed)<br />    {<br />        videoPlayer.Stop();<br />    }<br /><br />    base.Update(gameTime);<br />}<br />

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

protected override void Draw(GameTime gameTime)<br />{<br />    GraphicsDevice.Clear(Color.CornflowerBlue);<br /><br />    // TODO: Add your drawing code here<br /><br />    // Render the video in it's orginal resolution to the screen using SpriteBatch<br />    spriteBatch.Begin();<br />    if (videoPlayer.State == MediaState.Playing)<br />    {<br />        spriteBatch.Draw(videoPlayer.GetTexture(), new Rectangle(0, 0, myVideoFile.Width, myVideoFile.Height), Color.White);<br />     <br />    }<br />    spriteBatch.End();<br /><br />    base.Draw(gameTime);<br />}<br /><br />

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

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

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

Источники:

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

Компании из статьи


Microsoft Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии