Как использовать Microsoft.DirectX.AudioVideoPlayback, как воспроизвести следующее видео после его завершения. - PullRequest
1 голос
/ 05 апреля 2011

Я могу поместить видео в форму Windows.

Мой вопрос: как мне сделать это, когда оно заканчивает воспроизведение видео, оно начинает воспроизводить другое видео?смысл как в последовательности.после его окончания воспроизведите другое видео.

пока мне удается воспроизвести видео, и оно просто зацикливает видео.

есть идеи?

это мой код, такдалеко:

public partial class Form1 : Form
{
     Video video;



    public Form1()
    {
        InitializeComponent();          
        Initializevid1();

    }

    public void Initializevid1()
    {

           // store the original size of the panel
            int width = viewport.Width;
            int height = viewport.Height;

            // load the selected video file
            video = new Video("C:\\Users\\Dave\\Desktop\\WaterDay1.wmv");

            // set the panel as the video object’s owner
            video.Owner = viewport;

            // stop the video
            video.Play();
            video.Ending +=new EventHandler(BackLoop);

            // resize the video to the size original size of the panel
            viewport.Size = new Size(width, height);   

    }

    private void BackLoop(object sender, EventArgs e)
    {

        //video.CurrentPosition = 0;
    }

Ответы [ 3 ]

1 голос
/ 06 июня 2012

При воспроизведении видеопоследовательностей в AudioVideoPlayback:

  1. Создание списка видео для отображения (с использованием путей к файлам), предпочтительно в виде списка.

  2. Используйте целое число, чтобы получить путь к файлу из индекса listbox.items.

  3. Перед загрузкой следующего видео убедитесь, что видео удалено.

  4. Увеличивать целое число при каждом воспроизведении видео.

  5. Используйте оператор if, чтобы узнать, является ли это концом последовательности.

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

Итак, из вашего кода: (не проверял это, но теоретически я думаю, что это должно работать)

    public partial class Form1 : Form
    {
        Video video;
        Int SeqNo = 0;

        public Form1()
        {
            InitializeComponent();          
            Initializevid1();

        }

        public void Initializevid1()
        {

               // store the original size of the panel
                int width = viewport.Width;
                int height = viewport.Height;

                // load the selected video file
                video = new Video(listbox1.Items[SeqNo].Text);

                // set the panel as the video object’s owner
                video.Owner = viewport;

                // resize the video to the size original size of the panel
                viewport.Size = new Size(width, height);   

                // stop the video
                video.Play();

                // start next video
                video.Ending +=new EventHandler(BackLoop);
        }

        private void BackLoop(object sender, EventArgs e)
        {
            // increment sequence number
            SeqNo += 1;            //or '++SeqNo;'

            //check video state
            if (!video.Disposed)
            {
                video.Dispose();
            }

            //check SeqNo against listbox1.Items.Count -1 (-1 due to SeqNo is a 0 based index)
            if (SeqNo <= listbox1.Items.Count -1)
            {


               // store the original size of the panel
                int width = viewport.Width;
                int height = viewport.Height;

                // load the selected video file
                video = new Video(listbox1.Items[SeqNo].Text);

                // set the panel as the video object’s owner
                video.Owner = viewport;

                // resize the video to the size original size of the panel
                viewport.Size = new Size(width, height);   

                // stop the video
                video.Play();


                // start next video
                video.Ending +=new EventHandler(BackLoop);
           }
        }
0 голосов
/ 07 июля 2013

Я использовал этот пост, чтобы адаптировать его к своим потребностям, и это было мое решение:

Video _SegaVideo;
Video _IntroVideo;

public _FrmMain()
{
    InitializeComponent();

    _SegaVideo = new Video(@"video\SEGA.AVI");
    _SegaVideo.Owner = _VideoPanel;
    _SegaVideo.Play();
    _SegaVideo.Ending += new EventHandler(_SegaVideoEnding);

}

private void _SegaVideoEnding(object sender, EventArgs e)
{
    _IntroVideo = new Video(@"video\INTRO.AVI");
    _IntroVideo.Owner = _VideoPanel;
    _IntroVideo.Play();
}
0 голосов
/ 07 марта 2012

Вы можете использовать тот же видеообъект, созданный ранее, чтобы открыть второй видеофайл в функции BackLoop().

Итак, код должен выглядеть примерно так:

private void BackLoop(object sender, EventArgs e)
{
    video.Open("C:\\Users\\Dave\\Desktop\\WaterDay2.wmv", true);
}
...