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;<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 Украина | Украинское подразделение компании Microsoft. |