2015-02-24 2 views
-1

Я пишу приложение C# в Visual Studio, которое воспроизводит видео с помощью DirectShow (Quartz.dll). Одна из проблем, с которой я столкнулась, - вернуть видео в начало, когда пользователь нажимает кнопку остановки, чтобы остановить воспроизведение видео. Другая проблема заключается в очистке последнего кадра видео от элемента управления picturbox.C# Как очистить видео из управления фотобарабаном, когда видео закрыто, и сбросить позицию воспроизведения видео, чтобы начать, когда воспроизведение видео остановлено?

Вот код в верхней части, связанной с QuartzTypeLib:

public partial class frmMain : Form 
{ 
    public const int WS_CHILD = 0x40000000; 
    public const int WS_CLIPCHILDREN = 0x2000000; 
    public QuartzTypeLib.IMediaControl mc; 
    public QuartzTypeLib.IVideoWindow videoWindow = null; 

Вот код для открытия файла, в том числе код для создания экземпляра FileGraphManager:

private void openMediaToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     // Open a media file. 
     OpenFileDialog ofd = new OpenFileDialog(); 
     ofd.Filter = "Video Files|*.mpg;*.avi;*;*.wmv;*.mov|Audio Files|*.mp3;*.wav;*.wma"; 
     ofd.FilterIndex = 1; 
     if (DialogResult.OK == ofd.ShowDialog()) 
     { 
      // Stop the playback for the current video if one is currently playing. 
      if (mc != null) 
       mc.Stop(); 
      if (pbVideoDisplay.Image != null) 
       pbVideoDisplay.Image = null; 
      // Load the movie file. 
      FilgraphManager graphManager = new FilgraphManager(); 
      graphManager.RenderFile(ofd.FileName); 
      mc = (IMediaControl)graphManager; 

      // Send the video to the picture box control pbVideoDisplay) on frmMain. 
      try 
      { 
       videoWindow = (IVideoWindow)graphManager; 
       videoWindow.Owner = (int)pbVideoDisplay.Handle; 
       videoWindow.WindowStyle = WS_CHILD | WS_CLIPCHILDREN; 
       videoWindow.SetWindowPosition(
       pbVideoDisplay.ClientRectangle.Left, 
       pbVideoDisplay.ClientRectangle.Top, 
       pbVideoDisplay.ClientRectangle.Width, 
       pbVideoDisplay.ClientRectangle.Height); 
      } 
      catch 
      { 

      } 
     } 
    } 

Вот код для закрытия среды:

private void closeMediaToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     mc.Stop(); 
    } 

И вот код для остановки видео Воспроизведение:

private void tsbtnStop_Click(object sender, EventArgs e) 
    { 
     mc.Stop(); 
    } 

mc.Stop() будет остановить видео на текущем месте видео, это так же, как функция mc.Pause() делает. Как сбросить позицию видео в начале видео при вызове mc.Stop()? И как я могу очистить этот последний видеокадр из элемента управления фотокамерой? Я попробовал «pbVideoDisplay.Image = null;» но последний видеокадр сохраняется. Очевидно, мне нужно больше кода для закрытия видео, но я не могу найти ни одного образца.

ответ

0
+0

«videoWindow.put_Visible» дает мне это: «Ошибка 1 QuartzTypeLib.IVideoWindow» не содержит определение для „put_Visible“ и не метода расширения „put_Visible“ принимающего первый аргумент типа „QuartzTypeLib.IVideoWindow“ может быть найденный." «(mc as IMediaPosition) .put_CurrentPosition» дает мне следующее: «Ошибка 1« QuartzTypeLib.IMediaPosition »не содержит определения для« put_CurrentPosition », и никакой метод расширения« put_CurrentPosition », принимающий первый аргумент типа« QuartzTypeLib.IMediaPosition », может быть найденный." – manicdrummer

+0

Ну, это, видимо, есть, но это может немного отличаться в зависимости от импорта interop (например, свойство «Видимое»). Вы можете использовать Object Browser, чтобы очистить это, или, скорее, использовать [DirectShow.NET] (http://directshownet.sourceforge.net/) в качестве оболочки. –

+0

ОК, я узнал, как очистить последний видеофрагмент из окна изображения. Теперь, как установить текущую позицию видео в начало видео, когда пользователь нажимает кнопку «Стоп»? Пока у меня есть «mc.Stop()»; теперь мне нужен код для сброса видео в начало. – manicdrummer

 Смежные вопросы

  • Нет связанных вопросов^_^