visual| Video Playback
Many people first contact with DirectX is through the game, as for installation, upgrade DirectX is nothing more than to meet the needs of game operation. Direct x is actually a library of Windows platform Multimedia API functions, which provides a standard interface to interact with graphics cards, sound cards, input devices, and so on. Without this set of standard API libraries, you would need to write different code for each video card, for each combination of sound cards, and for each type of keyboard, mouse, and joystick. This is not back to the previous DOS era. To solve this problem, Microsoft has launched DirectX. DirectX abstracts from specific hardware and converts a set of generic instructions to specific commands for hardware. In this way, the development language can manipulate each video card, each combination of sound card and each type of keyboard, mouse and joystick, by invoking the unified standard Direct X function library.
I. Direct X SDK 9.0 Installation and Class Library introduction:
The. Net FrameWork SDK does not contain the direct X SDK, so for the sake of completing the following article,
You must first download and install the direct X SDK. The specific download address is: Http://download.microsoft.com/download/a/c/d/acdfb557-266f-4af4-8673-6ab8009b4ddd/dxsdk_apr2005.exe. This version is the English version of the 20,054 month launch. This does not prevent the following programs from being implemented. After you install Direct X, there is a directory with "C:\WINDOWS\Microsoft.NET\Managed DirectX" in which there should be nine DLL files and nine XML files in the directory. Nine DLL files roughly correspond to the 10 namespaces in DirectX. In programming, you use the namespaces to provide support for input devices, sounds, network playback, graphics, and so on. The namespace defined in Direct X SDK 9.0 and its primary role are detailed as shown in table 01:
Name space |
Describe |
Microsoft.directx |
Public classes and mathematical structures |
Microsoft.DirectX.Direct3D |
3D Graphics and helper libraries |
Microsoft.DirectX.DirectDraw |
Direct Draw Graphics API. This is a legacy namespace and you don't need to use it now. |
Microsoft.DirectX.DirectPlay |
Network APIs for multiplayer games |
Microsoft.DirectX.DirectSound |
Voice support |
Microsoft.DirectX.DirectInput |
Input device support (for example, mouse and joystick) |
Microsoft.DirectX.AudioVideoPlayback |
Play video and audio (for example, play the respective video animation files on your computer) |
Microsoft.DirectX.Diagnostics |
Troubleshoot |
Microsoft.DirectX.Security |
Access security |
Microsoft.DirectX.Security.Permissions |
Access security permissions |
Table 01:direct the defined namespaces in X SDK9.0 and their primary role
Direct x is very informative, and this is just one of the small applications that uses Visual C # to invoke the SDK in direct X to play a video file as an example, using only namespaces in the program Microsoft.DirectX.AudioVideoPlayback ". Three classes are defined in the Microsoft.DirectX.AudioVideoPlayback namespace: "Audio", "video" and "Texturerendereventargs". The first two classes are the most common and are used to support audio and video, respectively. The common properties defined in the Microsoft.DirectX.AudioVideoPlayback namespace and their specific effects are shown in table 02:
Property |
Describe |
Audio |
Gets the audio object in the video file that can be used for subsequent audio playback |
Caption |
Gets or sets the name of the video to play on the form |
CurrentPosition |
Gets or sets the current location of the playback video |
DefaultSize |
Get the default video size to play video |
Fullscreen |
Gets or sets whether the video file plays in Full-screen mode |
Iscursorhidden |
Gets the state of the mouse when the video is played: hidden or displayed |
Owner |
Gets or sets the host component for video playback |
Paused |
Gets whether the current playback state is paused |
Playing |
Gets whether the current playback state is playing. |
Seekingcaps |
Gets whether performance can be searched |
Size |
Retrieves and sets the size of the for playback. |
State |
Get the current playback status |
Stopped |
Gets whether the current playback state is in a stopped state |
Stopposition |
Gets the stop playback location of the video that is playing |
Table 02:microsoft.directx.audiovideoplayback Common attributes defined in namespaces and their specific functions
The common methods defined in Microsoft.DirectX.AudioVideoPlayback namespaces and their specific effects are shown in table 03:
Method |
Describe |
Hidecursor |
Hide the mouse that is currently playing video |
Open |
Load a new file into a video object |
Pause |
Set to suspend playback status. |
Play |
Set to playback status |
Seekcurrentposition |
The search goes to the established playback location |
Seekstopposition |
To set a new stop position |
ShowCursor |
Displays the mouse that currently plays the video |
Stop |
Set to stop playback status |
Video |
Initializes a new video instance |
Table 03:microsoft.directx.audiovideoplayback Common attributes defined in namespaces and their specific functions
With these basics in the background, let's begin by introducing the specific implementation of Visual C # calling Direct X to play video files.
two. The program design, commissioning and operation Environment of this article:
(1) Microsoft company Windows 2003 Chinese Enterprise Edition.
(2). Visual Studio. NET 2003 Enterprise build,. NET FrameWork SDK 1.1 version number 4322.
Three Visual C # implements video playback using Direct X
Visual C # uses direct X to achieve video playback difficulties in the following points:
1. Master the method of introducing the Dirext x function library in Visual C #.
2. Set the host component for direct X video playback.
3. Basic Playback Command settings: Play, stop, pause, etc.
Here's how Visual C # implements video playback with Direct x:
1. Start visual Studio. Net.
2. When you select the menu "file" | "new" | "Project", The New Project dialog box pops up.
3. Set the project type to Visual C # project.
4. Set the template to Windows application.
5. In the Name text box, enter use DriectX in Visual C # to implement media playback.
6. Enter the E:\VS in the text box in the location. NET project, and then click the OK button. So in "E:\VS." NET project directory, you create a folder called "Media playback using DriectX in Visual C #" that contains all of the files in the Visual C # use DRIECTX for media playback project.
7. Select Solution Manager | references, right-click, and select the Add Reference menu, as shown in Figure 01:
Figure 01: Adding a reference |
8. After selecting the Add Reference menu, pop-up the Add Reference dialog box, as shown in Figure 02, in the Selected Components column, after adding "Microsoft.DirectX.AudioVideoPlayback", click "OK" button, reference " Microsoft.DirectX.AudioVideoPlayback "file succeeded. This is because visual Studio. NET, there is no "Microsoft.DirectX.AudioVideoPlayback.dll" file in the default compilation environment, and the "Microsoft.DirectX.AudioVideoPlayback" namespace is used in the program. So to refer to the file where "Microsoft.DirectX.AudioVideoPlayback" is located in the compilation environment.
9. Take visual Studio. NET to the Form1.cs window, and from the Windows Forms Components tab in the Toolbox, drag the following components into the design form and perform the appropriate actions:
A OpenFileDialog component that selects the video to play; a panel component that acts as the host component of the video playback, and four button buttons that perform video opening, playback, pausing, and stopping operations, respectively. And when these four components are dragged into the design window and double-click them respectively, the system will produce the processing code for the four component click events in Form1.cs respectively.
10. Take visual Studio. NET's current window switches to the Form1.cs Code editing window, and in Form1.cs's header, the code area that introduces the namespace, replaces the introduction of the namespace code automatically generated by the system in Form1.cs with the following code:
Using System; Using System.Drawing; Using System.Collections; Using System.ComponentModel; Using System.Windows.Forms; Using System.Data; Using Microsoft.DirectX.AudioVideoPlayback; Direct X namespace to be used for introducing video playback |
11. Add the following code in the code area of the Form1.cs class, the following code is a video instance that creates a global use:
Private video myvideo = null; Create a video instance |
12. Replace the system-generated InitializeComponent process with the following code. The following code initializes and defines the click events and Form1 load events for the components that are joined to the form, as well as the global variables created, for four button components:
private void InitializeComponent () { This.panel1 = new System.Windows.Forms.Panel (); This.button1 = new System.Windows.Forms.Button (); This.button2 = new System.Windows.Forms.Button (); This.button3 = new System.Windows.Forms.Button (); This.button4 = new System.Windows.Forms.Button (); This.openfiledialog1 = new System.Windows.Forms.OpenFileDialog (); This. SuspendLayout (); This.panel1.Dock = System.Windows.Forms.DockStyle.Top; This.panel1.Location = new System.Drawing.Point (0, 0); This.panel1.Name = "Panel1"; This.panel1.Size = new System.Drawing.Size (540, 346); This.panel1.TabIndex = 0; This.button1.Location = new System.Drawing.Point (62, 380); This.button1.Name = "Button1"; This.button1.Size = new System.Drawing.Size (80, 38); This.button1.TabIndex = 1; This.button1.Text = "open"; This.button1.Click + = new System.EventHandler (This.button1_click); This.button2.Location = new System.Drawing.Point (165, 380); This.button2.Name = "Button2"; This.button2.Size = new System.Drawing.Size (81, 38); This.button2.TabIndex = 1; This.button2.Text = "Play"; This.button2.Click + = new System.EventHandler (This.button2_click); This.button3.Location = new System.Drawing.Point (268, 380); This.button3.Name = "Button3"; This.button3.Size = new System.Drawing.Size (80, 38); This.button3.TabIndex = 1; This.button3.Text = "Pause"; This.button3.Click + = new System.EventHandler (This.button3_click); This.button4.Location = new System.Drawing.Point (371, 380); This.button4.Name = "Button4"; This.button4.Size = new System.Drawing.Size (81, 38); This.button4.TabIndex = 1; This.button4.Text = "Stop"; This.button4.Click + = new System.EventHandler (This.button4_click); THIS.OPENFILEDIALOG1.DEFAULTEXT = "avi"; This.openFileDialog1.Filter = "Video file |*.avi| |"; This.openFileDialog1.Title = "Please choose to play AVI file"; This. AutoScaleBaseSize = new System.Drawing.Size (6, 14); This. ClientSize = new System.Drawing.Size (540, 461); This. Controls.Add (This.button1); This. Controls.Add (THIS.PANEL1); This. Controls.Add (This.button2); This. Controls.Add (This.button3); This. Controls.Add (THIS.BUTTON4); This. FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; This. MaximizeBox = false; This. Name = "Form1"; This. Text = "Use DriectX to achieve media playback in Visual C #"; This. Load + = new System.EventHandler (this. Form1_Load); This. ResumeLayout (FALSE); } |
The preliminary work on the interface design and function realization of the project using DRIECTX for media playback in Visual C # is complete, as shown in Figure 03 of the Design interface:
Figure 03: Interface Design for the project "media playback using DriectX in Visual C #" |
13. Replace the processing code for the Click event of the Button1 component in Form1.cs with the following code, which is the function of opening the selected video file and displaying the first frame on the defined Panel component:
private void Button1_Click (object sender, System.EventArgs e) { Openfiledialog1.initialdirectory = Application.startuppath; if (openfiledialog1.showdialog () = = DialogResult.OK) { Record the size of a panel component int height = Panel1. Height; int width = Panel1. Width; If there is an open video file, release it if (Myvideo!= null) { Myvideo.dispose (); } Open a new video file Myvideo = new Video (openfiledialog1.filename); Assign the video file to the panel component you created Myvideo.owner = Panel1; Redefined by the size of the recorded panel component Panel1. width = width; Panel1. Height = height; Play the first frame of an AVI file, mainly to display in a panel Myvideo.play (); Myvideo.pause (); } To determine the status of each button in a form if (Myvideo = null) { Button2. Enabled = false; Button3. Enabled = false; Button4. Enabled = false; } Else { Button2. Enabled = true; Button3. Enabled = true; Button4. Enabled = true; } } |
14. Replace the processing code for the Click event of the Button2 component in Form1.cs with the following code to play the currently open video file:
private void Button2_Click (object sender, System.EventArgs e) { if (Myvideo!= null) { Myvideo.play (); } } |
15. Replace the processing code for the Click event of the Button3 component in Form1.cs with the following code, which pauses playback of the currently open video file:
private void Button3_Click (object sender, System.EventArgs e) { if (Myvideo!= null) { Myvideo.pause (); } } |
16. Replace the processing code for the Click event of the Button4 component in Form1.cs with the following code, and the following code stops playing the currently open video file:
private void Button4_Click (object sender, System.EventArgs e) { if (Myvideo!= null) { Myvideo.stop (); } } |
17. After the click event of the Button4, add the following code, which is the ability to initialize the button component of the form form:
Initialize the status of each button in a form private void Form1_Load (object sender, System.EventArgs e) { if (Myvideo = null) { Button2. Enabled = false; Button3. Enabled = false; Button4. Enabled = false; } Else { Button2. Enabled = true; Button3. Enabled = true; Button4. Enabled = true; } } |
18. At this point, all of the work on the "use DriectX for media playback in Visual C #" project is complete after the steps are completed correctly and saved. When you click the shortcut "F5" to run the program, figure 04 is the program run interface that you get when you play the video file:
Figure 04: The running interface of the project "using DRIECTX to implement media playback in Visual C #" |
Four. Summary:
The advent of direct X did solve many of the programmer's low-level work, handing the work of the various tumultuous hardware to direct X. Although Direct X has evolved from an unmanaged version to a current managed version, the controversy persists, but more and more developers are developing their software with managed Direct X or using managed and unmanaged direct X in combination, as well as proving the viability of managed Direct X from another aspect. This article combines an example to specifically describe how Visual C # calls unmanaged Direct X to implement video playback, which is just one small application for managed Direct X. Finally, I hope this article will help friends who want to learn about calling Direct X to write a game program in Visual C #.