没做过.但你这没载体啊
this.Controls.Add(m),看看;

解决方案 »

  1.   

    用DirectShow
    WMPLib不行只能播放声音的
      

  2.   

    以下是我以前做过的预研文档DirectShow组件在“C:\windows\system32”目录下的Quartz.dll动态库中,要使C#代码引用COM对象和接口,必须将COM类型库转换为.NET框架元数据,从而有效地创建一个可以从任何托管语言调用的托管包装。
    在转换过程中需要使用FrameWork SDK自带的TlbImp.exe命令工具,该命令工具在“D:\vs2005\SDK\v2.0\Bin”目录下(取决于Visual Studio 2005的安装路径)。
    该命令的使用方法为: 
    TlbImp "C:\WINDOWS\system32\quartz.dll" /out:”D:\DirectShow.dll” 如图:在工程中引用“D:\DirectShow.dll”;
    再利用DirectShow.FilgraphManagerClass类进行操作;
    以下是DirectShow接口说明:
     
    接口名称 说明    
    IFilterGraph 过滤通道接口    
    IFilterGraph2 增强的IfilterGraph    
    IGraphBuilder 最为重用的COM接口,用于手动或者自动构造过滤通道Filter Graph Manager    
    IMediaControl 用来控制流媒体(如流的启动和停止暂停等)播放控制接口    
    IMediaEvent 播放事件接口,该接口在FilterGraph发生一些事件时用来创建事件的标志信息并传送给应用程序    
    IMediaEventEx 扩展播放事件窗口    
    IMediaPosition 播放的位置和速度控制接口(控制播放放置只能为设置时间控制方式)    
    IMediaSeeking 另一个播放的位置和播放速度控制接口,在位置选择方面功能较强,设置播放格式。常用的控制播放方式有:TIME_FORMAT_MEDIA_TIME单位100纳秒;TIME_FORMAT_FRAME按帧播放    
    IBasicAudio 声音控制接口    
    IBasicVideo 图像控制接口(波特率,宽度,长度等信息)    
    IVideoWindow 显示窗口控制接口(有关播放窗口的一切控制,包括caption显示,窗口位置控制等)    
    ISampleGrabber 捕获图像接口(可用于抓图控制)    
    IVideoFrameStep 控制单帧播放的接口  最后释放接口。
    开发人员在调式播放器的时候切勿在播放媒体文件过程中点击VS中的停止调试,这样的话会释放不了接口,会导致下次无法播放。
      

  3.   

    /// <summary>
        /// 提供 Mp3,Mp4 播放的类
        /// </summary>
        public class MediaPlayer
        {
            private const int WM_GRAPHNOTIFY = 0x00008001;
            private const int WS_CHILD = 0x40000000;
            private const int WS_CLIPCHILDREN = 0x02000000;
            private const int WS_CLIPSIBLINGS = 0x04000000;        public event EventHandler EndPlayEvent;        #region 局部变量
            private FilgraphManagerClass m_FMC;
            private IntPtr m_HWND;
            private Timer m_Timer;
            private bool m_IsVideo;
            #endregion        #region PlayState
            public enum PlayState
            {
                Stopped,
                Paused,
                Running
            };
            #endregion        #region OABool
            /// <summary>
            /// From #define OATRUE/OAFALSE,
            /// bools in .NET use 1, not -1
            /// </summary>
            public enum OABool
            {
                /// <summary>
                /// Value = 0
                /// </summary>
                False = 0,
                /// <summary>
                /// Value = -1
                /// </summary>
                True = -1
            }
            #endregion        #region WindowStyle
            /// <summary>
            /// From WS_* defines
            /// </summary>
            [Flags]
            public enum WindowStyle
            {
                Overlapped = 0x00000000,
                Popup = unchecked((int)0x80000000), // enum can't be uint for VB
                Child = 0x40000000,
                Minimize = 0x20000000,
                Visible = 0x10000000,
                Disabled = 0x08000000,
                ClipSiblings = 0x04000000,
                ClipChildren = 0x02000000,
                Maximize = 0x01000000,
                Caption = 0x00C00000,
                Border = 0x00800000,
                DlgFrame = 0x00400000,
                VScroll = 0x00200000,
                HScroll = 0x00100000,
                SysMenu = 0x00080000,
                ThickFrame = 0x00040000,
                Group = 0x00020000,
                TabStop = 0x00010000,
                MinimizeBox = 0x00020000,
                MaximizeBox = 0x00010000
            }
            #endregion        //属性        #region Rate
            /// <summary>
            /// 获取或设置播放速度(部分媒体文件会不支持)
            /// </summary>
            public double Rate
            {
                get
                {
                    return this.m_FMC.Rate;
                }
                set
                {
                    this.m_FMC.Rate = value;
                }
            }
            #endregion        #region Volume
            /// <summary>
            /// 获取或设置音量,范围( 最小值:-10000,最大值:0 )
            /// </summary>
            public int Volume
            {
                get
                {
                    return this.m_FMC.Volume;
                }
                set
                {
                    this.m_FMC.Volume = value;
                }
            }
            #endregion        #region State
            /// <summary>
            /// 获取当前播放状态
            /// </summary>
            public PlayState State
            {
                get
                {
                    try
                    {
                        int state;
                        //获取状态
                        this.m_FMC.GetState(1000, out state);
                        
                        switch (state)
                        {
                            case 0:
                                return PlayState.Stopped;
                            case 1:
                                return PlayState.Paused;
                            case 2:
                                return PlayState.Running;
                            default:
                                throw new Exception("unknown state!");                           
                        }
                    }
                    catch (Exception)
                    {
                        return PlayState.Stopped;
                    }
                }
            }
            #endregion        #region FullScreen
            /// <summary>
            /// 获取或设置窗口是否全屏播放
            /// </summary>
            public OABool FullScreen
            {
                get
                {
                    return (OABool)this.m_FMC.FullScreenMode;
                }
                set
                {
                    if (m_IsVideo)  //0x8004023a
                        this.m_FMC.FullScreenMode = (int)value;
                }
            }
            #endregion        #region CurrentPosition
            /// <summary>
            /// 获取或设置当前播放位置
            /// </summary>
            public double CurrentPosition
            {
                get
                {
                   return this.m_FMC.CurrentPosition;
                }
                set
                {
                  this.m_FMC.CurrentPosition = value;               
                }
            }
            #endregion        #region Duration
            /// <summary>
            /// 获取或设置当前媒体文件的持续时间
            /// </summary>
            public double Duration
            {
                get
                {
                    return this.m_FMC.Duration;               
                }
            }
            #endregion        #region HWND
            /// <summary>
            /// 获取或设置播放窗口句柄
            /// </summary>
            public IntPtr HWND
            {
                get { return m_HWND; }
                set { m_HWND = value; }
            }
            #endregion        /// <summary>
            /// 构造函数
            /// </summary>
            public MediaPlayer()
            {
                this.m_IsVideo = false;           
                this.m_Timer = new Timer(new TimerCallback(m_Timer_Callback), null, Timeout.Infinite, 100);
            }        #region m_Timer_Callback
            private void m_Timer_Callback(object state)
            {
                if (this.CurrentPosition == this.Duration)
                {
                    this.Stop();
                }
            }
            #endregion        #region Play
            /// <summary>
            /// 播放
            /// </summary>
            public void Play()
            {
                this.m_FMC.Run();         
                this.m_Timer.Change(0, 500);
            }
            #endregion        #region Open
            /// <summary>
            /// 打开
            /// </summary>
            /// <param name="bstrFileName">文件路径</param>
            public void Open(string bstrFileName)
            {
                this.m_FMC = new FilgraphManagerClass();            this.m_FMC.RenderFile(bstrFileName);            this.m_FMC.NotifyOwnerMessage((int)this.HWND, WM_GRAPHNOTIFY, 0, 0);
            }
            #endregion        #region Pause
            /// <summary>
            /// 暂停
            /// </summary>
            public void Pause()
            {
                if (this.State == PlayState.Running)
                {
                    this.m_Timer.Change(-1, -1);
                    this.m_FMC.Pause();
                }
            }
            #endregion        #region Stop
            /// <summary>
            /// 停止
            /// </summary>
            public void Stop()
            {
                this.m_Timer.Change(-1, -1);            this.m_IsVideo = false;                                  if (this.FullScreen == OABool.True)
                {
                    this.FullScreen = OABool.False;
                }            this.m_FMC.Stop();
                
                this.m_FMC = null;            GC.Collect();            if (EndPlayEvent != null)
                {
                    this.EndPlayEvent(this, EventArgs.Empty);
                }
            }
            #endregion        #region SetWindowPosition
            /// <summary>
            /// 设置视频播放窗口大小位置
            /// </summary>
            /// <param name="left"></param>
            /// <param name="top"></param>
            /// <param name="width"></param>
            /// <param name="height"></param>
            public void SetWindowPosition(int left, int top, int width, int height)
            {
                try
                {
                    this.m_FMC.Owner = (int)this.m_HWND;                this.m_IsVideo = true;                //设置视频播放窗口类型
                    this.m_FMC.WindowStyle = (int)(WindowStyle.Child | WindowStyle.ClipSiblings | WindowStyle.ClipChildren);                this.m_FMC.SetWindowPosition(left, top, width, height);
                }
                catch
                {             }
            }
            #endregion       
        }