c # с использованием Microsoft.DirectX.AudioVideoPlayback как воспроизвести следующее видео после завершения одного

#c# #winforms #video #directx #audiovideoplayback

#c# #winforms #Видео #directx #audiovideoplayback

Вопрос:

я могу поместить видео в свою форму 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;
    }
  

Комментарии:

1. Какой тип элемента управления является viewport?

Ответ №1:

При воспроизведении видеорядов в 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);
           }
        }
  

Ответ №2:

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

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

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

Ответ №3:

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

 Video _SegaVideo;
Video _IntroVideo;

public _FrmMain()
{
    InitializeComponent();

    _SegaVideo = new Video(@"videoSEGA.AVI");
    _SegaVideo.Owner = _VideoPanel;
    _SegaVideo.Play();
    _SegaVideo.Ending  = new EventHandler(_SegaVideoEnding);

}

private void _SegaVideoEnding(object sender, EventArgs e)
{
    _IntroVideo = new Video(@"videoINTRO.AVI");
    _IntroVideo.Owner = _VideoPanel;
    _IntroVideo.Play();
}