Почему я не могу установить currPosition в управлении проигрывателем Windows Media

Я использую элемент управления Windows Media (AxWMPLib.AxWindowsMediaPlayer) в приложении Winforms для воспроизведения видео в формате mp4. Я хочу иметь возможность запускать видео в определенной позиции, а затем останавливать воспроизведение через определенное количество секунд.

Моя проблема в том, что когда я пытаюсь установить текущую позицию, она либо устанавливает текущую позицию на ноль (до того, как она начнет играть или когда она приостановлена), либо на небольшое число, например 6 (если она уже воспроизводится).

Вот как я пытаюсь изменить текущую позицию: m_windowsMediaPlayer.Ctlcontrols.currentPosition = value;

Этот вопрос Заданная позиция встроенного проигрывателя Windows Media работает медленно предполагает, что проблема может быть вызвана малым количеством ключевых кадров, но не имеет значения, пытаюсь ли я установить его на 30 секунд или 1200 секунд. Он по-прежнему начинает воспроизводиться через 6 секунд снова.

Этот вопрос управление проигрывателем Windows Media - получить/установить положение видео? показывает, что настройка currentPosition работает для некоторых людей.

Вот соответствующий код:

        m_windowsMediaPlayer.URL = GetVideoFileFullPath();
        RestartVideo();

    private void RestartVideo()
    {
        m_windowsMediaPlayer.Ctlcontrols.currentPosition = StartTime;

        StopTimer();
        StartTimer();

        m_windowsMediaPlayer.Ctlcontrols.play();
    }

Я также попытался добавить событие OpenStateChanged, так как думал, что, возможно, все было отложено, поэтому я должен установить его только после того, как файл будет действительно открыт. Но и это не помогло.

    private void m_windowsMediaPlayer_OpenStateChange(object sender, AxWMPLib._WMPOCXEvents_OpenStateChangeEvent e)
    {
        if (m_windowsMediaPlayer.playState == WMPLib.WMPPlayState.wmppsPlaying)
        {
            if (m_start)
            {
                m_windowsMediaPlayer.Ctlcontrols.pause();
                m_start=false;
                RestartVideo();
            }
        }
    }

Файл mp4, который я показываю, все еще добавляется другим приложением. Но проблема существует и со статическими файлами mp4. Если бы другой формат видео работал лучше, я мог бы изменить другое приложение для использования этого формата видео. Я рассматривал использование vlcDotNetForms, но, поскольку я хочу иметь возможность распространять это приложение с минимальным количеством внешних зависимостей, я надеюсь решить эту проблему, используя что-то, что поставляется с Windows.

Еще один момент: мне нужно поддерживать компьютеры с Windows Vista, и я не могу рассчитывать на то, что они будут иметь .NET 3.5 или новее. В настоящее время я ориентируюсь на .NET 2, но при необходимости могу ориентироваться на .NET 3. Я вижу эту проблему в Windows 8.1.


person redlum    schedule 13.01.2016    source источник
comment
Вы изучили свойства currentPosition или currentPositionString, чтобы увидеть, что будет возвращено, если вы просто позволите воспроизвести видео?   -  person Clay Ver Valen    schedule 20.01.2016
comment
@ClayVerValen Я знаю, что он не установлен должным образом, потому что я показываю currentPosition каждые 250 миллисекунд.   -  person redlum    schedule 21.01.2016