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

Как сделать воспроизведение роликов (скачанных ютуба, в т.ч. в webm) в своём движке? [C++, DirectX9]

Страницы: 1 2 3 Следующая »
#0
23:32, 1 июня 2021

Всем привет.

Есть пара роликов на ютубе. Один хочу чтобы воспроизводился при запуске игры -- типа стартовый ролик, а второй -- воспроизводился зацикленно на заднем фоне главного меню. Игра, а точнее пока технодемка, сделана на самопальном движке: С++, DirectX 9, x86, C++ Builder 6.

Так вот, вопрос из заголовка: как сделать воспроизведение этих роликов?

(И, да, я в воспроизведении видосов нуб.)

(И походу в кодинге тоже не оч... а то бы уже нагуглил ответ.)

==========

Далее, мои соображекния, на основе той инфы что смог нагуглить.

Во-первых, даны ссылки на ролики на ютубе, но вероятно меня распнут, если юзеру придётся что-то скачивать с инета, так что придётся скачать их за него... Но тогда возникает вопрос: в каком формате? Как минимум, возможны: webm, mp4, причём можно как со звуком, так и отдельно аудиодорожку и видеоряд. (но там вроде есть ещё парочка вариантов.) Так что этот момент придётся уточнить... Но по дефолту, мне предлагают скачать полноценный webm (т.е. видео со звуком), да и в целом он мне както больше нравится чем mp4. (хз вообще чем mp4 отличается от вебм, я в форматах почти не шврю..)

Далее, доаустим у меня есть видеофайл, как его воспроизвести прораммно? Судя по гуголу, основные варианты: либо заюзать некую библиотеку, либо заюзать WinAPI для работы с видео, либо сделать в самопальном формате (обычно несжатый архив с jpeg-кадрами, либо fla-видео как в CryEngine).

И допустим я как-то смогу получить данные кадра из видео, но как его отрендерить? Ну, с стартовой заставкой всё просто -- наверное есть какаято функция чтобы "воспроизвести полноэкранно ролик от и до", а вот что делать с роликом которй должен стать фоном главного меню? Типа дёргать кадры по одному, запихивать изображение из них в текстурину и рендерить эту текстурину? Или как?

Короче, в какую сторону хоть гуглить?


#1
2:36, 2 июня 2021

https://gamedev.net/forums/topic/581287-solvedplaying-video-filea… 01221/?page=2
Скопируй с семплов или исходников какогонить сталкера.

#2
12:36, 2 июня 2021

Silen#ID

Если кодеки в системе есть, гугли в сторону DirectShow. Если нет (и ты не хочешь их с собой таскать или нет возможности их установить), то в сторону ffmpeg, но там придётся написать свой плеер - он отдаст тебе кадры и звук, а сводить их придётся вручную. Примеров и для первого и для второго море.

#3
13:54, 3 июня 2021

Silen#ID
> Во-первых, даны ссылки на ролики на ютубе, но вероятно меня распнут, если юзеру
> придётся что-то скачивать с инета, так что придётся скачать их за него...
Почему-бы просто не включить ролики в дистрибутив?

> Но тогда возникает вопрос: в каком формате?
Если влючить ролики в дистр то можно в любом, в той-же theora.

> Типа дёргать кадры по одному, запихивать изображение из них в текстурину и
> рендерить эту текстурину? Или как?
Ну да, примерно так.

#4
3:59, 10 июля 2021

Насколько я знаю видео всегда проигрывается с помощью библиотеки libogg. Качаешь с ютуба, конвертируешь в формат ogg, проигрываешь у себя в игре. Может что то поменялось я хз.

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

#5
4:21, 10 июля 2021

ага. только не забывай что огг это формат аудио, в последней обнове вин 10 его сломали совсем и он не обрабатывается системой. на ютубе аудио хранится в формате опус. а видео в формате мп4 и вебм

#6
(Правка: 8:37) 8:34, 10 июля 2021

ИПавлов
Через ffmpeg кодируешь видео в theora и контейнер ogv, а аудио в ogg, воспроизводишь либами с theora.org вкомпиленными в твой бинарь и чихаешь на то, какие кодеки есть в винде. Эти форматы хороши тем, что некому докопаться до алгоритмов, а у либ лицензия позволяет статически линковать хоть в свободный, хоть в коммерческий код.

#7
13:05, 10 июля 2021

Хранить отдельными кадрами не вариант, эдак оно раз в сто больше места займет, чем в видеоформатах.
В видеоформатах хранятся редкие опорные кадры и изменения к ним.
Чем avi не устраивает? У тебя же все чисто виндовое, переносимость не требуется. Вот и проигрывай штатными средствами.

А почему завязка на dx9? Чтобы WinXP поддерживать? Это кому-нибудь сегодня нужно? WinXP не мертва? Под ней же даже по интернету уже не полазать, половину сайтов просмотреть не сможешь, включая ютуб.

#8
19:43, 10 июля 2021

Zab
> половину сайтов просмотреть не сможешь, включая ютуб.
Сейчас пищу под XP-шкой. В отдельном окне работает Ютуб.
Zab
> Хранить отдельными кадрами не вариант
А кто-то предложил хранить отдельными кадрами?
Предлагают добывать каждый следующий кадр через ffmpeg из видеоформата, не редкий ключевой файл, а каждый следующий кадр видеоряда.

#9
(Правка: 20:57) 20:53, 10 июля 2021

Когда делал проигрыватель mp4 в своей игре, использовал ffmpeg CLI (т.е. не линковал ffmpeg даже динамически). Каждый кадр формировал битмапу и отправлял на gpu. Гонять несжатый видеоряд по шине и пайпу - явно не оптимальный вариант, но в моем случае (короткие зацикленные ролики с небольшим разрешением) работало прекрасно.

#10
22:46, 10 июля 2021

В ZenGL и его форках давно реализовано декодирование сторонними либами тхеоры и ворбиса. Этой технологии уже с десяток лет. Можно посмотреть и перенести на плюсы. Для коротких роликов зоопарк кодеков и жирный декодировщик не нужен. А с ffmpeg при использовании редких фич имеются траблы - в новых версиях их могут сломать, а если пользователь станет качать самую свежую, то будет играть в лотерею. ffmpeg хорош когда не надо качать новые версии - скачал одну с нужными фичами и пользуйся ей до победного конца. Игрокам такое предложить не получится, потому что нужная версия хранится в тырнете не вечно и у них уже может быть более новая.

#11
(Правка: 23:58) 23:35, 10 июля 2021

Skvoznjak
Можно поставлять нужную версию ffmpeg вместе с игрой. Лицензия позволяет.

#12
1:19, 11 июля 2021

kkolyan
Можно. И будет после распаковки весить >120Мб. Это окупается если видео надо проигрывать много, а если мало и разрешение не огромное, то можно файл жирно закодировать типа вот так

ffmpeg -i file.avi -vcodec libtheora -pix_fmt yuv444p  -b 5000k -bt 8500k  new_file.ogv
и обойтись в игре без ffmpeg. У libtheora такая особенность, что если хочешь чтобы в файл влилось больше битрейта, то пиши в кодирующую команду в разы больше. Битрейтом можно подобрать какой палитрой кодек раскрасит видео. Кодируешь с разным битрейтом и выбираешь ту версию, в которой цвета более прикольного оттенка. Если видео короткое, то с битрейтом можно играть как угодно и всё равно весить всё вместе в итоге будет меньше, чем при использовании тяжёлого проигрывателя.

#13
1:35, 11 июля 2021

А если попытаться вложить свой ffmpeg в линуксовую сборку игры, то там всё грустно из-за зависимостей.

#14
(Правка: 3:18) 3:16, 11 июля 2021

Skvoznjak
> И будет после распаковки весить >120Мб
У меня для винды 46Мб получилось.

PS: а, ты про то, что по лицензии мы должны исходники ffmpeg прикладывать к игре?

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумОбщее