Я использую элемент управления 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.