如果控制程序创建的Windows Media Player视频是黑色的 [英] Windows Media Player video is black if control is created programmatically

查看:584
本文介绍了如果控制程序创建的Windows Media Player视频是黑色的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图以编程方式创建Windows Media Player控件这样我就可以捕获任何初始化错误。当我干脆放弃我的窗体上的控件之前,一切都发挥很好。但现在,我想以编程方式玩的东西,视频没有显示在控制。我只看到黑色的视频,但我听到声音。



任何想法?



 公共TrimVideoControl()
{
的InitializeComponent();

//尝试创建WMP控制
//我们这样做是在这里,所以我们可以优雅地捕捉错误如果控制不加载

{

wmPlayer =新AxWMPLib.AxWindowsMediaPlayer();
((System.ComponentModel.ISupportInitialize)(wmPlayer))BeginInit在();
// SuspendLayout();
wmPlayer.CreateControl();
wmPlayer.Name =wmPlayer;
wmPlayer.Ctlenabled = TRUE;
System.ComponentModel.ComponentResourceManager资源=新System.ComponentModel.ComponentResourceManager(typeof运算(TrimVideoControl));
wmPlayer.OcxState =((System.Windows.Forms.AxHost.State)(resources.GetObject(wmPlayer.OcxState)));
wmPlayer.Location =新点(12,13);
wmPlayer.Size =新的大小(636,358);
wmPlayer.enableContextMenu = TRUE;
wmPlayer.stretchToFit = TRUE;
wmPlayer.uiMode =无;
wmPlayer.settings.autoStart = FALSE;
wmPlayer.ErrorEvent + = wmPlayer_ErrorEvent;
wmPlayer.MediaChange + = wmPlayer_MediaChange;
wmPlayer.MediaError + = wmPlayer_MediaError;
wmPlayer.OpenStateChange + = wmPlayer_OpenStateChange;
wmPlayer.PlayStateChange + = wmPlayer_PlayStateChange;
wmPlayer.Warning + = wmPlayer_Warning;
this.Controls.Add(wmPlayer);
((System.ComponentModel.ISupportInitialize)(wmPlayer))EndInit在();

//this.ResumeLayout(false);
//this.PerformLayout();
//wmPlayer.Show();
//wmPlayer.BringToFront();
}
赶上(异常前)
{
Logger.Error(错误创建WMP的控制:+ EX);
}


}


解决方案

与MediaPalyer在运行时创建的具体问题是,我们不能执行MediaPlayer的状态的组件之前,任何更改(如URL / uimode等任何设置)已完全初始化的事实。该VS设计师系列化组件作为 AxHost.State 对象状态,不影响任何其他设置。在运行时,你可以用下面的办法:

 无效AddMediaPlayer(字符串URL){
尝试{
VAR wmPlayer =新AxWMPLib.AxWindowsMediaPlayer();

((System.ComponentModel.ISupportInitialize)(wmPlayer))BeginInit在();
wmPlayer.Name =wmPlayer;
wmPlayer.Enabled = TRUE;
wmPlayer.Dock = System.Windows.Forms.DockStyle.Fill;
this.Controls.Add(wmPlayer);
((System.ComponentModel.ISupportInitialize)(wmPlayer))EndInit在();

//初始化后,您可以自定义媒体播放器
wmPlayer.uiMode =无;
wmPlayer.URL =网址;
}
赶上{}
}


I'm trying to programmatically create the Windows Media Player control so I can trap any initialization errors. Before when I simply dropped the control on my form, everything played fine. But now that I'm trying to play things programmatically, the video isn't appearing in the control. I only see black video but I hear the audio.

Any ideas?

    public TrimVideoControl()
    {
        InitializeComponent();

        // Try creating WMP control
        // We do this here so we can gracefully catch errors if the control doesn't load
        try
        {

            wmPlayer = new AxWMPLib.AxWindowsMediaPlayer();
            ((System.ComponentModel.ISupportInitialize)(wmPlayer)).BeginInit();
            //SuspendLayout();
            wmPlayer.CreateControl();
            wmPlayer.Name = "wmPlayer";
            wmPlayer.Ctlenabled = true;
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TrimVideoControl));
            wmPlayer.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("wmPlayer.OcxState")));
            wmPlayer.Location = new Point(12, 13);
            wmPlayer.Size = new Size(636, 358);
            wmPlayer.enableContextMenu = true;
            wmPlayer.stretchToFit = true;
            wmPlayer.uiMode = "none";
            wmPlayer.settings.autoStart = false;
            wmPlayer.ErrorEvent += wmPlayer_ErrorEvent;
            wmPlayer.MediaChange += wmPlayer_MediaChange;
            wmPlayer.MediaError += wmPlayer_MediaError;
            wmPlayer.OpenStateChange += wmPlayer_OpenStateChange;
            wmPlayer.PlayStateChange += wmPlayer_PlayStateChange;
            wmPlayer.Warning += wmPlayer_Warning;
            this.Controls.Add(wmPlayer);
            ((System.ComponentModel.ISupportInitialize)(wmPlayer)).EndInit();

            //this.ResumeLayout(false);
            //this.PerformLayout(); 
            //wmPlayer.Show();
            //wmPlayer.BringToFront();
        }
        catch (Exception ex)
        {
            Logger.Error("Error creating WMP control: " + ex);
        }


    }

解决方案

The exact problem with the MediaPalyer runtime creation is the fact that we can't perform any changes of MediaPlayer's state (any settings like url/uimode etc.) before the component have been completely initialized. The VS-designer serialized component's state as an AxHost.State object and don't affect any other settings. At runtime you can use the following approach:

void AddMediaPlayer(string url) {
    try {
        var wmPlayer = new AxWMPLib.AxWindowsMediaPlayer();

        ((System.ComponentModel.ISupportInitialize)(wmPlayer)).BeginInit();
        wmPlayer.Name = "wmPlayer";
        wmPlayer.Enabled = true;
        wmPlayer.Dock = System.Windows.Forms.DockStyle.Fill;
        this.Controls.Add(wmPlayer);
        ((System.ComponentModel.ISupportInitialize)(wmPlayer)).EndInit();

        // After initialization you can customize the Media Player
        wmPlayer.uiMode = "none";
        wmPlayer.URL = url;
    }
    catch { }
}

这篇关于如果控制程序创建的Windows Media Player视频是黑色的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆