Michael did a post some time back to give an overview of the new video playback feature. Here’re some additional tips that might help -

Adding video to your project

  • In a nutshell - make sure your videos are encoded with Windows Media Video v9 codecs, are using the CBR format and that they have an audio track (also encoded with CBR). If you’re using Windows Media Encoder, select “File download (computer playback)” for your encoding destination format. This will give you the options to select CBR encoding for both video and audio streams.


  • The video clip must have an audio track otherwise the build will fail with - Please make sure that the video is not DRM protected and is a valid single-pass CBR encoded video file (yeah, I know, we could done better and added some info about the missing audio track here). This is an unfortunate limitation of  the native technology we depend on for playback but you can always mute the playback – “VideoPlayer.IsMuted = true”.
  • I’ve discovered that attempting to add a “silent” or “blank” audio track in Windows Media Encoder can be troublesome (sometimes the video will get “stuck” on the first frame on Windows). I’ve successfully used the encoder to do screen captures and format conversions (e.g AVI to WMV). If my source content didn’t have an audio track I used Windows Movie Maker to add one there.   
    • Adding an audio track to your movie in Windows Movie Maker takes little more skill than knowing how to drag and drop. 
    • When publishing the movie from Windows Movie Maker, select “DVD Quality” encoding which should give you the encoded video in CBR format.

Video playback

  • You shouldn’t have to call Video.GetTexture more than once per frame. The video stream decoder runs on a separate thread and handles synchronization with the audio track. Calling GetTexture always returns the last fully decoded frame. If a new frame is not quite ready it returns without doing anything but you still incur that managed to native call penalty.
  • If you want to show the same video on multiple screens in your game, just get the current video frame once and use it multiple times in your drawing code. This will ensure that all the screens show perfectly synchronized playback. If you call GetTexture multiple times there’s a chance that the frame can update in between two calls and the screens will look out of sync.
  • Playback of multiple videos is supported but playing back multiple high-res videos may not be such a great idea. Decoding video streams is expensive and the cost goes up quickly with the resolution of the source content.