Новые уроки OpenGL и мультимедиаПроигрываем видео (другой способ)


Так как еще плоховато ориентируюсь по сайту не обижайтесь на отсутствие скриншотов.

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

Юзаем их в проект:

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




Обьявляем переменную eMovie в классе формы.

Microsoft.DirectX.AudioVideoPlayback.Video eMovie;


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

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

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


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

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. В нем пишем:

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


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

Так как исходники выложить немогу, напишу все сдесь для тех кто не совсем поняли что и куда:

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); //очистка
    }
  }
}
}
  • +5
  • ProCoder
  • 15 декабря 2011, 13:55

Вставка изображения

Комментарии (9)

rss свернуть / развернуть
  • avatar
  • isaer
  • 15 декабря 2011, 22:22
  • #
  • 0
сделать тэг cut а то много текста

мне не нравится только Microsoft.DirectX.AudioVideoPlayback
=(

свернуть ветку
Она весит мало, все же лучше чем контролл WMP.

свернуть ветку
  • avatar
  • darkx
  • 16 декабря 2011, 00:50
  • #
  • 0
Так в принципе не только OGL контроле можно воспроизвести??!

свернуть ветку
Да. Можно хоть в PictureBox'е. Но для игр я лучше в контролле OpenGl воспроизведу, мороки меньше.

свернуть ветку
Хороший урок, как я вижу уже на главную вышел :)

свернуть ветку
Может перенести в блог уроков OpenGL?

свернуть ветку
Видимо мне рейтинга нехватает. Немогу перенести.

свернуть ветку
Уже перенесли :)

Так как еще плоховато ориентируюсь по форуму не обижайтесь на отсутствие скриншотов.

Там в редакторе есть кнопка «вставить картинку», нужно выбрать файл желательно сразу корректного размера, url не указывать. Должно получится.

свернуть ветку
Уже перенесли :)

А. Вон оно что. Спасибо:)

Там в редакторе...

При написании следующего урока разобрался:) Но все равно спасибо.

свернуть ветку
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.