emsdk编译ffmpeg(unbuntu环境)

参考

Build ffmpeg for javascript(on ubuntu) - 知乎 (zhihu.com)

基础工具

sudo apt install build-essential git python3

emsdk安装

参考链接:Download and install — Emscripten 2.0.21 documentation

# Get the emsdk repo
git clone https://github.com/emscripten-core/emsdk.git

# Enter that directory
cd emsdk

# Fetch the latest version of the emsdk (not needed the first time you clone)
git pull

# Download and install the latest SDK tools.
./emsdk install latest

# Make the "latest" SDK "active" for the current user. (writes ~/.emscripten file)
./emsdk activate latest

# Activate PATH and other environment variables in the current terminal
source ./emsdk_env.sh

# Check the installation result
emcc --help

ffmpeg和编译

git clone https://github.com/FFmpeg/FFmpeg

cd FFmpeg

./configure --cc="emcc" --cxx="em++" --ar="emar" --prefix=$(pwd)/../ffmpegjs --enable-cross-compile --target-os=none --arch=x86_32 --cpu=generic     --enable-gpl --enable-version3 --disable-avdevice --disable-avformat --disable-swresample --disable-postproc --disable-avfilter     --disable-programs --disable-logging --disable-everything --enable-decoder=hevc --enable-decoder=h264     --disable-ffplay --disable-ffprobe --disable-asm --disable-doc --disable-devices --disable-network     --disable-hwaccels --disable-parsers --disable-bsfs --disable-debug --disable-protocols --disable-indevs --disable-outdevs

make && make install

# The following three static libraries will be generated:
# ../ffmpegjs/lib/libswscale.a
# ../ffmpegjs/lib/libavutil.a
# ../ffmpegjs/lib/libavcodec.a

编译ffmpeg.js和ffmpeg.wasm file

参考链接:无插件解码H264&H265播放视频 - 知乎 (zhihu.com)

# 256M (256*1024*1024)
export TOTAL_MEMORY=268435456

# You must not write any non-ascii character to EXPORTED_FUNCTIONS, or else a failure like "'ascii' codec can't decode byte 0x80 " may happen. 
# Configure your EXPORTED_FUNCTIONS according to the ffmpeg version.
export EXPORTED_FUNCTIONS="[ \
        '_avcodec_register_all', \
        '_avcodec_find_decoder', \
        '_avcodec_alloc_context3', \
        '_avcodec_free_context', \
        '_avcodec_open2', \
        '_av_free', \
        '_av_frame_alloc', \
        '_avcodec_close', \
        '_avcodec_decode_video2', \
        '_av_init_packet', \
        '_av_free_packet', \
        '_sws_freeContext', \
        '_sws_getContext', \
        '_sws_scale', \
        '_av_new_packet', \
        '_av_malloc', \
        '_avpicture_get_size', \
        '_avpicture_fill', \
        '_av_get_cpu_flags', \
        '_av_dict_set', \
        '_av_dict_free' \
]";

编译:

emcc ../ffmpegjs/lib/libavcodec.a ../ffmpegjs/lib/libavutil.a ../ffmpegjs/lib/libswscale.a -s RESERVED_FUNCTION_POINTERS=1 -s INLINING_LIMIT=1 -s ALLOW_MEMORY_GROWTH=1 -s ABORTING_MALLOC=0 -s DISABLE_EXCEPTION_CATCHING=0 -s TOTAL_MEMORY=${TOTAL_MEMORY} -s EXPORTED_RUNTIME_METHODS="${EXPORTED_FUNCTIONS}" -s EXPORTED_RUNTIME_METHODS="['cwrap','ccall','addFunction']" --llvm-lto 1 --memory-init-file 0 -O3 -o ffmpeg.js

现在ffmpeg.js ffmpeg.wasm ffmpeg.js.mem应该可以使用了,只要在HTML中挂载ffmpeg.js后就可以引入相关的API:

<script type="text/javascript" src="ffmpeg.js"></script>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值