Проигрывание видео (Microsoft.DirectX.AudioVideoPlayback)

Блоговая публикация пользователя: ProCoder Эта публикация была перенесена из личного блога пользователя в общие разделы уровок сайта.

Проигрывание видео (Microsoft.DirectX.AudioVideoPlayback)


Для начала необходимо подключить три библиотеки: Microsoft.DirectX.AudioVideoPlayback, Tao.OpenGl и Tao.Platform.Windows.

Используем их:

Код:
/*http://esate.ru, ProCoder*/

using Microsoft.DirectX.AudioVideoPlayback;
using Tao.OpenGl;
using Tao.Platform.Windows;

Укажем переменную eMovie в классе формы.
Код:
/*http://esate.ru, ProCoder*/

Microsoft.DirectX.AudioVideoPlayback.Video eMovie;

После этого на форму ставим контролл OpenGL и называем его AnT.

Дальше в коде пишем (после строчки InitializeComponent();):

Код:
/*http://esate.ru, ProCoder*/

AnT.InitializeContexts();
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; // Убираем стиль формы.
this.WindowState = System.Windows.Forms.FormWindowState.Maximized; // Делаем на весь экран.
this.TopMost = true; // По верх остальных окон.
Cursor.Hide(); // Скрываем курсор. 

Выходим в дизайнер форм и кликаем по нашей форме дважды, чтобы автоматически прописать событие Form_load.

А в событии пишем:

Код:
/*http://esate.ru, ProCoder*/

Gl.glClear(Gl.GL_DEPTH_BUFFER_BIT|Gl.GL_COLOR_BUFFER_BIT); // Очищаем буферы перед воспроизведением.
eMovie = Video.FromFile("C:\\Video\\qwerty.wmv", true); // Задаем путь для видео. true значит что видео воспроизведется автоматически.
eMovie.Owner = AnT; // Воспроизводим в нашем контролле.

Вот и все. Но лучше сделать так, чтобы видео останавливалось по нажатию клавиши, как это обычно (но не всегда) делают в играх.

Для этого нам нужно перейти в дизайнер форм -> кликнуть один раз по нашему AnT, посмотреть на таблицу свойст, которая находится справа, найти наверху молнию, нажать на нее, найти KeyDown и кликнуть по нему пару раз.

Автоматически создается событие AnTKeyDown. В нем пишем:

Код:
/*http://esate.ru, ProCoder*/

if (e.KeyCode == Keys.Escape) // по нажатию на Escape происходит...
      {
       eMovie.Stop(); // остановка видео
       eMovie = null; // очищаем переменную для экономии места ОЗУ
       Gl.glClear(Gl.GL_COLOR_BUFFER_BIT|Gl.GL_DEPTH_BUFFER_BIT); //очистка

Вот собственно и все.

Более подробный код для тех, кто не совсем разобрался:

Код:
/*http://esate.ru, ProCoder*/

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX.AudioVideoPlayback;
using Tao.OpenGl;
using Tao.Platform.Windows;

namespace VideoGL
{
  public partial class MainForm : Form
   {
    Microsoft.DirectX.AudioVideoPlayback.Video eMovie;
    public MainForm()
     {
      InitializeComponent();
      AnT.InitializeContexts();
      this.FormBorderStyle =          System.Windows.Forms.FormBorderStyle.None;//Убираем стиль формы.
      this.WindowState = System.Windows.Forms.FormWindowState.Maximized; // Делаем на весь экран.
      this.TopMost = true; // Поверх остальных окон.
      Cursor.Hide(); // Скрываем курсор.
     }
      void MainFormLoad(object sender, EventArgs e)
     {
      Gl.glClear(Gl.GL_DEPTH_BUFFER_BIT|Gl.GL_COLOR_BUFFER_BIT); // Очищаем буферы перед воспроизведением.
      eMovie = Video.FromFile("C:\\Video\\qwerty.wmv", true); // Задаем путь для видео, true значит, что видео воспроизведется автоматически.
      eMovie.Owner = AnT; // Воспроизводим в нашем контролле.
     }
      void AnTKeyDown(object sender, KeyEventArgs e)
     {
      if (e.KeyCode == Keys.Escape) // по нажатию на Escape происходит...
     {
      eMovie.Stop(); // остановка видео
      eMovie = null; // очищаем переменную для экономии места ОЗУ
      Gl.glClear(Gl.GL_COLOR_BUFFER_BIT|Gl.GL_DEPTH_BUFFER_BIT); / /очистка
    }
  }
}
}
А что же дальше?
Обратите внимание на эти публикации, они могут быть вам полезны:

Нет доступа к просмотру комментариев.

^