Ffmpeg прерывается в изолированном приложении Electron

1

У меня есть приложение Electron, опубликованное в Mac AppStore, и песочница.

Я пытаюсь добавить новую функцию, которая будет кодировать/декодировать видео на лету, чтобы я мог передавать больше видеоформатов в электронном контексте.

Я использую fluent-ffmpeg и статический exec ffmpeg.

Все работает отлично, я загрузил приложение для песочницы в Apple и получил отклонение, потому что ffmpeg по умолчанию использует безопасный транспортный протокол, который использует непубличный API, это то, что они отправили мне с отказом:

Ваше приложение использует или ссылается на следующие непубличные API (ы):

'/System/Library/Frameworks/Security.framework/Versions/A/Security'

: SecIdentityCreate

Хорошо, после большого расследования, похоже, что мне нужно скомпилировать ffmpeg с флагом --disable-securetransport. Достаточно легко, я делаю это, используя ту же конфигурацию, что и статическая сборка, которую я загрузил, просто добавляя новый флаг.

Мне удаётся установить все зависимости, за исключением libxavs, без больших libxavs, и я просто удалю его флаг из команды configure:

./configure \
--cc=/usr/bin/clang \
--prefix=/opt/ffmpeg \
--extra-version=tessus \
--enable-avisynth \
--enable-fontconfig \
--enable-gpl \
--enable-libass \
--enable-libbluray \
--enable-libfreetype \
--enable-libgsm \
--enable-libmodplug \
--enable-libmp3lame \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-libopus \
--enable-libsnappy \
--enable-libsoxr \
--enable-libspeex \
--enable-libtheora \
--enable-libvidstab \
--enable-libvo-amrwbenc \
--enable-libvorbis \
--enable-libvpx \
--enable-libwavpack \
--enable-libx264 \
--enable-libx265 \
--enable-libxvid \
--enable-libzmq \
--enable-libzvbi \
--enable-version3 \
--pkg-config-flags=--static \
--disable-securetransport \
--disable-ffplay

С новым ffmpeg exec все работает, как и ожидалось. Но как только я упаковываю, подписываю и песочницу приложения, ffmpeg перестает работать, как только я пытаюсь запустить его, бросая эту ошибку:

An error occurred ffmpeg was killed with signal SIGABRT Error: ffmpeg was killed with signal SIGABRT
    at ChildProcess.eval (webpack:///../node_modules/fluent-ffmpeg/lib/processor.js?:180:22)
    at emitTwo (events.js:125:13)
    at ChildProcess.emit (events.js:213:7)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)

Я попытался удалить флаг --disable-securetransport, посмотреть, может ли он что --disable-securetransport, тот же результат.

Я попытался скомпилировать на машине Linux, просто чтобы убедиться, что это может помочь, то же самое.

Как только я использую свой собственный скомпилированный exec, он не работает в песочнице, но при использовании статического, все в порядке (после того, как я его xattr, потому что он помещен на карантин и заблокирован в песочнице).

Единственное, что я заметил, кажется странным, так это то, что моя пользовательская компиляция составляет всего 20 или около того, когда статическая установка, которую я загрузил, составляет 43 м.

Я действительно застрял в этом.

  • 0
    Попробуйте --extra-ldflags=-static --enable-static и --extra-ldflags=-static .
  • 0
    Спасибо, я пробую это. Не могу использовать --extra-ldflags=-static менее, всегда получаю сообщение об ошибке «Сбой теста компилятора» и кросс-компиляции. Пытаюсь без.
Показать ещё 5 комментариев
Теги:
ffmpeg
macos
electron
appstore-sandbox

1 ответ

0
Лучший ответ

Поэтому я, наконец, смог скомпилировать мой статический исполняемый файл ffmpeg.

Я нашел свое решение благодаря этому ответу.

По-видимому, OSX имеет динамические библиотеки, расположенные в /usr/local/bin которые имеют приоритет над всем остальным. Поэтому, даже если вы попытаетесь скомпилировать ваш ffmpeg как статичный, он не будет работать с этими библиотеками на этом пути.

Как только я удалю все эти /usr/local/bin/*.dylib моя сборка стала полностью статической и отлично работала в песочнице.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню