Комментарии 20
Недавно пришлось собирать ffmpeg под Windows компилятором MSVC. И знаете — я чуть не помер.
FFMpeg – большой, в его состав входит и FFPlay – консольный видео проигрыватель. А эта штука уже поинтересней будет для компиляции под «Форточки». Можно внедрить его в свое оконное приложение, как это, скажем, сделал я. Например, у меня есть неопубликованная программа «МедиаТекст».

http://scholium.webservis.ru/Pics/MediaText.png
Вот, с компиляцией «FFPlay.c» пришлось повозиться, поэтому, я вполне понимаю ваши трудности, тем более, что на Гитхабе я так ничего путного и не нашел.
В итоге, я преобразовал Си-код в классы С++, что и позволило мне скомпилировать проект. Неплохо получилось, в итоге.
Очень интересное решение! Я правильно понял, что вы просто забрали исходный код и попытались скомпилировать его с нуля в обход их системы сборки?
Так же интересуют подробности по внедрению целого ffplay в свое приложение. Я знаком с ffplay, и даже использовал его несколько раз в своих нуждах. Но я так понимаю - это само по себе готовое приложение, использующее библиотеку ffmpeg, просто очень тесно вплетенное в репозиторий и даже собирающееся по дефолту системой сборки. Вы судя по всему просто адаптировали код ffplay.c под свои нужды и как-то встроили в код своего приложения? Фактически, это модификация ffplay, или обвязка вокруг него, если можно так сказать?
Очень интересное решение!
Да, мне самому нравится! :)
Я правильно понял, что вы просто забрали исходный код и попытались скомпилировать его с нуля в обход их системы сборки?
Правильно!
Так же интересуют подробности по внедрению целого ffplay в свое приложение. Я знаком с ffplay, и даже использовал его несколько раз в своих нуждах. Но я так понимаю - это само по себе готовое приложение, использующее библиотеку ffmpeg, просто очень тесно вплетенное в репозиторий и даже собирающееся по дефолту системой сборки. Вы судя по всему просто адаптировали код ffplay.c под свои нужды и как-то встроили в код своего приложения? Фактически, это модификация ffplay, или обвязка вокруг него, если можно так сказать?
Да, это модификация файла «FFPlay.c», который был преобразован в классы «FFPlay.cpp».

http://scholium.webservis.ru/Pics/FFPlay.png
Каталоги включения:
./Main;./FFPlay;
../../Include;../../Include/FFmpeg;
../../Include/SDL2;
$(VC_IncludePath);
$(WindowsSdk_71A_IncludePath);
$(VCInstallDir)include;
$(VCInstallDir)atlmfc\include;
$(WindowsSdkDir)include;
$(FrameworkSDKDir)\include;
Используемые библиотеки:
avcodec.lib
avdevice.lib
avfilter.lib
avformat.lib
avutil.lib
postproc.lib
SDL2.lib
swresample.lib
swscale.lib
Соответственно, для работы приложения нужны аналогичные dll.
Код, за пределами модуля «FFPlay», я не модифицировал.
В принципе, собираюсь делать вторую версию этой программы, тогда и опубликую ее код.
P.S. Чем мне еще нравиться используемый медиа-проигрыватель, так это возможностью работы с mp3-файлами и файлами изображений (когда хочется, допустим, нецифровой pdf, т.е., просто набор сканов преобразовать, вручную, в текст. Для иностранных текстов это не слишком напрягает, так как, метод «запоминание руками» это базовый метод моей обучающей программы «L'école» (см. мои статьи здесь).
Вы заставили меня очень сильно задуматься) В том смысле, что я фактически сейчас пишу проигрыватель с нуля не опираясь на ffplay и сейчас задаюсь вопросом, действительно ли оно мне надо - все-таки это не так просто, особенно в паре с аудио.
Я смотрел на реализацию плеера ffplay.c за вдохновением, но вдохновения не случилось, потому что там все очень заковыристо :) Но если пойти вашим путем и замести все эти заковырки за красивый фасад, то кому какое дело. Я попробую посмотреть в эту сторону, спасибо за идею
если пойти вашим путем и замести все эти заковырки за красивый фасад, то кому какое дело
Да, этот путь вполне рабочий. Все сопутствующие dll:
avcodec-58.dll
avdevice-58.dll
avfilter-7.dll
avformat-58.dll
avutil-56.dll
libfreetype-6.dll
postproc-55.dll
SDL2.dll
swresample-3.dll
swscale-5.dll
занимают более 72 мегабайт, а моя программа Main64r.exe – менее 530 килобайт. Все вместе это немного громоздко, зато полностью собственное решение.
Файлы «FFPlay.cpp» и «FFPlay.h» вместе дают чуть более 200 килобайт. Файл «Defs.h» почти 100%-но родной, я там поправил какую-то мелочь. Именно там идет ссылка на все библиотеки поддержки.
Так, что переработать вручную 200 килобайт опенсорсного кода, не должно быть слишком трудной задачей.
Еще большим плюсом, для себя, я считаю использование сверхлегкого фреймворка WTL, с общим размером, в исходниках, менее полутора мегабайт. В моем проекте, он мне сильно помог.
Что-то мне даже в голову не приходят причины почему можно захотеть собирать ffmpeg руками. На официальном сайте есть ссылки на аж два разных места где есть актуальные сборки из мастер ветки в разных вариантах.
https://www.ffmpeg.org/download.html#build-windows
Одно из мест собирает их на гитхабе поэтому если надо собрать какую-то особенную сборку можно просто форкнуть репозиторий и подкрутить CI/CD:
https://github.com/BtbN/FFmpeg-Builds/blob/master/.github/workflows/build.yml
да, мне нужна была кастомная сборка
мне если честно ваш вариант с форком не пришел в голову, так же как вам мой :) а что, таким образом можно будет получить сборку msvc-тулчейном?
Что-то мне даже в голову не приходят причины почему можно захотеть собирать ХХ руками.
Джедаи опенсорса могут движением мысли исправлять баги, уязвимости и исправлять программы движением мысли.
Так что это всего лишь желание познать путь
Там сборка gcc. А вообще msvc легко ломается https://github.com/FFmpeg/FFmpeg/commit/3c03048837dd72df38dabecc4c23258d67612548
Отдельный квест — найти собранные библиотеки и заголовочные файлы для того, чтобы потом можно было их использовать в своем проекте.
`configure --prefix=...` и потом `make install` вам чем не нравится?
А можно ли как-то собрать минимальную сборку? Допустим мне нужно работать только с аудио и только с ogg и mp3.
Есть ли возможность скомпилировать крохотный ffmpeg?
Так а в чём сложность то? Насколько вижу - просто получили шелл msys с настроенным окружением VC и дальше ./configure;make , из нетривиального разве что спрятать link от msys и "удаляем rem из строки rem set MSYS2_PATH_TYPE=inherit".
Лет пятнадцать назад надо было по работе собрать Chromium на Windows XP с немного пропатченным V8 - там танцы с бубном начинались уже с протаскиванием репозиторев через корпоративный прокси.
В vcpkg давно есть рецепт под сборку этой хрени.
На гитхабе есть кросс-компилятор прямо в образах докера - нужен просто докер под любой ОС и получаются хорошие бинарники - сам их использую, собирал в Убунте.

Собираем ffmpeg под Windows