开发流程
1、下载emsdk,部署Emscripten编译环境
2、使用Emcsripten裁剪编译FFmpeg
3、使用裁剪后的FFmpeg库编写WEB所需的解码接口
4、导出对于的接口,生产wasm及js文件
Emscripten是什么
Emscripten是一个工具集,包含了将C、C++编译为WebAssembly所需的完整工具(LLVM、Node.js、Python、Java等),优点是不依赖于编译环境。
注:Emscripten 1.37.3才开始正式支持WebAssembly
emsdk是什么
emsdk是一组基于python2的脚本,用来下载并安装Emscripten
source ./emsdk_env.sh
Adding directories to PATH:
PATH += /project/wasm/emsdk
PATH += /project/wasm/emsdk/upstream/emscripten
PATH += /project/wasm/emsdk/node/14.15.5_64bit/bin
Setting environment variables:
PATH = /project/wasm/emsdk:/project/wasm/emsdk/upstream/emscripten:/project/wasm/emsdk/node/14.15.5_64bit/bin:/home/fj/.local/bin:/home/fj/.bin:/usr/local/lib/nodejs/node-v12.22.5-linux-x64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin##
EMSDK = /project/wasm/emsdk
EM_CONFIG = /project/wasm/emsdk/.emscripten
EMSDK_NODE = /project/wasm/emsdk/node/14.15.5_64bit/bin/node
emcc -v
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 2.0.34 (0d24418f0eac4828f096ee070dae8472d427edaa)
clang version 14.0.0 (https://github.com/llvm/llvm-project 3d39612b3dd3f6b67ee63da305d30606abbe7287)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /project/wasm/emsdk/upstream/bin
./emsdk list
The recommended precompiled SDK download is 2.0.34 (d8fc1b92dbc0ce8d740a7adb937c5137ba4755e0).
Those are equivalent to installing/activating the following:
2.0.34 INSTALLED
All recent (non-legacy) installable versions are:
2.0.34 INSTALLED
The additional following precompiled SDKs are also available for download:
sdk-releases-upstream-cef8850d57278271766fb2163eebcb07354018e7-64bit
* sdk-releases-upstream-d8fc1b92dbc0ce8d740a7adb937c5137ba4755e0-64bit
The following precompiled tool packages are available for download:
releases-upstream-cef8850d57278271766fb2163eebcb07354018e7-64bit
() releases-upstream-d8fc1b92dbc0ce8d740a7adb937c5137ba4755e0-64bit INSTALLED
releases-fastcomp-edf24e7233e0def312a08cc8dcec63a461155da1-64bit
releases-fastcomp-536568644fd67d53778f6111fdd5f64ad3f4c539-64bit
fastcomp-clang-e1.38.30-64bit
fastcomp-clang-e1.38.31-64bit
() node-14.15.5-64bit INSTALLED
emscripten-1.38.30
emscripten-1.38.31
make clean
emconfigure ./configure --cc=“emcc” --cxx=“em++” --ar=“emar” --ranlib=“emranlib” --prefix=$(pwd)/…/ffmpeg-wasm/ffmpeg-lite --enable-cross-compile --target-os=none --arch=x86_32 --cpu=generic
--enable-gpl --enable-version3
--disable-swresample --disable-postproc --disable-logging --disable-everything
--disable-programs --disable-asm --disable-doc --disable-network --disable-debug
--disable-iconv --disable-sdl2 \ # 三方库
--disable-avdevice \ # 设备
--disable-avformat \ # 格式
--disable-avfilter \ # 滤镜
--disable-decoders \ # 解码器
--disable-encoders \ # 编码器
--disable-hwaccels \ # 硬件加速
--disable-demuxers \ # 解封装
--disable-muxers \ # 封装
--disable-parsers \ # 解析器
--disable-protocols \ # 协议
--disable-bsfs \ # bit stream filter,码流转换
--disable-indevs \ # 输入设备
--disable-outdevs \ #输出设备
--disable-filters \ # 滤镜
--enable-decoder=hevc \
--enable-parser=hevc
make
make install
echo “Beginning Build:”
rm -r dist
mkdir -p dist
cd FFmpeg
make clean
emconfigure ./configure --cc=“emcc” --cxx=“em++” --ar=“emar” --prefix=$(pwd)/…/dist --enable-cross-compile --target-os=none
–arch=x86_32 --cpu=generic --enable-gpl --enable-version3 --enable-small
–disable-runtime-cpudetect --disable-avdevice --disable-swresample --disable-postproc --disable-avfilter --disable-logging
–disable-ffplay --disable-ffprobe --disable-asm --disable-doc --disable-ffmpeg --disable-programs --disable-devices --disable-network --disable-hwaccels
–disable-parsers --disable-bsfs --disable-debug --disable-indevs --disable-outdevs
–disable-decoders --disable-encoders --disable-protocols --disable-demuxers --disable-muxers
–enable-avformat --enable-decoder=hevc --enable-decoder=h264 --enable-decoder=mjpeg --enable-decoder=aac --enable-parser=aac
make -j4
make install