前言:

WebAssembly 从诞生起,赋予了前端更宽阔的应用想象。绘图视频渲染,剪辑,编解码,游戏都有可能基于 WebAssembly 在浏览器端推出相关的产品。

一、什么是 WebAssembly

WebAssembly(wasm) 是一种二进制代码格式, 具有高效,跨平台性,包含这种格式的二进制文件,可以被各个平台的浏览器高效的加载,解析执行。

只要浏览器支持 wasm, 用户便可以使用 wasm 所提供的功能,也就是说 wasm 的跨平台性其实是基于浏览器的跨平台性。上层用户编译 wasm 时,不需要关注底层架构是什么,只要编译出来正确的二进制文件,就可以在各个支持的浏览器运行。

wasm 增强了 js 的能力,js 不擅长做的事情,比如绘图,编码,解码,数学计算等,都可以在 wasm 中实现,然后 js 就可以使用wasm所提供的能力。

现阶段已经有很多 WebAssembly 的应用,比如 ffmpeg 的编解码应用, unity 3d, unreal engine, google earth等都相继支持了 wasm。

更详细介绍,参考:https://webassembly.org

二、如何使用

WebAssembly 现在支持从 C/C++, go, rust 编译成 wasm 模块。使用 emscripten sdk, 可以从 C/C++ 源码直接编译成 wasm 文件,然后在网页中 直接加载使用。

参考 https://emscripten.org/docs/getting_started/Tutorial.html 入门。
参考 https://emscripten.org/docs/compiling/Building-Projects.html 编译项目。

三、wasm 的限制和风险

wasm 的限制与不便:

  • 运行在一个沙盒中,网页和 js 的限制, wasm 同样会有,比如跨域
  • 不能直接读取用户计算机磁盘上的文件
  • 能使用的最大内存有限制,各个浏览器的限制都不同,一般为 2G
  • 现阶段已经支持了多线程(基于 worker 和 SharedArrayBuffer), 其中 SharedArrayBuffer 在有些浏览器不会默认开启
  • wasm 中申请的内存也需要手动释放

风险:

技术本身不会有太多的风险,在于如何去使用。已经出现过基于 wasm 技术开发的挖矿程序,病毒等。由于 wasm 是更低级的二进制格式,网页端在这方面的安全检查和拦截还不成熟。现阶段使用了 wasm 技术的网站可能会有更大的安全风险。随着各大浏览器对 wasm 的完善, wasm 能支持的功能会更多。比如 gc, 更好的异常处理,届时能实现更高效和全面的功能。

四、补充

WebGL介绍:

H5使用Canvas来绘图,但是默认的2d模式只能绘制RGB格式,使用FFmpeg解码出来的视频数据是YUV格式,想要渲染出来需要进行颜色空间转换,可以使用FFmpeg的libswscale模块进行转换,为了提升性能,可以使用WebGL来硬件加速,可参考项目: https://github.com/p4prasoon/YUV-Webgl-Video-Player

五、应用

Web播放器

主要技术点:WASM、FFmpeg、WebGL、Web Audio等。实现方案简介:

1、 使用FFmpeg来做解封装(demux)和解码(decoder), 将音视频解码相关的功能模块用C/C++等进行独立实现,然后通过Emscripten编译(emcc)出.js+.wasm文件,供浏览器js调用,编译方法可参考: https://blog.csdn.net/Jacob_job/article/details/79434207

2、 web端编写播放器实现,借助Web Worker、WebGL等基础进行播放器性能调优等

参考:

1.官网:https://emscripten.org/docs/getting_started/Tutorial.html

2.中文资料参考:https://www.cntofu.com/book/150/zh/ch1-quick-guide/ch1-02-helloworld.md

3.https://blog.csdn.net/weixin_41191739/article/details/110391941?spm=1001.2014.3001.5501

4、https://www.kanzhun.com/jiaocheng/506030.html

5、https://codechina.csdn.net/mirrors/sonysuqin/WasmVideoPlayer?utm_source=csdn_github_accelerator

WebAssembly 在 Web 端的应用 - Web播放器相关推荐

  1. 云点播web端上传_Web 播放端 SDK

    七牛 Web 播放器 SDK 是七牛官方推出的用于开发网页播放器的软件开发工具包,为 Web 开发者提供简单.快捷的接口,帮助开发者在 Web 平台上快速开发播放器应用. 该文档面向考虑使用七牛 We ...

  2. 如果摄像头不支持Web Socket,猿大师播放器还能在网页中播放RTSP流吗?

    问: 我们的情况比较复杂,摄像头设备品牌和数量都比较多,分布在全国各地都有,地点分布比较广泛,有的甚至是比较老的型号,如果摄像头设备不支持Web Socket,猿大师播放器还可以在网页中播放RTSP流 ...

  3. php 手机端播放器,用JS代码适配电脑端和手机端播放器代码

    用JS代码适配电脑端和手机端播放器代码 蓝叶    网站设计    2016-08-10    10668    9评论 随着html5的崛起,很多网站都采用html5代码来设计,让网站美观大气,但是 ...

  4. 编程骚操作:Java Web实现网易云音乐播放器,帮你省下会员费

    H5增加了很多的标签,面试的时候,如果面试官问你H5都有哪些新标签,你回答header.footer.nav. 这么回答几乎是无效的,因为这些标签在H5里面的角色,相当于鸡骨头.鱼刺.蘑菇腿--全是鸡 ...

  5. 在苹果CMS中为电脑和移动端设置不同的播放器接口

    下载安装苹果CMS10和海螺模板,一路顺利,然后使用萌芽采集充实资源,一个自娱自乐的影视网站基本建成. 其中有一些资源需要解析播放,我就使用了默认的"https://cdn.zyc888.t ...

  6. web端设计和web前端开发的区别

    Web前端开发技术主要包括三个要素:HTML.CSS和JavaScript! 它要求前端开发工程师不仅要掌握基本的Web前端开发技术,网站性能优化.SEO和服务器端的基础知识,而且要学会运用各种工具进 ...

  7. java对接海康威视SDK(win64、linux64),处理播放实时流转码,按时间回放功能,附海康威视最新3.0摄像头监控web端实例+插件

    java对接海康威视SDK(win64.linux64),处理播放实时流转码,按时间回放功能 准备工作 遇到的坑 调用步骤 参数配置 DeviceEnums 初始化sdk 注册 大华的sdk叫登陆海康 ...

  8. web端拉取m3u8直播流,进行播放

    最近在做直播功能,客户端用ffmpeg rtmp的方式推flv封装流到cdn,然后web端也用rtmp播放flv封装流,但是不能成功,这是浏览器不再支持flash的缘故. 故改成web端拉取m3u8直 ...

  9. 2023 年大淘宝 Web 端技术概览

    本文介绍了大淘宝 Web 领域的工程师们正在做哪些技术工作.有什么技术产品. 背景 2022 年,大淘宝前端团队进行了调整:重新组织生产关系,按业务线拆分整合进对应的业务技术团队,同时保留了大前端虚线 ...

最新文章

  1. 设计模式之备忘录模式(Memento)摘录
  2. php和mysql实现模糊查询_PHP MYSQL实现登陆和模糊查询两大功能_PHP
  3. 我能使用这个Intent吗?
  4. LAS点云查看 转换格式
  5. 【顶】Asp无组件生成缩略图(1)
  6. 机器学习之Fisher线性分类器实现样本分类
  7. Neural Networks and Deep Learning 读书笔记
  8. 我对应聘者的面试原则
  9. 字符设备驱动高级篇2——字符设备驱动注册代码分析
  10. 基于python的知识融合_知识融合
  11. java 面向对象多态_乐字节Java面向对象三大特性以及Java多态
  12. VB判断文件及目录的存在性
  13. @ControllerAdvice + @ExceptionHandler 处理 全部Controller层异常
  14. 脱欧临近引民众忧心食品短缺 英“脱欧生存包”热卖
  15. Cesium:向地图中添加线的方法
  16. ad13批量安装元件库_常用的Altium Designer AD09 AD14 AD18元件库 原理图库(543个)+PCB封装库(509个)...
  17. Centos7设置SSH安全策略–指定IP登陆
  18. matlab中rgb2ycbcr函数,RGB转YCbCr
  19. LeetCode 1055. 形成字符串的最短路径
  20. 腾讯低代码平台定价策略公开了

热门文章

  1. 聊聊德国DAX,30+10(20211202 Week48-2)
  2. Opencv+Python学习记录7:图像加权和(内附详细代码)
  3. 导航APP双端带网页端电商/商城/展示/影视/小说/漫画/通用/试玩/导航系统源码
  4. fft之后求模值和相位_50Hz交流信号经ADC在一个周期采样有限个点后,怎么用FFT变换求得有效值、幅值和相位等?...
  5. 关于android手机充电时间的计算公式
  6. 带约束进化算法问题分析Constrained Evolutionary Algorithms
  7. 暑假集训#2 div1 J 四点直角 J - Space Invader 四点共面+跨立实验
  8. Xcode9 xcodebuild 命令行打包遇到的坑与解决方案
  9. 怎样快速查询顺丰物流,并分析出退回件的单号
  10. Linux性能优化 倪朋飞