以下是我在微软中文技术社区上跟网友的对话,来解答该问题:
菜鸟程序员(问):
vb.net +directShow
如何开发视频啊
??
高手指教
大家好
,
我使用
windowsmediaplayer
播放器控件
,
但播放占用的
cpu
太高了
,
处理其他的字幕也闪烁
,
经过在本坛询问高人
,
指点使用
directxshow
开发
,
但在网上查询相关技术文章
,
都
vc
的
,
我看不懂啊
,
请高人请点在
vb.net 2005
下如何调用
directxshow
开发视频播放
,
能否提供相关技术文章啊
,
小弟非常感谢啊
!!!
lgx1972(答):
如果对播放器功能要求不太多,建议还是使用
DirectX.AudioVideoPlayback
比较简单直观
首先建议安装
DirectX SDK 9.0(February 2006)
或更新的版本
添加对
Microsoft.DirectX
和
Microsoft.DirectX.AudioVideoPlayback
的引用
'
以下两行在
Public Class Form1
前
Imports Microsoft.DirectX
Imports Microsoft.DirectX.AudioVideoPlayback
'
假设我要播放
"C:\
达芬奇的密码
.AVi"
则:
'
当然你也可以结合文件对话框,选择播放文件
Dim MyVideo as new Video("C:\
达芬奇的密码
.AVi")
接下的的事情
...
我比较懒,你自己去看看并不困难,
MyVideo
有很多属性和方法
你结合其他控件可以实现不少实时功能:
音量控制
/
声道平衡
/
指定播放视频控件
/
控制播放进度
/
控制播放画面大小
....
等等
基本的功能还是很完善的
只要你系统安装的相映的解码器,那么这种方法将可以播放几乎所有的音频和视频文件。
'============
菜鸟程序员
:
我要求的当然不多
,
只希望播放暂停停止
,
能否取得播放进度
,
总长度
他的图像输出
,
是输出在哪里的
?
你说的
directx
我到是装上了
lgx1972:
你要求的功能很好实现
MyVideo.Pause()'
实现暂停
Dim apt As Double = MyVideo.Duration
Me.Text = TimeSpan.FromSeconds(CDbl(apt)).ToString.Substring(0, 8)
'
实现显示要播放文件的时间长度
如果你没有指定输出画面的控件,那么
DirectX
系统将自动为你提供一个窗口
假设你要指定在
PictureBox1
上播放:
MyVideo.Owner = Me.PictureBox1
或指定在其他窗口的控件上播放
MyVideo.Owner = Form2.PictureBox1
开始播放:
MyVideo.Play()
停止播放:
MyVideo.Stop()
哦,还有个播放进度用的是
SeekCurrentPosition
方法,你自己去试试吧,不要怪我太懒啊。
菜鸟程序员
:
他的播放效果跟使用
mediaplayer
控件相比
,
占用资源小点了吗
?
真的非常感谢你啊
!!!!
我正在试着编写代码
,
太感谢你了
!
家在哪
,
要不请你吃饭
!
嘻嘻
lgx1972:
至于占用资源问题,俺没有测试过啊
要请吃饭啊,来厦门,我请你吃大龙虾!
------转帖社区网友补充的----------------------------------------
此处提供四种方法:
1) 使用Microsoft.DirectX.AudioVideoPlayback组件。
首先,需要安装DirectX SDK.
DirectX 9.0c Redistributable
DirectX 9.0 SDK Update
然后将对Microsoft.DirectX.AudioVideoPlayback.dll的引用添加到你的项目。
使用这段代码来在后台播放一个音频文件:
Imports Microsoft.DirectX.AudioVideoPlayback
PublicClass Form1
PrivateSub Form1_Load(ByVal sender As System.Object,ByVal eAs System.EventArgs)HandlesMyBase.Load
Dim audioFileAs Audio =New Audio("D:\MyMusic.mid")
audioFile.Play()
EndSub
EndClass
相关帖子:
http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/caf245b9-a7f9-42b1-9276-f8dfc1e21591/
使用这段代码在Panel控件上放置一个视频文件:
Imports Microsoft.DirectX.AudioVideoPlayback
PublicClass Form1
PrivateSub Form1_Load(ByVal sender As System.Object,ByVal eAs System.EventArgs)HandlesMyBase.Load
Dim videoFileAs Audio =New Audio("D:\Video1.avi")
videoFile.Owner = Panel1
videoFile.Play()
EndSub
EndClass
演示:在C#和.NET中使用DirectX 9播放AVI文件
相关帖子:
http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/439d66c4-056d-4b84-a371-77d225355439/
2) 使用Windows Media Player控件。
右击工具箱->选项 -> COM组件-> 定位并添加 “Windows Media Player” ActiveX控件
然后“Windows Media Player”控件将会出现在工具箱上。将它拖动到窗体上来生产一个AxWindowsMediaPlayer1对象,并为URL属性指定音频或者视频文件。
AxWindowsMediaPlayer1.URL = "D:\VideoOrAudio.wmv"
Media Player控件默认将会自动播放文件。
相关帖子:
http://social.msdn.microsoft.com/forums/en-US/vblanguage/thread/7895f313-e196-4059-8924-2d58a71bb13b/
3) 使用RealPlayer ActiveX控件。
类似地,添加一个COM组件:RealPlayer ActiveX Control Library到工具箱,将其拖动到窗体上来生产一个AxRealAudio1对象,并为Source属性指定音频或者视频文件。
AxRealAudio1.Source ="D:\VideoOrAudio.wmv"
AxRealAudio1.AutoStart =True
相关帖子:
http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/e3fff97d-f6e0-4ac2-b7c9-ccf7cbe7f38c/
4) 使用My.Computer.Audio.Play方法。
这种方法很简单,但只能播放wav文件。
My.Computer.Audio.Play("C:\audio.wav", AudioPlayMode.Background)
My.Computer.Audio.Stop()