c# - 如果以编程方式创建控件,则 Windows Media Player 视频为黑色

标签 c# windows-media-player axwindowsmediaplayer

我正在尝试以编程方式创建 Windows Media Player 控件,以便捕获任何初始化错误。之前,当我简单地将控件放在我的表单上时,一切都运行良好。但现在我正在尝试以编程方式播放内容,视频没有出现在控件中。我只能看到黑色视频,但能听到音频。

有什么想法吗?

    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);
        }


    }

最佳答案

MediaPalyer 运行时创建的确切问题是,在组件完全初始化之前,我们无法对 MediaPlayer 的状态(任何设置,如 url/uimode 等)执行任何更改。 VS-designer 将组件的状态序列化为 AxHost.State 对象,并且不影响任何其他设置。在运行时,您可以使用以下方法:

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 { }
}

关于c# - 如果以编程方式创建控件,则 Windows Media Player 视频为黑色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10807441/

相关文章:

c# - 限制Azure语音翻译中每个 "line"的长度

c# - 即使删除了引用也无法加载文件或程序集错误

c# - 如何在 Linq 表达式中将字符串转换为 TimeSpan?

activex - Windows Media Player 忽略我

c# - 使用 MediaPlayer 控件自动播放下一个文件(AxWindowsMediaPlayer)

c# - wp7 上的折线图

c# - 如何在C#中通过axWindowsMediaPlayer播放音频?

javascript - JScript Windows 媒体播放器 API

c# - 如何将多个文件添加到播放列表