首页 > 解决方案 > AxWMPLib.AxWindowsMediaPlayer 对 WMV 文件表现出奇怪的行为

问题描述

在我的 Windows Forms C# 应用程序中,我实现了 COM AxWMPLib.AxWindowsMediaPlayer,我有一个设置 的按钮currentPosition,但是它在涉及 WMV 文件时表现出奇怪的行为,它没有currentPosition正确设置,而是有 2~6 秒的差异。

在以下示例中,我设置currentPosition为 7,但它实际上设置为 5 或有时设置为 4,为什么?它只发生在 WMV 文件上,但 MKV 和 MP4 工作正常。

namespace MediaPlayerTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void axWindowsMediaPlayer1_Enter(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.URL = @"D:\Downloads\sample.wmv";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.Ctlcontrols.currentPosition = 7.0;
        }
    }
}

那是一个错误吗?如何解决?WMV 文件是否有解决方法?

标签: c#.netwindows-media-playerwmpaxwindowsmediaplayer

解决方案


感谢@Hans Passant 的评论。根据这个答案:https ://superuser.com/questions/591904/windows-media-player-v12-seek-position-wont-play-from-a-chosen-position

WMV 似乎有编码问题。除了 MKV 和 MP4 文件格式工作正常,我做了很多测试,以便在其他文件格式上找到类似的问题,例如:AVI、WebM、3GP、MPG、VOB、MOV、FLV。

WMV 是唯一一个提出问题的。所以我为 WMV 文件做了这个解决方法:

private void button1_Click(object sender, EventArgs e)
{
    string isWMV = axWindowsMediaPlayer1.currentMedia.sourceURL;

    if (isWMV.EndsWith(".wmv"))
    {
        ToolTip toolTip = new ToolTip();
        toolTip.Show("It's disabled for WMV files due to the faulty WMV indexing table.", button1);
        return;
    }
    
    axWindowsMediaPlayer1.Ctlcontrols.currentPosition = 7.0;
}

推荐阅读