转来的代码---播放器

public void RenderMedia(string mediaFileName)
        {
            clearUp();
            try
            {
                objMedia = new FilgraphManager();
                objMedia.RenderFile(mediaFileName);
                volMedia = objMedia as IBasicAudio;
                posMedia = objMedia as IMediaPosition;
                ctlMedia = objMedia as IMediaControl;
                eexMedia = objMedia as IMediaEventEx;
                eexMedia.SetNotifyWindow((int)this.Handle, WM_GRAPHNOTIFY, 0);
                mediaStatus = 1;
                mediaDuration = posMedia.Duration;
                volMedia.Volume = mediaVolum;
                Play();
            }
            catch
            {
                MessageBox.Show("加载文件失败!");
                clearUp();
            }
        }
其中ClearUp用于释放资源
        private void clearUp()
        {
            if (ctlMedia != null)
                ctlMedia.Stop();
            mediaStatus = 1;
            mediaDuration = 0;
            mediaCurPos = 0;
            if (eexMedia != null)
                eexMedia.SetNotifyWindow(0, 0, 0);
            if (ctlMedia != null) ctlMedia = null;
            if (volMedia != null) volMedia = null;
            if (posMedia != null) posMedia = null;
            if (eexMedia != null) eexMedia = null;
            if (objMedia != null) objMedia = null;
        }
基本功能调用代码比较简单
        /// <summary>
        /// 播放
        /// </summary>
        public void Play()
        {
            ctlMedia.Run();
            mediaStatus = 3;
        }
        /// <summary>
        /// 暂停
        /// </summary>
        public void Pause()
        {
            ctlMedia.Pause();
            mediaStatus = 2;
        }
        /// <summary>
        /// 停止
        /// </summary>
        public void Stop()
        {
            ctlMedia.Stop();
            posMedia.CurrentPosition = 0;
            mediaStatus = 1;
        }
        /// <summary>
        /// 搜索
        /// </summary>
        /// <param name="posTar">秒</param>
        public void Seek(int posTar)
        {
            posMedia.CurrentPosition = posTar;
        }
有一点必须注意,播放过程中的窗体消息处理,需要重写WndProc方法。

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_GRAPHNOTIFY)
            {
                int lEventCode;
                int lParam1, lParam2;
                while (true)
                {
                    try
                    {
                        eexMedia.GetEvent(out lEventCode, out lParam1, out lParam2, 0);
                        eexMedia.FreeEventParams(lEventCode, lParam1, lParam2);
                        if (lEventCode == EC_COMPLETE)
                        {
                            ctlMedia.Stop();
                            posMedia.CurrentPosition = 0;
                            mediaStatus = 1;
                        }
                    }
                    catch (Exception)
                    {
                        break;
                    }
                }
            }
            base.WndProc(ref m);
        }

你可能感兴趣的:(代码,播放器,职场,休闲)