Народ, помогите плиз. Мучаюсь уже две недели. Использую DirectShow, который Net(Точнее две библиотеки DirectShowLib и DexterLib).Задача собрать из нескольких роликов видео и сохранить его в avi.
Для это использую IAMTimeline для его загрузки. Сейчас видео сохраняется, но не могу понять, как настроить это сохранение(т.е выбрать разрешение кадра, FPS и т.д).Обяъясните пожалуйста. Если можно то поделитесь пожалуйста немножко кодом.Заранее огромное спасибо
pRenderEngine = gcnew RenderEngineClass();
pRenderEngine->SetTimelineObject(pTimeLine);
pRenderEngine->ConnectFrontEnd();
DexterLib::IGraphBuilder ^dfg;
pRenderEngine->GetFilterGraph(dfg );
graphBuilder = (DirectShowLib::IGraphBuilder^)dfg;
capture = (DirectShowLib::ICaptureGraphBuilder2^)gcnew DirectShowLib::CaptureGraphBuilder2();
capture->SetFiltergraph(graphBuilder);
DirectShowLib::IBaseFilter ^enc = CreateFilter(FilterCategory::VideoCompressorCategory, "Xvid MPEG-4 Codec");
//Добавление фильтра в граф
graphBuilder->AddFilter(enc, "Xvid MPEG-4 Codec");
//Создание фильтра и получение его интерфейса
DirectShowLib::IBaseFilter ^audioEncoder = CreateFilter(DirectShowLib::FilterCategory::AudioCompressorCategory, "ACM Wrapper");
//Добавление фильтра в граф
graphBuilder->AddFilter(audioEncoder, "ACM Wrapper");
DirectShowLib::IBaseFilter ^pMux;
IFileSinkFilter ^pSink;
capture->SetOutputFileName(MediaSubType::Avi, L"d:\\Output.avi", pMux, pSink);
int NumGroups;
pTimeLine->GetGroupCount(NumGroups);
// Loop through the groups and get the output pins.
for (int i = 0; i < NumGroups; i++)
{
DexterLib::IPin ^pPin;
pRenderEngine->GetGroupOutputPin(i, pPin);
{
DirectShowLib::IBaseFilter^ pCompressor;
capture->RenderStream(nullptr, nullptr, pPin, (DirectShowLib::IBaseFilter^)enc, pMux);
}
}
Вот код, здесь конечно упущены моменты,которые не имеют отношение к делу