Emscripten 编译FFmpeg

3,836 阅读1分钟

emsdk 1.39.0以上使用upstream 不再使用fastcomp,可以指定安装相应版本,我是在mac os 上编译

(1)   安装,GitHub下载EMSDK,进入目录,指定版本安装
./emsdk install 1.38.48 
./emsdk install sdk-1.38.48-64bit
./emsdk install fastcomp-1.38.48

(2)  激活使用, 命令只在当前命令行有效
./emsdk activate 1.39.48
source ./emsdk_env.sh

(3)  检验安装是否成功
emcc --clear-cache


emsdk version 1.38.48
fastcomp 1.38.48
ffmepeg version 4.2.2

** 安装完EMSDK,进入下载完的FFMpeg目录。三种编译命令的尝试 **

(1)没有bin 目录生成 ,去掉stripping可以生成bin文件
CPPFLAGS="-D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600" \
emconfigure ./configure --cc="emcc" --cxx="em++" --ar="emar" \
--enable-cross-compile --target-os=none --arch=x86_64 --cpu=generic \
--prefix=$(pwd)/../dist  --disable-ffplay --disable-ffprobe --disable-asm --disable-doc \
--disable-devices --disable-pthreads --disable-w32threads --disable-network --disable-stripping \
--enable-gpl --enable-version3 --disable-avdevice --disable-avformat --disable-swresample --disable-postproc --disable-avfilter \
--disable-hwaccels --disable-parsers --disable-bsfs --disable-debug \
--disable-protocols --disable-indevs --disable-outdevs --enable-protocol=file \
--disable-encoders \
--disable-demuxers --enable-demuxer=aac  --enable-demuxer=hevc --enable-demuxer=flv \
--disable-decoders --enable-decoder=aac --enable-decoder=hevc 

(2)编译成功 生成bin目录, 生成大小5M, ***注意需要在make完后 去修改config.mak 注释 RANLIB=ranlib***
 emconfigure ./configure --cc="emcc" --cxx="em++" --ar="emar" \
 --enable-cross-compile --target-os=none --arch=x86_64 --cpu=generic \
 --prefix=$(pwd)/../dist  --disable-ffplay --disable-ffprobe --disable-asm --disable-doc \
--disable-devices --disable-pthreads --disable-w32threads --disable-network \
--disable-hwaccels --disable-parsers --disable-bsfs --disable-debug \
--disable-protocols --disable-indevs --disable-outdevs --enable-protocol=file \
--disable-encoders --disable-decoders --enable-decoder=aac --enable-decoder=hevc


(3)没有avfilter 编译通过
emconfigure ./configure --cc="emcc" --cxx="em++" --ar="emar" --ranlib=emranlib \
--enable-cross-compile --target-os=none --arch=x86_32 --cpu=generic \
--prefix=$(pwd)/../dist  --disable-ffplay --disable-ffprobe --disable-asm --disable-doc \
--disable-devices --disable-pthreads --disable-w32threads --disable-network \
--disable-hwaccels --disable-parsers --disable-bsfs --disable-debug --disable-avfilter \
--disable-protocols --disable-indevs --disable-outdevs --enable-protocol=file \
--disable-avdevice --disable-postproc  --disable-avdevice --disable-swresample \
--disable-demuxers --enable-demuxer=aac  --enable-demuxer=hevc --enable-demuxer=flv \
--disable-encoders --disable-decoders --enable-decoder=aac --enable-decoder=hevc

完了之后 sudo emmake make , sudo emmake make install即可

// 带上则不会生成bin 目录 --disable-avfilter \

生成makefile指令后要到ffmpeg目录下的ffbuild 打开config.mak 注释 RANLIB=ranlib , 也可以配置--ranlib=emranlib, 测试是否生成bin目录与ranlib有没有关系

…/lib/libavformat.bc …/lib/libavcodec.bc …/lib/libswscale.bc …/lib/libswresample.bc …/lib/libavutil.bc 库有依赖顺序

emcc ffmpeg.bc -Os -s WASM=1 -s EXTRA_EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' -s ALLOW_MEMORY_GROWTH=1 -o ffmpeg.js

官网连接 emcc.zcopy.site/docs/tools_…