Здравствуйте. Строю граф на вывод видеопотока:
| Код | //Создаем объект для графа фильтров 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, начать и закончить запись в файл, не перестраивая каждый раз граф? А то за время повторного переподключения к камере информация теряет свою актуальность. Или хоть как-то сократить это время? |