У меня есть собственное решение RTSP Source Filter, которое все еще находится в стадии разработки, но в настоящее время работает с видеопотоками H.264 / MPEG-4.Моя проблема на этапе инициализации.Если я открою graphedit и добавлю один за другим фильтры источника, декодера и видео рендера RTSP и подключу их контакты, все работает нормально (URL RTSP Source в настоящий момент жестко задан).Но если я пытаюсь сохранить график и заново открыть график из сохраненного файла, график вылетает.Я думаю, что причина кроется в части инициализации моего RTSP Source Filter.Поскольку мой фильтр ничего не знает о потоках в начале, он передает недопустимые параметры декодеру.Итак, мои вопросы:
- Как я должен точно обрабатывать процесс инициализации?
- Когда (какая функция в коде) я должен точно подключиться к источнику и начать передачу?Конструктор класса фильтра?Выходной контактный класс конструктор?
OnThreadCreate
? - Нужно ли нам получать некоторую информацию, такую как ширина / высота видео, из потоков или нам просто нужно передавать потоки в декодер?Как правильно это сделать?(Я думаю, что некоторые видео рендереры используют информацию о ширине / высоте из структуры
VIDEOINFOHEADER
.) Как нам определить размер нашего буфера?В методе GetMediaType
я устанавливаю размер выборки из заголовка растровой информации следующим образом:
pMediaType-> SetSampleSize (pvi-> bmiHeader.biSizeImage);
Как следуетЯ устанавливаю параметры как biWidth
, biHeight
, biSize
, biSizeImage
и т. Д.?Я считаю, что мне нужно установить их с некоторыми значениями по умолчанию в начале, а затем изменить их после получения потоков, но как?
Все вопросы указывают на одну и ту же проблему.Что именно я должен делать в процессе инициализации моего RTSP Source Filter?
! UPDATE!
Я просто заметил, что когда я загружаю сохраненный график, отсоединяю и повторно соединяю контакты между декодероми видео рендерер решает проблему.Я пробовал это с различными видео рендерерами (Microsoft и некоторые другие пользовательские видео рендереры).Все они реагируют одинаково.Некоторые из них не вылетают, а воспроизводят видео с неправильным соотношением сторон.Очевидно, что то, что приводит к сбою графика или вызывает странные результаты, это не мой исходный фильтр, а некоторая недопустимая информация, передаваемая видео рендереру.Поскольку такая ситуация не возникает с другими фильтрами источников RTSP, я все еще верю, что я делаю что-то не так, чего-то не хватает.
Что может вызвать эту проблему?Нужно ли отправлять некоторую информацию о мультимедиа, когда график запускается?
PS: график падает только при запуске графика.Просто загрузка графика не вызывает сбой.