Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > DirectShow. Запись с камеры


Автор: hiho 6.8.2012, 00:36
Здравствуйте. Строю граф на вывод видеопотока:

Код

//Создаем объект для графа фильтров
CoCreateInstance(CLSID_FilterGraph, NIL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, FGraphBuilder);
//Создаем объект для графа захвата
CoCreateInstance(CLSID_CaptureGraphBuilder2, NIL, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, FCaptureGraphBuilder);
//Задаем граф фильтров
FCaptureGraphBuilder.SetFiltergraph(FGraphBuilder);
//получаем устройство для захвата видео из списка моникеров
MArray[Index].BindToObject(NIL, NIL, IID_IBaseFilter, FVideoCaptureFilter);
//добавляем устройство в граф фильтров
 FGraphBuilder.AddFilter(FVideoCaptureFilter, 'VideoCaptureFilter');
//Задаем, что откуда будем получать и куда оно должно выводиться
FCaptureGraphBuilder.RenderStream(@PIN_CATEGORY_PREVIEW, nil, FVideoCaptureFilter ,FBaseFilter  ,nil);



А для записи в файл необходимо:

Код

//Создаем файл для записи данных из графа
FCaptureGraphBuilder.SetOutputFileName(MEDIASUBTYPE_Avi, PWideChar(FileName), FMux, FSink);
//строим граф фильтров для захвата изображения
FCaptureGraphBuilder.RenderStream(@PIN_CATEGORY_CAPTURE, @MEDIATYPE_Video, FVideoCaptureFilter, Nil, FMux);


Таким образом, чтобы начать записывать файл, необходимо перестроить граф, а для этого надо переподключиться к камере, на что уходит порядка 5 секунд.
Внимание вопрос: Можно ли, используя API DirectShow, начать и закончить запись в файл, не перестраивая каждый раз граф? А то за время повторного переподключения к камере информация теряет свою актуальность. Или хоть как-то сократить это время?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)