WebAssembly技術(shù)_加載ffmpeg在Web端調(diào)用解碼

      網(wǎng)友投稿 1692 2022-05-29

      1. 前言

      WebAssembly 就是運行在 Web 平臺上的 Assembly。Assembly 是指匯編代碼,是直接操作 CPU 的指令代碼,比如 x86 指令集上的匯編代碼有指令集、寄存器、棧等等設(shè)計,CPU 根據(jù)匯編代碼的指導(dǎo)進行運算。匯編代碼相當(dāng)于 CPU 執(zhí)行的機器碼能夠轉(zhuǎn)換成的人類適合讀的一種語言。

      Wasm的技術(shù)優(yōu)勢:

      性能高效:WASM采用二進制編碼,在程序執(zhí)行過程中的性能優(yōu)越;

      存儲成本低:相對于文本格式,二進制編碼的文本占用的存儲空間更??;

      多語言支持:用戶可以使用 C/C++/RUST/Go等多種語言編寫智能合約并編譯成WASM格式的字節(jié)碼;

      2. emcc編譯的ffmpeg靜態(tài)庫

      (1)CSDN上的-

      -: https://download.csdn.net/download/xiaolong1126626497/82868215

      (2)GitHub倉庫-

      https://github.com/wang-bin/avbuild

      https://sourceforge.net/projects/avbuild/files/

      https://sourceforge.net/projects/avbuild/files/wasm/

      (3)這里有編譯好的ffmpeg.wasm文件,前端JS可以直接調(diào)用完成視頻轉(zhuǎn)碼等功能

      WebAssembly技術(shù)_加載ffmpeg在Web端調(diào)用解碼

      https://github.com/ffmpegwasm/ffmpeg.wasm

      const fs = require('fs'); const { createFFmpeg, fetchFile } = require('@ffmpeg/ffmpeg'); const ffmpeg = createFFmpeg({ log: true }); (async () => { await ffmpeg.load(); ffmpeg.FS('writeFile', 'test.avi', await fetchFile('./test.avi')); await ffmpeg.run('-i', 'test.avi', 'test.mp4'); await fs.promises.writeFile('./test.mp4', ffmpeg.FS('readFile', 'test.mp4')); process.exit(0); })();

      (4)ffmpeg編譯wasm文件的源碼,可以自行編譯wasm文件:

      https://github.com/ffmpegwasm/ffmpeg.wasm-core

      3. 調(diào)用ffmpeg庫-打印版本號

      3.1 準(zhǔn)備ffmpeg庫文件

      3.2 編寫C語言代碼

      下面只是編寫了一個打印版本號的函數(shù),用于測試ffmpeg的庫和相關(guān)函數(shù)是否可以正常調(diào)用。

      #include #include #include #include #include #include #include #include #include //獲取版本號 void print_version() { unsigned codecVer = avcodec_version(); int ver_major, ver_minor, ver_micro; ver_major = (codecVer >> 16) & 0xff; ver_minor = (codecVer >> 8) & 0xff; ver_micro = (codecVer) & 0xff; printf("當(dāng)前ffmpeg的版本:avcodec version is: %d=%d.%d.%d\n", codecVer, ver_major, ver_minor, ver_micro); }

      3.3 編譯生成wasm和js文件

      emcc wasm_ffmpeg/wasm_ffmpeg.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','_print_version']" -s WASM=1 -s ASSERTIONS=0 -s TOTAL_MEMORY=167772160 -s ALLOW_MEMORY_GROWTH=1 -o out/ffmpeg_decoder.js

      編譯成功后生成的wasm和js文件:

      3.3 編寫index.html代碼

      編寫HTML文件調(diào)用js文件里的接口。

      js調(diào)用c語言函數(shù)示例

      4.4 開啟服務(wù)器

      命令行運行命令,開啟HTTP服務(wù)器,方便測試:

      python -m http.server

      4.5 測試效果

      打開谷歌瀏覽器,輸入http://127.0.0.1:8000/index.html地址,按下F12打開控制臺,點擊頁面上的按鈕看控制臺輸出。

      (1)輸入地址,打開網(wǎng)頁

      (2)按下F12,打開控制臺

      (3)選擇一個MP4文件載入測試。獲取一幀圖片。

      Linux

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:技術(shù)團隊如何培養(yǎng)新人
      下一篇:【愚公系列】2021年12月 Java教學(xué)課程 10-運算符
      相關(guān)文章
      亚洲kkk4444在线观看| 亚洲伊人色欲综合网| 亚洲AV无码专区亚洲AV桃| 精品亚洲成a人片在线观看少妇| 亚洲精品国产精品乱码视色| 亚洲午夜国产精品无码老牛影视 | 亚洲乱亚洲乱妇无码麻豆| 亚洲AV无码专区日韩| 亚洲精品无码你懂的| 亚洲欧美日韩自偷自拍| 在线综合亚洲欧洲综合网站 | 亚洲天堂电影在线观看| 亚洲制服丝袜一区二区三区| 亚洲午夜在线一区| www.亚洲成在线| 亚洲xxxx视频| 亚洲经典千人经典日产| 久久人午夜亚洲精品无码区| 看亚洲a级一级毛片| 国产一区二区三区亚洲综合| 亚洲国产成人久久精品99| 亚洲成a人片在线播放| 亚洲另类激情专区小说图片| 亚洲综合国产精品第一页| 中文字幕亚洲日本岛国片| 亚洲中文字幕无码中文字在线| 亚洲精品无码av人在线观看| 国产AV无码专区亚洲AV毛网站| 亚洲国产精品热久久| 亚洲精品中文字幕麻豆| 亚洲一区二区三区无码国产| 亚洲色大成网站www永久网站| 亚洲丁香婷婷综合久久| 国产亚洲视频在线| ZZIJZZIJ亚洲日本少妇JIZJIZ| 亚洲熟妇无码AV在线播放| 久久久久亚洲Av片无码v| 亚洲精品在线播放视频| 亚洲高清一区二区三区| 国产亚洲精品AAAA片APP| 亚洲免费一区二区|