Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу Как запустить на просмотр видео файл DV формата пусть даже с кодеком MicrosoftDV
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Rendered Rendered вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.06.2006
По умолчанию Как запустить на просмотр видео файл DV формата пусть даже с кодеком MicrosoftDV - 08.06.2006, 22:17

Всем привет!
Работаю на ТВ, пишу тут прогу для видеоархива. Не могу наладить просмотр видеофайлов DV формата. Использую MediaPlayer c выводом на Plane размеров 384х288 (т.е. половина от ТВ-картинки). Итак вопросы:
1. почему MediaPlayer ругается ("Project project.exe raised exception class EMCIDeviceError with message 'No MCI device open'.Process stoped...") если не включить изначально AutoOpen или не указать видеофайл, а мне допустим видеофайл надо указывать в самой проге. Как это исправить?
2. зачем DeviceType если без dtAutoSelect никакой медиафайл не запускается или опять же недокомпилившись ругается?
3. и как мне в конце-концов запустить на просмотр видео файл DV формата пусть даже с кодеком MicrosoftDV?
Может быть есть альтернатива MediaPLayer? Потомучто некоторые видеофайлы он всё-таки у меня проигрывает, например закоденные XVid или DivX.
Пожалуйста помогите. Буду очень признателен
Ответить с цитированием
  (#2 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,274
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 09.06.2006, 01:12

Я в свое время плюнул с ним играться и взял пример из DirectShow. Там конечно писать чуть-чуть побольше, но вполне понятно и быстро. Если надо, кину код.
Ответить с цитированием
  (#3 (permalink)) Старый
Rendered Rendered вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.06.2006
По умолчанию 09.06.2006, 01:46

Буду очень рад, ато с ДиректШоу вообще никак...Билдер всё-таки наука целая...
Ответить с цитированием
  (#4 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,274
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 09.06.2006, 05:20

Код:
void __fastcall TFormVideo::PlayVideo(const AnsiString& pFile, int pL, int pT)
{
  wchar_t Buffer[1024];

  IFilterGraph *pFG;

  /*  Create filter graph */
  HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,
                                IID_IFilterGraph, (void**) &pFG);
  if(FAILED(hr))
  {
      return;
  }

  /*  Get a GraphBuilder interface from the filter graph */
  IGraphBuilder *pBuilder;

  hr = pFG->QueryInterface(IID_IGraphBuilder, (void **)&pBuilder);
  if(FAILED(hr))
  {
      pFG->Release();
      return;
  }

  /*  Render our output pin */
  hr = pBuilder->RenderFile((ExtractFilePath(Application->ExeName)+"Видео"+pFile+".avi").WideChar(Buffer, 1024), NULL);
  if(FAILED(hr))
  {
      pFG->Release();
      pBuilder->Release();
      return;
  }

  // DirectShow interfaces
  IMediaControl *pMC   = NULL;
  IMediaEventEx *pME   = NULL;
  IVideoWindow  *pVW   = NULL;

  hr = pFG->QueryInterface(IID_IMediaControl, (void **)&pMC);
  if(FAILED(hr))
  {
      pBuilder->Release();
      pFG->Release();
      return;
  }

  hr = pFG->QueryInterface(IID_IMediaEvent, (void **)&pME);
  if(FAILED(hr))
  {
      pBuilder->Release();
      pMC->Release();
      pFG->Release();
      return;
  }

  // Query for video interfaces, which may not be relevant for audio files
  pFG->QueryInterface(IID_IVideoWindow, (void **)&pVW);
  if(SUCCEEDED(hr))
  {
      long H,W;
      if (SUCCEEDED(pVW->get_Height(&H)))
              pVW->put_Height(3*H/2);
      if (SUCCEEDED(pVW->get_Width(&W)))
              pVW->put_Width(3*W/2);

      pVW->put_Left(pL);
      pVW->put_Top(pT);

      pVW->put_Caption(L"видеофрагмент");
      pVW->Release();
  }

  OAEVENT oEvent;
  hr = pME->GetEventHandle(&oEvent);
  if(SUCCEEDED(hr))
  {
      MainForm->fVideoPlaying = true;
      MainForm->MediaPlayer1->Stop();

      hr = pMC->Run();

      if(SUCCEEDED(hr))
      {
          LONG levCode;
          do
          {
            Application->ProcessMessages();
            hr = pME->WaitForCompletion(500, &levCode);
          }
          while (hr == E_ABORT);
      }

  }

  /* Release interface and return */
  pBuilder->Release();
  pMC->Release();
  pME->Release();
  pFG->Release();
}
Ответить с цитированием
  (#5 (permalink)) Старый
Rendered Rendered вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.06.2006
По умолчанию 09.06.2006, 20:42

пасиб конечно большое!
тока вот еще б разобраться чё тут к чему... компоненты кстати какие хоть подключать?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,274
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 09.06.2006, 23:40

Достаточно вроде
Код:
#include <strmif.h>
#include <uuids.h>
Ну и, поскольку там AnsiString - надо еще
Код:
#include <vcl.h>
Ответить с цитированием
  (#7 (permalink)) Старый
Rendered Rendered вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.06.2006
По умолчанию 09.06.2006, 23:59

никак не врублюсь куда это добро вставлять...
вроде как бы как понял должны быть две формы MainForm и FormVideo и еще тот самый MediaPLayer1...
вразумите пожалуйста
Ответить с цитированием
  (#8 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,274
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 10.06.2006, 04:03

Нет. MediaPlayer вообще не нужен. Надо создать на форме процедуру и вызвать ее. DirectShow создаст свое окно и воспроизведет в нем файл.
Ответить с цитированием
  (#9 (permalink)) Старый
Fuud Fuud вне форума
Member
 
Сообщений: 4,076
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.09.2004
По умолчанию Re: Вопросы по MediaPlayer - 10.06.2006, 10:52

Цитата:
1. почему MediaPlayer ругается ("Project project.exe raised exception class EMCIDeviceError with message 'No MCI device open'.Process stoped...") если не включить изначально AutoOpen или не указать видеофайл, а мне допустим видеофайл надо указывать в самой проге. Как это исправить?
Перед проигрыванием проги вызывать метод MediaPlayer1->Open();

Цитата:
2. зачем DeviceType если без dtAutoSelect никакой медиафайл не запускается или опять же недокомпилившись ругается?
В принцыпе можно явно задавать тип ресурса. Но незачем это делать.

Цитата:
3. и как мне в конце-концов запустить на просмотр видео файл DV формата пусть даже с кодеком MicrosoftDV?
А что, не проигрывает? Можешь дать файлик с этим кодеком (только маленький, не больше метра).

Цитата:
Может быть есть альтернатива MediaPLayer? Потомучто некоторые видеофайлы он всё-таки у меня проигрывает, например закоденные XVid или DivX.
Есть и куча. Какие из них нормальные, я не знаю.
Ответить с цитированием
  (#10 (permalink)) Старый
Rendered Rendered вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.06.2006
По умолчанию Re: Вопросы по MediaPlayer - 10.06.2006, 11:39

Цитата:
Originally posted by Fuud
[b]<div class='quotetop'>Цитата
Цитата:
3. и как мне в конце-концов запустить на просмотр видео файл DV формата пусть даже с кодеком MicrosoftDV?
А что, не проигрывает? Можешь дать файлик с этим кодеком (только маленький, не больше метра).

[/quote]

Да самому несложно это сделать в чём угодно, хоть в премьере.

Alexiski, спасибо, буду пробовать.
Ответить с цитированием
  (#11 (permalink)) Старый
Rendered Rendered вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.06.2006
По умолчанию 10.06.2006, 14:44

Уважаемый Alexiski, у мну нихрена не получается. Уже появляется комплекс неполноценности. Вы не могли бы со мной повозиться чуть-чуть? Разжевать бы мне пошагово как и куда приатачить этот код...
Ответить с цитированием
  (#12 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,274
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 10.06.2006, 19:21

А что именно не получается? Если не компилируется, то какие ошибки?
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
Rendered Rendered вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.06.2006
По умолчанию 21.06.2006, 23:34

Цитата:
Originally posted by Alexiski
[b]А что именно не получается? Если не компилируется, то какие ошибки?
[C++ Ошибка] main.cpp(54): E2451 Undefined symbol 'IMediaControl'
[C++ Ошибка] main.cpp(54): E2451 Undefined symbol 'pMC'
[C++ Ошибка] main.cpp(55): E2451 Undefined symbol 'IMediaEventEx'
[C++ Ошибка] main.cpp(55): E2451 Undefined symbol 'pME'
[C++ Ошибка] main.cpp(56): E2451 Undefined symbol 'IVideoWindow'
[C++ Ошибка] main.cpp(56): E2451 Undefined symbol 'pVW'
[C++ Ошибка] main.cpp(58): E2451 Undefined symbol 'IID_IMediaControl'
[C++ Ошибка] main.cpp(58): E2285 Could not find a match for 'IUnknown::QueryInterface(undefined,undefined)'
[C++ Ошибка] main.cpp(66): E2451 Undefined symbol 'IID_IMediaEvent'
[C++ Ошибка] main.cpp(66): E2285 Could not find a match for 'IUnknown::QueryInterface(undefined,undefined)'
[C++ Ошибка] main.cpp(76): E2451 Undefined symbol 'IID_IVideoWindow'
[C++ Ошибка] main.cpp(76): E2285 Could not find a match for 'IUnknown::QueryInterface(undefined,undefined)'
[C++ Ошибка] main.cpp(92): E2451 Undefined symbol 'OAEVENT'
[C++ Ошибка] main.cpp(93): E2451 Undefined symbol 'oEvent'
[C++ Ошибка] main.cpp(96): E2316 'fVideoPlaying' is not a member of 'TMainForm'
[C++ Ошибка] main.cpp(97): E2316 'MediaPlayer1' is not a member of 'TMainForm'
Ответить с цитированием
  (#14 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,274
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 22.06.2006, 02:25

Так надо поставить DirectX SDK и сделать
Код:
#include <dshow.h>
Ответить с цитированием
  (#15 (permalink)) Старый
Rendered Rendered вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.06.2006
По умолчанию 22.06.2006, 12:05

А как бы без этого SDK обойтись? Может можно dshow.h скачать просто?
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Просмотр видео в интернет DEWX Видео 8 15.01.2012 16:58
Просмотр видео из нета Любопытный Любые вопросы от новичков 3 10.01.2012 05:26
Просмотр видео файлов в формате MiniDv ваня0407 Вопросы начинающих программистов 0 21.12.2010 18:17
как перевести файл из формата odg в dwg евгеша Графика & дизайн 2 29.01.2010 11:44
Медиа-файл AVI.Как извлечь звук с этого формата ? Технарь Софт и программы 9 09.12.2008 00:06
подскажите ка запустить файл.... sergey1801 Pascal 8 04.11.2008 10:08
Как конвертировать файл TXT в файл спец. формата GTP LS238079 Вопросы начинающих программистов 1 21.03.2007 15:42
Преобразование в файл *.X формата imported___Vladimir__ Программирование графики 11 07.12.2005 12:21
Как запустить файл wmls In!t XML & WML 1 19.08.2005 19:26
EclipseAnt надо запустить файл Frosch Eclipse 1 01.06.2004 16:59
Как программно сконвертровать файл формата Doc в HTML файл AndreyKhvan Delphi 0 28.01.2004 12:10
Есть графический файл формата jpeg как его открыть Anonymous Visual C++ 9 14.11.2003 17:39



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов