LGX1972·大∵熊

微信号:lgx1972_9Y

博客生活 首页 新随笔 联系 聚合 管理
  96 Posts :: 1 Stories :: 619 Comments :: 1 Trackbacks

以下是我在微软中文技术社区上跟网友的对话,来解答该问题:

 

菜鸟程序员(问) 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()

 

posted on 2006-06-07 09:24 LGX1972·大∵熊 阅读(1788) 评论(0)  编辑  收藏 所属分类: 编程相关