ПрограммированиеФорумОбщее

AVI воспроизведение сжатого видео

#0
0:48, 12 апр 2011

Всем доброго времени суток!

Суть проблемы: В Win7/Vista код воспроизведения avi работал прекрасно. Делалось просто aviStreamOpenFromFile/dibDrawOpen и т.п. Кадр получал нормально. При условии, что кодек которым жали данные avi, в системе есть. Все было хорошо, до тех пор, пока я не решил попробовать запустить конвертер на ХР.

Половину файлов конвертер в принципе не открыл. aviStreamOpenFromFile провалилась, хотя кодеки установлены гарантированно и тот же Media Player играет это видео. Далее я переконвертил файлик в mjpeg, т.е. фактически чистый жыпег по кадрам. О чудо! поток из файла открылся, но вместо кадра - черный экран. Хотя GetFrameOpen и иже с ним возвращают валиндый поинтер и т.п. В Vista/Win7 были похожие проблемы когда забыл dib создать для контекста кодека в системе. Но тут то он создается, ибо работал код.

Кто нить знает как по феншую воспроизвести avi через vfw, чтобы с описаниями всяких подводных камней и т.п.?

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

PS: ffmpeg уже ковыряю, но там чистый код, а хотелось бы почитать теорию, что и как, для чего, куда и чем :)

Так. Проблема черного кадра успешно решена. Осталось разобраться почему aviStreamOpenFromFile валится при попытке открыть файл.
Таак. Опытным путем удалось установить, что НЕ откарываются файлы с id кодеков которые явно не парсятся даже mediaInfo, т.е. допустим codecId=0xE0, это типа MPEG4 семейство, а что конкретно за кодек фиг поймешь.

#1
9:00, 12 апр 2011

DirectShow + GraphEdit из DXSDK, не ? 

http://directshow.wonderu.com/статьи
http://2developers.net/post/com_direct_show_1.html

#2
10:54, 12 апр 2011

Нет.

DShow у меня есть. Насколько я посмотрел там нет возможности выдирать кадры. Там только чистое воспроизведение видео. Мне же нужно другое.
Вообщем докопал я исходники ffmpeg. Решил пока оставить так, если codecId не известен, то файл не открываем и сообщаем юзеру. Не очень юзабельно, но писать тучу кода, наплодить еще больше багов, и еще дольше все это отлаживать как то не хоцца.

Если будет еще инфа какая то, буду признателен.

PS: Ээээхх, вот бы исходники VirtualDub-а поковырять.

#3
11:22, 12 апр 2011

Мух
> Насколько я посмотрел там нет возможности выдирать кадры.

Напиши фильтр, получающий кадры и подключи его в качестве выводилки,... в чём проблема-то? Сам по себе фильтр должен получиться примитивным

#4
13:03, 12 апр 2011

> Ээээхх, вот бы исходники VirtualDub-а поковырять.
А что мешает, сорцы вполне доступны?

#5
15:18, 12 апр 2011

А где их взять? Господа камрады поделитесь :)

#6
15:50, 12 апр 2011

Не поверишь,...

Здесь http://virtualdub.sourceforge.net/  вот это http://sourceforge.net/projects/virtualdub/files/virtualdub-win/1… c.7z/download

#7
18:32, 12 апр 2011

Выдирать кадры, типа скриншотов? SampleGrabber - фильтр есть такой, как раз для этого и существует.
Либо 0iStalker отлично посоветовал.

При этом DirectShow имеет больше контроля над происходящим чем основные другие методы реализации подобной задачи.

#8
21:31, 12 апр 2011

0iStalker
> Не поверишь,...
Однако обленился :) Спасибо большое!

Вообщем камрады спасибо! Сегодня за 4 часа написал оберточку для граба, оставив старую логик и новую, если старая не сработает. Пока полет нормальный. Осталось похардтестить на баги.

Тема закрыта. Все еще раз большое спасибо!

ПрограммированиеФорумОбщее

Тема в архиве.

Тема закрыта.