Figure 1 - Kangaroo Hopping Movie
Introduction
Just got back from a three week trip to Australia and all I can say is, "Give me a home among the gum trees." (Australian programmers will get what I'm saying here.). Most people know what a kangaroo looks like, but most haven't seen one up close. Needless to say, they are strange creatures if you are coming from the New York City. Unfortunately, the AVI kangaroo video taken by the digital camera was too large to upload to the site due to the size of the file. In any case, some of you are probably asking yourselves, "Kangaroos or not, how exactly do I play an AVI file in .NET?". This article will show you how by demonstrating the implementation of a WinForm Video Player.
The Player
The Video Player takes advantage of the DirectX AudioVideoPlayback library. This library mindlessly allows you to play videos inside a Video object. The methods of the Video class are very straight forward (e.g. Play, Stop, Pause) and you simply construct the video object with the name of the file (e.g. "roo.avi"). The tables below illustrate some important methods and properties of the Video class.
Method |
Description |
Open(string filename) |
Opens an avi file with the passed parameter path name |
Play |
Plays the video |
Stop |
Stops the video |
Pause |
Pauses the video |
SeekCurrentPosition(double time, SeekPositionFlags) |
Moves to a particular time position in the avi file relative to the SeekPositionFlag. Time is in 1 x 10-7 seconds (or 0.1 microseconds) |
StopWhenReady |
Waits for the video object to be ready for stopping, and stops the video |
Property |
Type |
Description |
Owner |
System.Windows.Forms.Control |
Sets The Window Forms Control that contains the video. |
Fullscreen |
bool |
Sets whether or not the video is shown fullscreen |
Size |
Size |
Sets the size of the video |
Duration |
double |
Gets the time (in seconds) of the full video |
CurrentPosition |
double |
Sets the position of the video |
Audio |
Microsoft.DirectX.AudioVideoPlayback.Audio |
Audio object allows you to control things like the volume, balance and playing of the sound in the video |
Coding
You must have DirectX 9 SDK installed to use the avi playing feature described in this article. You can get this SDK from the Microsoft MSDN site. (Note: It may require an MSDN subscription to get the full SDK, but the redistributable that runs the video is a free download). Once you have the DirectX SDK installed, you can include the Microsoft.DirectX.AudioVideoPlayback assembly as a reference to your project. Just right click on your project References in the Solution Explorer and add the reference as shown below. (If this reference isn't in the .NET assembly list, you probably don't have the DirectX 9 SDK installed):
Figure 2 - Adding the DirectX AudioVideoPlayback Reference
Now you just need to add the using statement in your Form to begin using the Video class:
- using Microsoft.DirectX.AudioVideoPlayback;
So now let's take a look at the implementation of the Video Class. The first step is to construct a Video object with the name of the video file which we retrieve from an OpenFile dialog. We then assign the Video.Owner property to the panel inside our winform. Also we resize the video to fit the original dimensions of the panel. Finally we quickly play and pause the video, in order to see the first frame.
-
-
-
-
- void OpenVideo()
- {
- openFileDialog1.InitialDirectory = Application.StartupPath;
- if (openFileDialog1.ShowDialog() == DialogResult.OK)
- {
-
-
- int height = videoPanel.Height;
- int width = videoPanel.Width;
-
- if (_video != null)
- {
- _video.Dispose();
- }
-
- _video = new Video(openFileDialog1.FileName);
-
- _video.Owner = videoPanel;
-
- videoPanel.Width = width;
- videoPanel.Height = height;
-
- _video.Play();
- _video.Pause();
- }
-
- ControlLogic();
- }
That's really all there is to using the video object. If we want to play the video until the end, we simply call the Play method on the video object.
-
-
-
-
-
- private void btnPlay_Click(object sender, System.EventArgs e)
- {
- if (_video != null)
- {
- _video.Play();
- }
- }
Conclusion
The Video class in the Microsoft.DirectX.AudioVideoPlayback library is a powerful graphics class with a very simple implementation. Using this class, you can create powerful applications that include your favorite movie clips in the common avi format. I suspect it will play other movie formats as well (such as mpeg), however, I haven't tried it. Good luck with this powerful multimedia tool and using it to see sharp videos.