Blue Theme Orange Theme Green Theme Red Theme
 
Home | Forums | Videos | Photos | Downloads | Blogs | E-Books | Interviews | Jobs | Beginners | Training
 | Consulting  
Submit an Article Submit a Blog 
 Login Close
User Id:
Password:
 
Forgot Password
Forgot Username
Why Register
 Jump to
Skip Navigation Links
TechnologyExpand Technology
WebsiteExpand Website
World Class ASP.NET Hosting - 3 Month Free Hosting, Click Here!
 Resources  
Close
 Our Network  
Close
Search :       Advanced Search »
Home » DirectX » Playing AVI Files using DirectX 9 with C# and .NET

Playing AVI Files using DirectX 9 with C# and .NET

Ever wonder how to play videos in .NET? This article will show you how to use the managed DirectX 9 Video class to play avi video files.

Author Rank:
Technologies: Windows Forms,Visual C# .NET
Total downloads : 6433
Total page views :  178463
Rating :
 4.75/5
This article has been rated :  20 times
   Print Read/Post comments Post a comment  Rate  
   Email to a friend  Bookmark  Similar Articles  Author's other articles  
Download Files:
AVIPlayer.ZIP
 
Become a Sponsor


Related EbooksTop Videos

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 a 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.

/// <summary>
/// opens a video from an avi file
/// and plays the first frame inside the panel
/// </summary>
void OpenVideo()
{
openFileDialog1.InitialDirectory = Application.StartupPath;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
// open the video
// remember the original dimensions of the panel
int height = videoPanel.Height;
int width = videoPanel.Width; 
// dispose of the old video to clean up resources
if (_video != null)
{
_video.Dispose();
}
// open a new video
_video = new Video(openFileDialog1.FileName);
// assign the win form control that will contain the video
_video.Owner = videoPanel;
// resize to fit in the panel
videoPanel.Width = width;
videoPanel.Height = height;
// play the first frame of the video so we can identify it
_video.Play();
_video.Pause();
}
// enable video buttons
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 .

/// <summary>
/// Plays the video
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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.


Login to add your contents and source code to this article
 [Top] Rate this article
 About the author
 
Mike Gold
Michael Gold is President of Microgold Software Inc., makers of the WithClass UML Tool. His company is a Microsoft VBA Partner and Borland Partner. Mike is a Microsoft MVP and founding member of C# Corner. He has a BSEE and MEng EE from Cornell University and has consulted for Chase Manhattan Bank, JP Morgan, Merrill Lynch, and Charles Schwab. Currently he is a senior developer at Finisar Corp. He has been involved in several .NET book projects, and is currently working on a book for using .NET with embedded systems. He can be reached at mike@c-sharpcorner.com
Looking for C# Consulting?
C# Consulting is founded in 2002 by the founders of C# Corner. Unlike a traditional consulting company, our consultants are well-known experts in .NET and many of them are MVPs, authors, and trainers. We specialize in Microsoft .NET development and utilize Agile Development and Extreme Programming practices to provide fast pace quick turnaround results. Our software development model is a mix of Agile Development, traditional SDLC, and Waterfall models.
Click here to learn more about C# Consulting.
 
Introducing MaxV - one click. infinite control. Hyper-V Hosting from MaximumASP.
Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
Dynamic PDF
ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications.
Go.NET
Build custom interactive diagrams, network, workflow editors, flowcharts, or software design tools. Includes many predefined kinds of nodes, links, and basic shapes. Supports layers, scrolling, zooming, selection, drag-and-drop, clipboard, in-place editing, tooltips, grids, printing, overview window, palette. 100% implemented in C# as a managed .NET Control. Document/View/Tool architecture with many properties&events. Optional automatic layout.
Dundas Software
Dundas Chart for .NET is the most advanced .NET charting package available today.  With an extremely complete feature set, elegant architecture and easy implementation, Dundas Chart can quickly add advanced Charting functionality to enhance and transform ASP.NET and Windows Forms applications.  Whether you are implementing charting into internal projects, or building applications for clients, Dundas Chart offers advanced technology and advanced results to get the most out of data.
Clickatell's SMS Gateway
Clickatell's Developer Solutions allow you to SMS enable any website or application via a range of API's. Learn More about our API connections.
Free access to .NET Memory Management video
Everything you need to know about Garbage Collection, Temporary Objects, Fragmentation, Finalization and common causes of memory leaks in .NET. Watch the video here.
Microsoft Visual Studio 2010
Microsoft Visual Studio 2010 offers more to developers than any other Visual Studio release. Work more productively and collaboratively-with greater control over your work at every step. The Beta 2 can give you a head start on achieving efficiency.
 
   Print Read/Post comments Post a comment  Rate  
   Email to a friend  Bookmark  Similar Articles  Author's other articles  
Download Files:
AVIPlayer.ZIP
 
 Post a Feedback, Comment, or Question about this article
Subject:  
Comment:  
Become a Sponsor
 Comments
Nice article by Mahesh On November 30, 2005
Nice article Mike. Hope you enjoyed Ausie vacation.
Reply | Email | Delete | Modify | 
Re: Nice article by Wu On April 7, 2007
After running the row '_video = new Video(openFileDialog1.FileName)',the value of _video is still null.Why?

Hope this help,thank you!

Reply | Email | Delete | Modify | 
Re: Re: Nice article by Robert On April 25, 2007
I'm getting the same problem with null!
Reply | Email | Delete | Modify | 
Re: Re: Nice article by Shafqat On May 21, 2007

sir,

plz send me solution of the problem._video=null

Reply | Email | Delete | Modify | 
MDAs!! by Ozz On December 17, 2005

I think, i can help,

From the Debug menue, find the exceptions,

The under Managed exception, Remove the LoaderLock exception, this will prevent that exception...

 

Hope this help

Reply | Email | Delete | Modify | 
is it possible to record? by francis On December 30, 2005

nice article.....but i have a question.

Does this applicable to recording videos??

If yes, can give sample code???

~Thank You~

Reply | Email | Delete | Modify | 
Help Me ... F1 i want a country code files by Mona On December 31, 2005

Hello;

After reading your article about playing AVI using c#.net and DX9.

I want to know if there are any calsses or dlls using c#.net and DX9 (direct show) help me to "convert videos from any codec format to MPEG1 and MPEG2 formats?!!!"

waiting from you reply because i got sick searching about that topic.

thanks alot for your help.

Reply | Email | Delete | Modify | 
'System.Security.SecurityException' by kit On April 13, 2006

if i build the solution and run on my computer (with Microsoft Visual Studio 2005 + DirectX 9 SDK installed), the application is running fine. however, if i run on other computers (without Microsoft Visual Studio 2005 + DirectX 9 SDK installed), there is a lot of error. for the DirectX 9 issue, i think i already fixed it by setting the DirectX Reference's 'Copy Local' to True. however, there is another error

'An unhandled exception of type 'System.Security.SecurityException' occurred in mscorlib.dll

Additional information: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.'

could anyone help?

 

Reply | Email | Delete | Modify | 
Re: 'System.Security.SecurityException' by Sergio On March 12, 2008
Hello i´m Sergio, i have a question concerned to the library of DirectX SDK to make a player, Did you solve the problem with Security.SystemSecurity... that you got when tried to run the app on a computer without DirectX SDK? Thank you very much. Regards
Reply | Email | Delete | Modify | 
Web Browser by Vaibhav On April 21, 2006

Hello...

Can I use the same code to play a video on a Web Browser. Can u please tell me how?

 

Vicky.. :-)

Reply | Email | Delete | Modify | 
Getting image data by Joerg On August 7, 2006

Hello,

thanks for the article. However, I do wonder. How do I reach the image data itself? I have to do some image processing on avi files. Thus, I need more than a movie viewer.

Is there any possibility to get the rgb-data using this library?

The hints would help me a lot.

 

Thanks

Reply | Email | Delete | Modify | 
strange null problem by kf On October 2, 2006
Hi,
I read your artical and tried the code and on one computer everything workout just fine and on another computer 2 windows opened. what happend is when it get to the part : owner = panel it's like nothing happans the onwer stays null after it and that why 2 windows were opened, one is the program and one is the video running.
why? I couldn't found what was wrong on this computer and the other computer it worked fine???
goldmank
Reply | Email | Delete | Modify | 
Needed Help by Ashish On February 15, 2007
can the above application can be used to play video file using browser. will be greatfull if u reply me back on caveatashish@gmail.com
Reply | Email | Delete | Modify | 
Hope your help by Wu On April 7, 2007
After running the row--_video = new Video(openFileDialog1.FileName),the value of _video is still null,it means that I can't open a new video,Why?? Hope your help,thank you!
Reply | Email | Delete | Modify | 
Capture AVI Frame by Aaron On April 15, 2007
Your article really helped me a lot. I have a question, is it also possible to capture frames while that avi file is playing? if so, can you point me to the right direction. I also need to save the frame into a bitmap file. Thanks! :)
Reply | Email | Delete | Modify | 
_video by Robert On April 25, 2007
how come there is an underscore? Surely video is a valid identifier?
Reply | Email | Delete | Modify | 
where do you place Video myVideo= new Video(...)? by Robert On April 25, 2007
I can't get this to work at all! If you place the Video object at class level, you obviously can't have it in any event handlers! If you place it in an event handler it is only visible in that method and then you cant' use the Play() etc methods in other event handlers as they won't be visible! Can someone please resolve this conundrum as the code above does not relate to the event handling structure of a typical Win form application. For instance what is ControlLogic() code???
Reply | Email | Delete | Modify | 
HELP by JAMIE On May 13, 2007
I cant do this in visual basic 2005 express edition, if you can do it in this edition, please help me!
Reply | Email | Delete | Modify | 
problem with the player by Jose Alberto On May 18, 2007
Hi, i have problem with the example, i have VS 2005, I try to open the project but the studio ask me to migrate the version. I do that, the source look good, the project starts but when I try to open a video the debuger says: "LoaderLock was detected Message: DLL 'C:\WINDOWS\assembly\GAC\Microsoft.DirectX\1.0.2902.0__31bf3856ad364e35\Microsoft.DirectX.dll' is attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang. " this happend on line _video = new Video(openFileDialog1.FileName); The Path is ok, the file too. Someone can help with that?
Reply | Email | Delete | Modify | 
Re: problem with the player by Sadoveac On September 12, 2008
same problem. can someone help us ?
Reply | Email | Delete | Modify | 
Re: Re: problem with the player by Robert On January 12, 2009
You have to Build an exe file and run it outside of the Visual Studio IDE. Hope this helps.
Reply | Email | Delete | Modify | 
Re: Re: Re: problem with the player by ricardo On February 11, 2009
This is a warning message from Visual Studio, trying to prevent us from creating a buggy application.  I had the same error, and after browsing the Net, I found this article:
    http://www.codeproject.com/KB/directx/DirectX9_media_playback.aspx

If you ignore the warning message and press F5 (continue debugging) in Visual C#, it will display the video (at least in my computer), but IMHO I recommend to read the mentioned article in order to create a robust media application.

Ricardo
Reply | Email | Delete | Modify | 
Transmission over LAN of avi file by shiza On August 15, 2007
Nice work but would u like to tell how I can transmit any video file from server to Client but in .NET Remoting Environment
Reply | Email | Delete | Modify | 
Seeker Bar & Play List Feature by Joan Paolo On August 25, 2007
Hello, Nice program. I wonder if you can help me include a Seek Bar in the Video Player, so the user can skip to the last part of the video. I also woud like to create a Playlist in a Listbox to the right, so it will play each file every time one ends. And be able to play the file selected in the playlist. Another thing, is there an easy way to display the current time of the video in a label? Anything you can help I'd be obliged.
Reply | Email | Delete | Modify | 
Seeker Bar & Play List Feature by Joan Paolo On August 25, 2007
Hello, Nice program. I wonder if you can help me include a Seek Bar in the Video Player, so the user can skip to the last part of the video. I also woud like to create a Playlist in a Listbox to the right, so it will play each file every time one ends. And be able to play the file selected in the playlist. Another thing, is there an easy way to display the current time of the video in a label? Anything you can help I'd be obliged.
Reply | Email | Delete | Modify | 
will this code in .NET 2.0 by Bidhan On September 6, 2007
will this code in .NET 2.0 thanks for the code.it was owsome
Reply | Email | Delete | Modify | 
Nice article... by chandrashekar On November 27, 2007
i am able to do Fullscreen but not able to come back to Orginal video mode. can u help me the code that i tried is .... private void NewPlayer_MouseDoubleClick(object sender, MouseEventArgs e) { if (vd != null) { if (vd.Fullscreen == true) { vd.Fullscreen = false; } else { vd.Fullscreen = true; vd.ShowCursor(); } } } //NewPlayer is Form pls help me out.. thank u..
Reply | Email | Delete | Modify | 
Nice article... by chandrashekar On November 27, 2007
i am able to do Fullscreen but not able to come back to Orginal video mode. can u help me the code that i tried is .... private void NewPlayer_MouseDoubleClick(object sender, MouseEventArgs e) { if (vd != null) { if (vd.Fullscreen == true) { vd.Fullscreen = false; } else { vd.Fullscreen = true; vd.ShowCursor(); } } } //NewPlayer is Form pls help me out.. thank u..
Reply | Email | Delete | Modify | 
Nice article... by chandrashekar On November 27, 2007
i am able to do Fullscreen but not able to come back to Orginal video mode. can u help me the code that i tried is .... private void NewPlayer_MouseDoubleClick(object sender, MouseEventArgs e) { if (vd != null) { if (vd.Fullscreen == true) { vd.Fullscreen = false; } else { vd.Fullscreen = true; vd.ShowCursor(); } } } //NewPlayer is Form pls help me out.. thank u..
Reply | Email | Delete | Modify | 
Help Help Help by Ron On December 1, 2007
I have never used the using statement before and I don't know where to put it. I keep getting compile errors. Does it go inside the form? Can someone give me an example of how and where to put this statement? Please Public Class Form2 End Class
Reply | Email | Delete | Modify | 
Re: Help Help Help by Robert On January 12, 2009
If you are coding in Visual Basic you cant use the Using statement. Yo have to use the Imports statement like this... Imports System Imports Microsoft.DirectX.AudioVideoPlayback Public Class Form1 'Code goes here End Class
Reply | Email | Delete | Modify | 
Help Help Help by Ron On December 1, 2007
I have never used the using statement before and I don't know where to put it. I keep getting compile errors. Does it go inside the form? Can someone give me an example of how and where to put this statement? Please Public Class Form2 End Class
Reply | Email | Delete | Modify | 
how to get total AVI length in time?? by rajkumar On December 15, 2007
how to get Total time of an AVI movie????
Reply | Email | Delete | Modify | 
Re: how to get total AVI length in time?? by Robert On January 12, 2009
This is my solution in VB. Copy and Paste this...> Private Function GetVideoTime(ByVal vidTime As String) As String 'Set the vars. Dim vHours As Integer = 0 Dim vMinutes As Integer = 0 Dim vSeconds As Integer = 0 'Reset the vars. vHours = Int(video.Duration / 3600) vMinutes = Int((video.Duration - Int(video.Duration / 3600) * 3600) / 60) vSeconds = Int(video.Duration - Int(video.Duration / 60) * 60) 'Set the vars to the ByVal String. vidTime = vHours.ToString() & ":" & vMinutes.ToString() & ":" & vSeconds.ToString() 'Return the ByVal String. Return vidTime End Function Then call it like this when you open your avi file. Copy and Past this---> Dim vTime As String vTime = GetVideoTime(vTime) Then display it in a label like this. Copy and Paste this---> lblTime.Text = vTime Thats all there is to that.
Reply | Email | Delete | Modify | 
Microsoft.DirectX.AudioVideoPlayback for Web Forms? by byran On January 15, 2008
Hi, i'm currently working on streaming video on web forms. So my question is, is it possible to using this library in Web form?
Reply | Email | Delete | Modify | 
Re: Microsoft.DirectX.AudioVideoPlayback for Web Forms? by Mike On January 15, 2008
this control cannot be used on a webform because it is not streaming video to the browser. you'll need a third party component to do this or one of Microsoft's new Silverlight components.
Reply | Email | Delete | Modify | 
Re: Microsoft.DirectX.AudioVideoPlayback for Web Forms? by byran On January 17, 2008
Thanks for the information. Another question, does silverlight supports streaming of video on web browser through a Database connection?
Reply | Email | Delete | Modify | 
Re: Re: Microsoft.DirectX.AudioVideoPlayback for Web Forms? by rani On February 2, 2008
Nice example. Thanq
Reply | Email | Delete | Modify | 
Media files playback by Rex On March 8, 2008
Hi Mike Can you tell me if it is possible to play multiple snippets of video files pre selected through user interface in series seamlessly
Reply | Email | Delete | Modify | 
Re: Media files playback by Batul On May 5, 2009
hi Rex,
I was going thru the post, and i have a similar requirement as yours.
Seeing that your reqt is almost a year back, can u plz tell me if u found a solution to wat you were looking for?
till now, i have only been as far as kknowing that dirextX 9.0 does not have the DirectShow class... which probably provided the reqd functionality....

Waiting for ur response.
Thanks in advance....
Reply | Email | Delete | Modify | 
Great Article by Sergio On March 12, 2008
Great Article, i´m very novice about c# but i´m trying to improve dialy. I have a question, i think someone ask the same but i´m not sure, ¿Is it possible to make an app using this class and run the app on another computer without the DirectX SDK? ¿how? this doubt is killing me. Thank you for all and sorry about my poor english but i´m spanish. Regards
Reply | Email | Delete | Modify | 
Re: Great Article by Mike On March 12, 2008

I think the upside down question mark gave it away <g>. You can deploy this app to another machine, but you also have to distribute the DirectX redistributable from Microsoft.   The good news is it is free and you can download it from:

http://www.microsoft.com/downloads/details.aspx?FamilyID=9226a611-62fe-4f61-aba1-914185249413&displaylang=en

The link above is for directx 9c, however, you'll need to pick the redistributable version that you are working with.

-Mike

Reply | Email | Delete | Modify | 
Can I fit the Webbrowser Control in a Panel by Aqil On October 30, 2008
Is it possible to browse the sites using Web browser control within the Panel. I want that web browser control should be fit in the Panel, there should be no borders of the sites. Like video is playing in small Panel. Thanks...
Reply | Email | Delete | Modify | 
works with many formats by clay On April 4, 2009
I've tried it with AVI, MPEG, and WMV files and no problem. The VIDEO class gives much, but not all, functionality. Good exapmple.
Reply | Email | Delete | Modify | 
BUG by a On October 13, 2009
When you change the volume for a Video object, the "Ending" event handler gets NEVER inkoked...

nag, nag, nag...
Reply | Email | Delete | Modify | 

 Hosted by MaximumASP  |  Found a broken link?  |  Contact Us  |  Terms & conditions  |  Privacy Policy  |  Site Map  |  Suggest an Idea  |  Media Kit
Current Version: 5.2009.6.2
 © 1999 - 2009  Mindcracker LLC. All Rights Reserved