2011-04-05 70 views
1

我可以把视频放在我的窗体中。c#使用Microsoft.DirectX.AudioVideoPlayback如何播放下一个视频完成后

我的问题是我如何使它完成播放视频时,它开始播放另一个视频?意思就像一个序列。完成后,播放另一个视频。

到目前为止,我已经设法播放视频,它只是循环播放视频。

有什么想法?

这是我到目前为止的代码:

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; 
    } 
+0

视口是什么类型的控件? – MPelletier 2011-04-12 09:51:50

回答

0

您可以使用之前创建要打开BackLoop()函数的第二个视频文件的同一视频对象。

所以,代码看起来应该像什么这样的:

private void BackLoop(object sender, EventArgs e) 
{ 
    video.Open("C:\\Users\\Dave\\Desktop\\WaterDay2.wmv", true); 
} 
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); 
      } 
     } 
0

我用这篇文章,以使其适应我的需要,这是我的解决方案:

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(); 
} 
相关问题