FFmpeg编译WebAssembly记录

一、安装Emscripten

Emscripten是一个工具链,作用是通过LLVM来编译生成asm.js、WebAssembly字节码,目的是让你能够在网页中接近最快的速度运行C和C++,并且不需要任何插件。进入Emscripten的GitHub首页下载emsdk:

解压后进入目录输入一下命令配置emsdk:

emsdk.bat update 
emsdk.bat install latest 		
emsdk.bat activate latest	#激活已安装的Emscripten
emsdk_env.bat							#配置emsdk环境,每个控制台都需要执行
emcc -v 									#验证

./emsdk update 
./emsdk install latest 
./emsdk activate latest  	
source ./emsdk_env.sh 	#配置emsdk环境,每个控制台都需要执行
emcc -v 								#验证

二、编译FFmpeg

1、Windows下使用MinGW编译,双击msys/msys.bat,输入以下命令。在Linux下编译命令一样。

#!/bin/bash
./configure --arch=x86_64 --enable-shared --disable-yasm --prefix=/home/FFmpeg-n2.8.18/build/
make
make install

2、使用Emscripen,此方式编译的库只能用于wasm

#!/bin/bash
unzip FFmpeg-n2.8.18.zip
cd FFmpeg-n2.8.18/

make clean
source '/home/wuhao/programfiles/emsdk-3.0.0/emsdk_env.sh'

emconfigure ./configure --arch=x86_64 --enable-shared --disable-yasm --prefix=/home/wuhao/project/FFmpeg-n2.8.18/build-wasm/ \
--enable-gpl --enable-version3 \
--enable-cross-compile --target-os=none \
--disable-inline-asm --disable-asm --disable-stripping \
--ar=emar --cc=emcc --cxx=em++ --dep-cc=emcc --ranlib=emranlib --nm="/home/wuhao/programfiles/emsdk-3.0.0/upstream/bin/llvm-nm"
make 
make install

三、将c++代码编译成wasm

将已经实现功能的C++代码编译成wasm。

#!/bin/bash
export EXPORTED_FUNCTIONS="[ \
    _avformat_open_input, \
    _avformat_find_stream_info, \
    _avcodec_close, \
    _avformat_close_input, \
    _av_register_all, \
    _avformat_network_init, \
    _av_log_set_level, \
    _av_log_set_callback, \
    _av_read_frame, \
    _av_frame_alloc, \
    _avcodec_decode_video2, \
    _av_frame_free, \
    _av_free_packet, \
    _avformat_new_stream, \
    _avcodec_copy_context, \
    _av_dump_format, \
    _avio_open, \
    _avformat_alloc_context, \
    _av_guess_format, \
    _av_free, \
    _av_malloc, \
    _avcodec_find_decoder, \
    _avcodec_open2, \
    _avformat_free_context, \
    _avio_close, \
    _avpicture_fill, \
    _avpicture_get_size, \
    _sws_freeContext, \
    _sws_getContext, \
    _sws_scale, \

    _main, _InitInputStream, _CloseContext, _SaveFrameImage, _GetJsonData, _GetImageData
]"

export EXPORTED_RUNTIME_METHODS="[ \
    ccall, cwrap, printErr
]"

export TOTAL_MEMORY=134217728 
export FLIB="ffmpeg/lib-wasm"

echo "Running Emscripten..."
source '/home/wuhao/programfiles/emsdk-3.0.0/emsdk_env.sh'

em++ FfmpegHelper.cpp \
     ${FLIB}/libavcodec.a ${FLIB}/libavdevice.a ${FLIB}/libavfilter.a ${FLIB}/libavformat.a ${FLIB}/libavutil.a ${FLIB}/libswresample.a ${FLIB}/libswscale.a \
     -I ./ffmpeg/include \
     -o ./FfmpegHelper.html \
     -s WASM=1 \
     -s ALLOW_MEMORY_GROWTH=1 \
     -s TOTAL_MEMORY=${TOTAL_MEMORY} \
     -s EXPORTED_FUNCTIONS="${EXPORTED_FUNCTIONS}" \
     -s EXPORTED_RUNTIME_METHODS="${EXPORTED_RUNTIME_METHODS}"

chmod 777 ./*

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FFmpeg编译WebAssembly可以让您在浏览器中使用FFmpeg的功能。下面是一个概述的步骤: 1. 准备编译环境: - 安装Emscripten SDK,它是一个用于编译C/C++到WebAssembly的工具链。您可以从Emscripten官网下载和安装它。 2. 下载FFmpeg源代码: - 访问FFmpeg官方网站(https://ffmpeg.org/)并下载最新的源代码。 3. 配置编译选项: - 进入FFmpeg源代码目录,然后执行以下命令: ``` emconfigure ./configure --disable-static --enable-shared ``` 4. 编译FFmpegWebAssembly模块: - 执行以下命令进行编译: ``` emmake make ``` 5. 生成WebAssembly模块和JavaScript封装: - 执行以下命令将编译后的FFmpeg库转换为WebAssembly模块和JavaScript封装: ``` emcc -o ffmpeg.js -s EXPORTED_FUNCTIONS="['_functionName1', '_functionName2']" -s EXTRA_EXPORTED_RUNTIME_METHODS='["cwrap"]' ffmpeg.o ``` - 在上面的命令中,`_functionName1`和`_functionName2`是您想导出给JavaScript使用的函数名称。 6. 使用FFmpeg WebAssembly模块: - 在HTML文件中加载生成的ffmpeg.js和ffmpeg.wasm文件: ```html <script src="ffmpeg.js"></script> <script> const ffmpegModule = require('./ffmpeg.js'); // 使用导出的函数和方法进行操作 </script> ``` - 调用FFmpeg函数的示例代码: ```javascript const ffmpeg = ffmpegModule(); const command = '-i input.mp4 -c:v libvpx -c:a libvorbis output.webm'; ffmpeg.callMain(['ffmpeg', '-i', 'input.mp4', '-c:v', 'libvpx', '-c:a', 'libvorbis', 'output.webm']); ``` 这只是一个简单的概述,实际的编译和使用过程可能会更复杂。您可以根据您的需求和环境进行更多的调整和配置。另外,还可以参考Emscripten的文档和示例以获取更详细的指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值