0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

WebAssembly技术_编译ffmpeg(ubuntu)

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-08-14 09:43 次阅读

1. 前言

WebAssembly/wasm WebAssembly 或者 wasm 是一个可移植、体积小、加载快并且兼容 Web 的全新格式。

WebAssembly的名字带个汇编Assembly,所以我们从其名字上就能知道其意思是给Web使用的汇编语言,是通过Web执行低级二进制语法。

但是WebAssembly并不是直接用汇编语言,而提供了抓换机制(LLVM IR),把高级别的语言(C,C++和Rust)编译为WebAssembly,以便有机会在浏览器中运行。主要是解决目前JS语言的效率问题,设计立足点为快速,内存安全和开放。所以是一种运行机制,一种新的字节码格式(.wasm)

官网介绍: https://www.wasm.com.cn/

2. 安装ubuntu 20.04

ubuntu20.04 安装emcc编译最方便,只需要简单的几个命令即可完成。

镜像下载地址: http://mirrors.aliyun.com/ubuntu-releases/20.04/

image.png


image.png

下载之后,安装系统。

我这里使用VMware Workstation Pro 15.5 虚拟机安装系统。

安装的过程就不多说了,常规步骤,都比较简单。

image.png


image.png

系统安装完毕之后需要安装vmtools工具才可以放大自适应桌面,访问共享目录,支持复制粘贴。
如果在下拉菜单里,安装vm tools工具的按钮是灰色的,需要将CD挂载选项,改成自动检测,然后关闭系统,关闭虚拟机,重新再打开,再启动系统,再次打开下拉菜单,就可以选择工具安装了。

image.pngimage.png

将弹出的压缩包拷贝出来,解压,运行里面的脚本,然后一直回车确认,最后就可以安装完成。
注意: 安装过程中有no 这种选项的时候要注意,要输入yes,在按下回车,不然就直接结束安装了。

image.png

3. ubuntu 20.04安装emcc编译器

安装emcc编译器之前需要安装python,ubuntu20.04 系统安装之后,系统默认是安装了python 的,
这个就不用管了。

emcc编译器的代码在GitHub仓库里,需要安装Git工具,这个系统没自动安装,需要自己安装。

wbyq@wbyq:~/work_pc/WebAssembly/emsdk$ sudo apt  install git

编译代码需要用到make命令,make也没有安装,需要手动安装。

image.png

安装之后,就可以继续下面的步骤了。

(1)创建工作目录,存放接下来下载的相关文件

xl@xl:~/work$ mkdir wasm
xl@xl:~/work$ cd wasm/

(2)从仓库克隆项目

xl@xl:~/work/wasm$ git clone https://github.com/emscripten-core/emsdk.git 
正克隆到 'emsdk'...
remote: Enumerating objects: 3138, done.
remote: Total 3138 (delta 0), reused 0 (delta 0), pack-reused 3138
接收对象中: 100% (3138/3138), 1.66 MiB | 174.00 KiB/s, 完成.
处理 delta 中: 100% (2043/2043), 完成.
wbyq@wbyq:~/work_pc/WebAssembly$ ls
emsdk
wbyq@wbyq:~/work_pc/WebAssembly$ cd emsdk/
wbyq@wbyq:~/work_pc/WebAssembly/emsdk$ ls
bazel            emscripten-releases-tags.json  emsdk_env.bat   emsdk_env.ps1        emsdk.ps1                 legacy-emscripten-tags.txt  README.md
docker           emsdk                          emsdk_env.csh   emsdk_env.sh         emsdk.py                  LICENSE                     scripts
emcmdprompt.bat  emsdk.bat                      emsdk_env.fish  emsdk_manifest.json  legacy-binaryen-tags.txt  llvm-tags-64bit.txt         test

(3)安装最新的编译器

wbyq@wbyq:~/work/wasm/emsdk$ ./emsdk install latest
Resolving SDK alias 'latest' to '3.1.4'
Resolving SDK version '3.1.4' to 'sdk-releases-upstream-39e60dda6945cfcd6487725bdb1361ae7975173f-64bit'
Installing SDK 'sdk-releases-upstream-39e60dda6945cfcd6487725bdb1361ae7975173f-64bit'..
Installing tool 'node-14.18.2-64bit'..

等待片刻,即可全部下载完成。

image.png

(4)激活SDK

xl@xl:~/work/wasm/emsdk$ ./emsdk activate latest

(5)生效环境变量

xl@xl:~/work/wasm/emsdk$ source emsdk_env.sh
image.png

(6)查看编译器版本详细信息

该命令只能在当前终端生效,可以将命令加到etc/profile里,重启系统全局生效。

image.png

4. 编写C/C++代码测试

下面编写一个C语言代码,导出函数接口,给前端JS调用测试。

(1)编写简单的C代码,提供1个测试函数

#include 
#include 
#include 
#include 

int func_sum(int x, int y) 
{
  return x + y;
}

(2)编译测试

emcc app.c -o app.js -s EXPORTED_FUNCTIONS="['_func_sum','_malloc','_free']" -s WASM=1

EXPORTED_FUNCTIONS 里填写可以导出给js调用的函数接口。

(3)编译成功生成app.js和app.wasm

image.png

(4)编写一个HTML文件。名称设置为: index.html


(5)启动HTTP服务器

python3 -m http.server
image.png

(6)打开浏览器访问

按下F12,查看控制台的输出。

http://127.0.0.1:8000/index.html

5. 编译ffmpeg

(1)下载ffmpeg源码

image.png


切换分支到4.1

image.png
git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
git checkout -b 4.1 origin/release/4.1

(2)编译

emconfigure ./configure --cc="emcc" --enable-cross-compile --target-os=none --arch=x86_32 --cpu=generic --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
image.png

(3)编写C代码,测试ffmpeg解码,编译

emcc app.c ffmpeg-4.4-wasm/lib/libavformat.a ffmpeg-4.4-wasm/lib/libavcodec.a  ffmpeg-4.4-wasm/lib/libswresample.a ffmpeg-4.4-wasm/lib/libavutil.a -I "ffmpeg-4.4-wasm/include" -s EXPORTED_FUNCTIONS="['_malloc','_free','ccall','allocate','UTF8ToString','_write_file','_print_version','_get_FileSize','_read_file','_GetVideoFrame','_GetVideoWidth','_GetVideoDuration','_GetVideoHeight','_DeleteMemory','_find_Decoder']" -s WASM=1 -s ASSERTIONS=0 -s TOTAL_MEMORY=167772160 -s ALLOW_MEMORY_GROWTH=1 -o out/ffmpeg_decoder.js

(4)开启服务器

python -m http.server

(5)调用测试ffmpeg

poYBAGL3SNWARwVXAAVqBEu4zWg151.pngpYYBAGL3SOKAL1_MAAV1nfaM4fM807.png

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Ubuntu
    +关注

    关注

    5

    文章

    563

    浏览量

    29746
  • 编译
    +关注

    关注

    0

    文章

    657

    浏览量

    32869
  • ffmpeg
    +关注

    关注

    0

    文章

    46

    浏览量

    7398
收藏 人收藏

    评论

    相关推荐

    嵌入式Qt-交叉编译FFmpeg与视频播放测试

    本篇介绍了嵌入式Qt播放视频的准备工作:交叉编译FFmpeg库并移植到Linux板子中,并先通过ffmpeg指令测试视频播放效果。下篇将尝试设计Qt界面来结合FFmpeg进行视频的播放
    的头像 发表于 09-15 02:08 2458次阅读
    嵌入式Qt-交叉<b class='flag-5'>编译</b><b class='flag-5'>FFmpeg</b>与视频播放测试

    WebAssembly技术_编译ffmpeg(ubuntu20.04)

    WebAssembly并不是直接用汇编语言,而提供了抓换机制(LLVM IR),把高级别的语言(C,C++和Rust)编译WebAssembly,以便有机会在浏览器中运行。主要是解决目前JS语言的效率问题,设计立足点为快速,内
    的头像 发表于 07-14 10:29 2193次阅读
    <b class='flag-5'>WebAssembly</b><b class='flag-5'>技术</b>_<b class='flag-5'>编译</b><b class='flag-5'>ffmpeg</b>(<b class='flag-5'>ubuntu</b>20.04)

    【风火轮YY3568开发板免费体验】第二章:YY3568 ffmpeg 编译以及 nanogui 移植

    本章主要记录如何移植 nanogui 以及在 buildroot 下快乐编译 ffmpeg
    的头像 发表于 08-11 15:41 2261次阅读
    【风火轮YY3568开发板免费体验】第二章:YY3568  <b class='flag-5'>ffmpeg</b> <b class='flag-5'>编译</b>以及 nanogui 移植

    ELF 1技术贴|如何在Ubuntu编译OpenCV库

    在之前发布的文章中探讨了交叉编译OpenCV并部署至嵌入式系统的方法。然而,在调试阶段,我们发现在Ubuntu环境下将OpenCV编译为X86架构可能更加方便和高效。通过在主机上编译
    的头像 发表于 05-31 16:41 1167次阅读
    ELF 1<b class='flag-5'>技术</b>贴|如何在<b class='flag-5'>Ubuntu</b>中<b class='flag-5'>编译</b>OpenCV库

    Linux的ffmpeg安装步骤

    1. ffmpeg安装安装环境:ubuntu 12.04(1)删除已安装的文件,避免冲突sudo apt-get remove ffmpeg x264sudo apt-get autoremove
    发表于 07-12 07:52

    iTOP-iMX6ULL开发板-FFmpeg移植

    =arm-linux-gnueabihf--disable-asm参数说明:--prefix=/home/ubuntu/work/ffmpeg/_x264_install/ :指定编译后存放路径.--host
    发表于 09-04 10:28

    FFmpeg移植-迅为IMX6ULL开发板

    =arm-linux-gnueabihf-gcc:配置为自己的交叉编译工具--arch=arm --prefix=/home/ubuntu/work/ffmpeg/_ffmpeg_in
    发表于 09-15 11:22

    迅为imx6开发板QT系统移植FFmpeg-编译FFmpeg

    迅为IMX6Q开发板FFmpeg 下载地址:h_t_t_p : / / f f m p e g . o r g / d o w n l o a d . h t m l,已经把下载好的压缩包放在了文档
    发表于 10-20 11:10

    请问一下怎样在ubuntu上去移植RK3399的ffmpeg源码呢

    请问一下怎样在ubuntu上去移植RK3399的ffmpeg源码呢?
    发表于 03-07 06:56

    RK3399 ffmpeg编译步骤有哪些

    RK3399 ffmpeg编译步骤有哪些?求解答
    发表于 03-08 08:30

    如何基于ffmpegubuntu系统上添加硬解支持

    firefly-rk3288 linux上H264、H265解码一直都是软解,下面将介绍如何基于ffmpeg,在ubuntu系统上添加硬解支持,首先安装硬解驱动库。这里使用的是国外友人mac_l1
    发表于 06-14 09:30

    怎样使用NDK去编译ffmpeg开源计算机程序呢

    的ffmpgeg压缩包。我下的是 ffmpeg-2.4.2(1)修改 configure 文件将该文件中的如下四行:替换为:(2)在源码目录下创建,build_ffmpeg.sh(3)编译运行原作者:error结构体
    发表于 07-01 17:24

    opencv编译安装笔记(Linux、Ubuntu

    本文介绍了两种opencv编译安装笔记:Linux下编译安装OpenCV和Ubuntu 下安装 OpenCV。有需要的小伙伴可以看看。
    发表于 12-03 10:33 5178次阅读
    opencv<b class='flag-5'>编译</b>安装笔记(Linux、<b class='flag-5'>Ubuntu</b> )

    fireflyROC-RK3328-PC编译Ubuntu 根文件系统简介

    编译 Ubuntu 根文件系统
    的头像 发表于 12-21 09:45 1451次阅读

    Ubuntu编译安装pcl教程

    编译安装PCL(Point Cloud Library)是在Ubuntu上使用自定义选项进行安装的一种方式。
    的头像 发表于 10-26 09:36 1284次阅读