Как сменить видео после остановки тока? - PullRequest
1 голос
/ 12 января 2020

Я сейчас работаю с. NET 4.5. Программирование фотобудки. Фотобудка должна начинаться с полноэкранного режима:

  1. Показать заставку с заставкой.
  2. Когда пользователь нажимает на экран, он должен показать, что вы готовы! видео
  3. Когда закончится воспроизведение видео по готовности, оно должно показать видео обратного отсчета
  4. По окончании видео обратного отсчета необходимо сделать снимок.

Прямо сейчас я могу сделать № 1 и № 2. Я также могу сфотографировать. Моя проблема с последовательностью. Когда видео заканчивается, мне нужно поменять видео, но поскольку все выполняется в обработчике событий, оно воспроизводит только видео, пока программа запускает обработчик событий.

Есть ли лучший и более умный способ сделать это? это?

Вот мой код:

То, что у меня есть и работает прямо сейчас:

private void Form1_Load(object sender, EventArgs e)
        {
            // maximize the screen
            FormBorderStyle = FormBorderStyle.None;
            WindowState = FormWindowState.Maximized;
            TopMost = true;

            // play an intro video without the UI controls
            this.videoPath = this.basePath + "intro.mp4";
            this.wmpVideo.URL = this.videoPath;
            this.wmpVideo.settings.setMode("Loop", true);
            this.wmpVideo.Ctlcontrols.play();
            this.wmpVideo.uiMode = "none";

        }

Затем, если пользователь нажимает на видео, оно изменит видео на новый файл:

private void wmpVideo_MouseDownEvent(object sender, AxWMPLib._WMPOCXEvents_MouseDownEvent e)
    {
        if (this.current == 0) //this means that currently we are in the intro
        {
            // Then I change the video to "get ready!"
            this.changeVideo("getready.mp4",1);
        }

changeVideo в основном обновляет видео до getready.mp4. Затем мне нужно изменить его на countdown.mp4. Чтобы перейти от одного видео к другому, мне нужно проверить, когда видео заканчивается. Я делаю это прямо сейчас с:

wmpVideo.PlayStateChange += new AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(checkGetReadyFinished);

И обработчик событий выглядит так:

private void checkGetReadyFinished(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
    if (e.newState == 8) { 
        // If we are currently in the "getready state"
        if (this.current == 1)
        {
            // then I change the video to the countdown.mp4
            this.changeVideo("countdown.mp4", 2);
        }

    }
}

ПРОБЛЕМА

Я заметил видео ТОЛЬКО играет, когда я использую метод обработчика событий. Я понял это, потому что увидел, что видео не воспроизводилось, поэтому я добавил MessageBox в методе changeVideo. Я видел это, пока показывался MessageBox, воспроизводилось видео. Когда я нажал «ОК», видео пропало IE, мне нужно остаться в методе обработчика событий.

ВОПРОС

Есть ли какой-нибудь другой лучший способ показать video1, затем покажите video2, когда закончится video1. Как я уже упоминал, мне нужно сделать программу Photobooth.

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

Есть ли оптимальный способ сделать это?

...