Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

DirectShow+DSPack, Delphi (проигрывание видео из памяти)

24K
15 января 2007 года
LeXXa
1 / / 15.01.2007
Здравствуйте.
В данный момент работаю над программой, одна из задач которой - проигрывание видео из памяти, не напрямую из файла с диска. Для реализации использую DirectShow и библиотеку DSPack. С файлами с расширением .mpg всё работает без проблем, а вот с .avi трудности: при многократном использовании, каждый раз после запуска алгоритма (он приведён ниже) число потоков моего процесса увеличивается на 1 и в конце-концов программа выдаёт ошибку. Не понимаю, в чём здесь дело?

Код:
procedure PlayFile(filename: String);
var
  MemS: TBCMemFileStream;
  //TBCMemFileStream - класс, описанный в файле UMemFile.pas примера MemFile из DSPack. Совместно с TBCMemFileReader реализует чтение данных из памяти.
  FS: TFileStream;
  MR: TBCMemFileReader;
  pmt: PAMMediaType;
  mt: TAMMediaType;
  hres: HRESULT;
  FG: IFilterGraph;
  Bldr: IGraphBuilder;
  Pin: IPin;
  MCon: IMediaControl;
  ME: IMediaEvent;
begin
  filename:='E:\mpg.mpg';
  FS:=TFileStream.Create(filename, fmOpenRead);
  MemS:=TBCMemFileStream.Create(nil, fS.Size);
  FS.Destroy;
  pmt := @mt;
  TBCMediaType(pmt).InitMediaType;
  mt.majortype := MEDIATYPE_Stream;
  mt.subtype:=GetMediaType(UpperCase(ExtractFileExt(filename)));
  MR:=TBCMemFileReader.Create(MemS, pmt, hres);
  CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC, IID_IFilterGraph, FG);
  FG.AddFilter(MR, nil);
  if FG.QueryInterface(IID_IGraphBuilder, Bldr)=0 then begin
    Pin := MR.GetPin(0);
    Bldr.Render(Pin);  //если вместо этой строчки вставить _Builder.RenderFile(filename, nil); , всё прекрасно работает
  end;
  FG.QueryInterface(IID_IMediaEvent, ME);
  if FG.QueryInterface(IID_IMediaControl, MCon)=0 then
    MCon.Run;
end;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог