Я работаю над приложением, которое анализирует видеофайлы. Будучи не экспертом по DirectShow, я использовал простой код для анализа всех фреймов (SampleGrabber, Callback и т. Д.). Это прекрасно подходит для всех медиафайлов, даже если они декодированы с помощью структуры VideoInfoHeader2 (хотя это не должно, как указано везде). Проблема заключается в захвате одного кадра. Для этого я использовал IMediaDet. И это не делает, если есть только VideoInfoHeader2, и нет VideoInfoHeader. Я пробовал модификации моего кода анализа (OneShot, Seek), но этого не делает. Все источники в Интернете по этому вопросу не очень полезны, , поскольку они указывают на примеры SDK/DX, которые больше недоступны, или они просто говорят, что модификация будет «легкой». Ну, может быть, для эксперта DX ... (Но мне нужно использовать автомобиль, а не сначала его построить ... ;-) В качестве более важного для меня вопроса & мой «обходной путь» - это перекодируйте все видео с помощью VideoInfoHeader2, , сохраните их с помощью VideoInfoHeader и выполните анализ/захват. Очень ресурсопотребляющий, и наоборот от умных ... Любая помощь оценивается.Схватывающие фреймы, когда структура VideoInfoHeader2
ответ
Вы указали необходимые шаги, которые по-прежнему являются самым простым решением (при условии, что вы не сдаетесь и не используете Windows API, использование библиотеки сторонних разработчиков может быть проще, но это выходит за рамки этого вопроса).
Образец Grabber и IMediaDet
- это части устаревших служб редактирования DirectShow, разработка которых была остановлена давно. Если вас не устраивает API-интерфейс запаса, вам нужно использовать более гибкую замену. Например, вы можете захватить исходный код аналогичного образца Grabber из старого пакета DirectX или Platform SDK и расширить его для поддержки VIDEOINFOHEADER2
.
IMediaDet
- не что иное, как класс COM, создающий собственный график, внутренне пытаясь декодировать видео. Он негибкий и почти каждый раз, когда ваше здание делает ваш собственный граф более надежным решением.
Ответ Microsoft на эту проблему - поскольку они отказались от разработки DirectShow - нового API Media Foundation. Однако есть причины, по которым этот «ответ» не очень хорош: ограниченная совместимость с ОС, ограниченная поддержка кодеков и форматов, совершенно новый API, который имеет мало общего с DirectShow, и вам нужно перепроектировать ваше приложение.
Все вместе вы должны найти замену образца Grabber, используя один из популярных и объясненных методов (независимо от того, как они выглядят не так много) или переключиться на другой API или стороннюю библиотеку. Или еще одно возможное решение - использовать другой фильтр/кодек, который способен декодировать в VIDEOINFOHEADER
формат форматированного носителя.
- 1. DirectShow ISampleGrabber, который принимает VIDEOINFOHEADER2
- 2. Схватывающие объекты из ведра S3
- 3. Схватывающие значения от Hash ruby
- 4. Когда следует использовать фреймы HTML?
- 5. Как и когда построены фреймы стеков?
- 6. HTML - Как узнать, когда загружаются все фреймы?
- 7. JQuery и фреймы
- 8. Корпус, когда структура
- 9. CSRF и плавающие фреймы
- 10. якоря и фреймы?
- 11. Невозможно скомпилировать фреймы Mesos
- 12. фреймы не отображаются
- 13. Почему фреймы так медленно?
- 14. Android ProgressBar пропускает фреймы
- 15. Javascript OnClick других фреймы
- 16. Загрузить фреймы на вкладке
- 17. фреймы действия ASP неприятности
- 18. Насколько ограничены веб-фреймы
- 19. Множественные фреймы, загружаемые асинхронно
- 20. Trouble печати плавающие фреймы
- 21. Схватывающие столбцы со специальными символами и буквами верхнего регистра
- 22. Разделить GIF на фреймы
- 23. Внутренние Фреймы в JavaFX
- 24. Render игровые фреймы
- 25. HTML-фреймы и javascript
- 26. плавающие фреймы против AJAX
- 27. Как печатать фреймы?
- 28. фреймы tkinter работают неправильно
- 29. Невозможно загрузить все фреймы
- 30. Анимированные gd-фреймы
Благодарим вас за ответ. Схватка кадров из нового VIDEOINFOHEADER2 будет очень общей задачей, о которой я должен думать. Если ситуация такая, как вы описали, я не могу понять, почему просто не использовать исходный код, предоставляемый где-то, поскольку он очень обескураживает работу через старые (и трудно найти) образцы, получая подробные сведения о DirectShow, чтобы иметь возможность изменять это для VIDEOINFOHEADER2. – nji9