#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:
-
Создайте список видео для отображения (используя пути к файлам), предпочтительно в виде списка.
-
Используйте целое число, чтобы получить путь к файлу из индекса listbox.items.
-
Перед загрузкой следующего видео убедитесь, что видео удалено.
-
Увеличивайте целое число при каждом воспроизведении видео.
-
Используйте оператор if, чтобы увидеть, является ли это концом последовательности.
-
Как личное предпочтение (не уверен, насколько это важно) Я бы изменил размер видео перед воспроизведением
Итак, из вашего кода: (не тестировал это, но теоретически, я думаю, это должно сработать)
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();
}