# wasm环境配置
> wasm需要使用Emscripten进行编译,本次使用的系统版本为 `ubuntu21.04`
## 搭建 `Emscriptien` 编译环境
### 1.安装依赖包 `python3` `cmake` `java`
```shell
# 安装python
sudo apt-get install python

# 安装cmake
sudo apt-get install cmake

#安装 java
sudo apt-get install default-jre
```
### 2.获取并且安装 `emsdk` , [官网地址](https://emscripten.org/docs/getting_started/downloads.html)
```shell
git clone https://github.com/emscripten-core/emsdk.git

# 等待安装完成后进入emsdk文件夹
cd emsdk
```
### 3.开始安装emsdk
#### 1. 安装
> 执行官方给的命令进行处理,官方命令处理后是本次执行有环境变量,退出终端后会刷新,原作者给了一个加入到打开终端自动加载的方式
```shell
    # 下载安装依赖工具,该步骤会自动下载最新稳定版的nodejs
    ./emsdk install latest

    # 激活sdk
    ./emsdk activate latest

    # 刷新环境变量
    source ./emsdk_env.sh

    # 如果需要打开终端自动加载环境变量则执行此操作
    vim ~/.bashrc
    # 在文件最后一行加上下面命令,其中 path_to_emsdk 为 emsdk 的路径
    source path_to_emsdk/emsdk_env.sh
```
#### 2. 测试 `emsdk` 环境
#####  1. 创建一个简单的 `test.c` 文件
```c
#include <stdio.h>

int main(){
    printf("hello,WOrld!\n");
    return 0;
}
```
##### 2. 编译 `test.c` 文件
该步骤将会生成三个文件 `test.html` , `test.js` , `test.wasm` 测试页面,调用js,二进制库
```shell
emcc test.c -o test.html
```
##### 3. 测试是否正常使用
> 有两种测试方式,都依赖于 `node` 环境 在安装 `emsdk` 时已经进行安装了,直接用就行
<!-- tabs:start -->
###### 方案1
通过npm全局安装并启动一个静态服务器,然后在浏览器访问 127.0.0.1:9080  
```shell
npm install -g static-server

static-server
```

###### 方案2
使用nodejs直接执行 `test.js` 文件  
```shell
node ./test.js
```
<!-- tabs:end -->

上方安装 `emsdk` 参考于 [https://github.darkgod.online/docs/emscripten/ffmpeg](https://github.darkgod.online/docs/emscripten/ffmpeg)

## 编译ffmpeg
精简编译,只保留 `h264` 解码器

```

    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 \
    --disable-indevs \
    --disable-outdevs \
    --disable-filters \
    --enable-decoder=h264 \
    --enable-parser=h264
```