Покадровый просмотр видео.
От: Melamed Россия  
Дата: 13.02.19 15:46
Оценка:
Нужен покадровый просмотр видео.
Как я понял из документации покадровый просмотр видео можно осуществить либо с помощью интерфейса IVideoFrameStep, либо с помощью метода IMediaSeeking::SetPosition, предварительно установив формат времени в TIME_FORMAT_FRAME.

В первом случае удается только реализовать только покадровый просмотр вперед и при этом слышны звуки, которые записаны в саундтреке, когда на экране данный кадр.

Во втором случае при вызове метода IMediaSeeking::SetTimeFormat c аргументом TIME_FORMAT_FRAME возникает ошибка "Неверный параметр".

Желательно организовать покадровый просмотр видео вперед и назад без звукового сопровождения, если на видео имеется саундтрек.

Операционная среда MS Windows 10
Сам проект разрабатывается в C++ MSVS 2015 WINAPI + DirectShow
Re: Покадровый просмотр видео.
От: Videoman Россия https://hts.tv/
Дата: 14.02.19 06:28
Оценка:
Здравствуйте, Melamed, Вы писали:

M>Нужен покадровый просмотр видео.

M>Как я понял из документации покадровый просмотр видео можно осуществить либо с помощью интерфейса IVideoFrameStep
Все верно. Это штатное и, пожалуй, единственное средство которое есть из коробки.

M>либо с помощью метода IMediaSeeking::SetPosition, предварительно установив формат времени в TIME_FORMAT_FRAME.

Сам граф и его IMediaSeeking никак не обрабатывают вызов SetPosition, а делегируют его пинам сплитера. Дальше все зависит от него. Подавляющее большинство сплитеров поддерживают только TIME_FORMAT_MEDIA_TIME. Сплитеры же парсят сам видео контейнер, так что на самом деле все зависит от формата и разработчика.

M>В первом случае удается только реализовать только покадровый просмотр вперед и при этом слышны звуки, которые записаны в саундтреке, когда на экране данный кадр.

Ну просто не рендерите цепочку фильтров ответственных за звук.

M>Во втором случае при вызове метода IMediaSeeking::SetTimeFormat c аргументом TIME_FORMAT_FRAME возникает ошибка "Неверный параметр".

Значит ваш сплитер не поддерживает этот формат позиционирования.

M>Желательно организовать покадровый просмотр видео вперед и назад без звукового сопровождения, если на видео имеется саундтрек.

В рамках DirectShow, как готового фреймворка (без программирования собственного движка), проигрывание назад невозможно, в силу особенностей архитектурных решений положенных в его основу.
Re[2]: Покадровый просмотр видео.
От: Melamed Россия  
Дата: 14.02.19 14:41
Оценка:
Здравствуйте, Videoman, Вы писали:

M>>Желательно организовать покадровый просмотр видео вперед и назад без звукового сопровождения, если на видео имеется саундтрек.

V>В рамках DirectShow, как готового фреймворка (без программирования собственного движка), проигрывание назад невозможно, в силу особенностей архитектурных решений положенных в его основу.

Как я понял, под движком вы тут подразумеваете DirectShow фильтр или нечто большее?
Не подскажите, где найти литературу по созданию собственных DirectShow-фильтров.
Re[3]: Покадровый просмотр видео.
От: Videoman Россия https://hts.tv/
Дата: 14.02.19 20:36
Оценка:
Здравствуйте, Melamed, Вы писали:

M>Не подскажите, где найти литературу по созданию собственных DirectShow-фильтров.

Лучше начать от сюда. На самом деле там не много, но можно получить базовые представления о внутренней архитектуре DirectShow и с чего начать. Я видел в интернете пару книг по DirectShow, но про их качество и полезность ничего сказать не могу. Если нужно писать свои фильтры, я бы посоветовал посмотреть примеры фильтров. Мне, в свое время, это сильно помогло понять что и как устроено.

M>Как я понял, под движком вы тут подразумеваете DirectShow фильтр или нечто большее?

Для вашей задачи, думаю, нечто большее. Под движком, в первую очередь, я понимаю Filter Graph, и архитектуру DirectShow на нем основанную. К сожалению, это черный ящик, о внутренней логике работы которого можно только догадываться, особенно начинающему разработчику. Там используется достаточно не простая архитектура со сложной многопоточностью, стримами, фильтрами разного типа. Она не плохо подходит для проигрывания и записи отдельный файлов, но для задач типа нелинейной монтажки — увы. Сами фильтры DirectShow это просто COM объекты, которые при желании можно использовать как отдельные объекты вне графа и уже из них строить сколь угодно сложную логику.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.