我有一个Electron应用程序,在Mac AppStore上发布并进行了沙箱处理。
我正在尝试添加一个新功能,以便在Electron环境中流式传输更多视频格式,这需要实时编码/解码视频。
我使用 fluent-ffmpeg 和 static exec of ffmpeg 。
一切都很完美,我已经将沙箱应用上传到Apple,但被拒绝了,因为ffmpeg默认使用安全传输协议,该协议使用非公共API。这是他们拒绝的原因: > 您的应用程序使用或引用以下非公开API: > '/ System / Library / Frameworks / Security.framework / Versions / A / Security' >:SecIdentityCreate 经过详细调查后,发现我必须自己编译ffmpeg,并使用
我正在尝试添加一个新功能,以便在Electron环境中流式传输更多视频格式,这需要实时编码/解码视频。
我使用 fluent-ffmpeg 和 static exec of ffmpeg 。
一切都很完美,我已经将沙箱应用上传到Apple,但被拒绝了,因为ffmpeg默认使用安全传输协议,该协议使用非公共API。这是他们拒绝的原因: > 您的应用程序使用或引用以下非公开API: > '/ System / Library / Frameworks / Security.framework / Versions / A / Security' >:SecIdentityCreate 经过详细调查后,发现我必须自己编译ffmpeg,并使用
--disable-securetransport
标志。很容易,我使用与下载的静态构建相同的配置简单地添加了新标志。
我设法安装了所需的所有依赖项,除了 libxavs
,我猜这没什么大不了的,只需从配置命令中删除其标志即可:
./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
标志,看看它是否会对某些东西造成影响,但结果相同。
我尝试在Linux机器上编译,只是想看看它是否有所帮助,但结果也一样。
只要我使用自定义编译的可执行文件,它就无法在沙盒中工作,但是当使用静态安装文件时,一切正常(之后我需要xattr
它,因为它被隔离并在沙盒中被阻止)。
我唯一注意到的奇怪事情是,我的自定义编译只有20兆左右,而我下载的静态安装文件则为43兆。
我真的陷入了困境。
--enable-static
和--extra-ldflags=-static
进行编译。 - Gyan--extra-ldflags=-static
,总是出现关于“C编译器测试失败”和交叉编译的错误。我会尝试不使用这个选项。 - Yoannldd <your-exec>
显示了什么? - Gyan