目前 PC Web 侧实现直播推流通常基于 WebRTC 技术,视频编码为 H264/VP8 格式,音频编码为 Opus 格式,而通常的下行直播分发协议如 Flv、Hls 等挟带的视频数据编码格式为 H264,音频数据编码格式为 AAC,这中间存在流媒体服务器需要将 Opus 音频转码为 AAC 音频的工作,增加了流媒体服务器转码成本和转码稳定性问题。如果能够在直播推流时直接推送 AAC 音频数据,就可以省去流媒体服务器音频转码部分的开销。为了解决推流 AAC 的问题,我们选择在 Web 侧自己实现推流能力。 推流主要分三部分工作,音视频采集、编码、上行传输。采集借助浏览器暴露的摄像头、麦克风采集 API,视频编码借助 WebCodec API,传输借助 WebSocket、WebTransport API。只有音频编码的工作由于目前 WebCodec 暂不支持对 AAC 音频格式的编码,需要寻找音频编码的替代方案。 音视频编解码工作是 CPU 密集型任务,业界相关方案实现大多基于 C/C++ 语言编写。这其中,FFmpeg 作为多媒体处理领域强大的软件实现,提供了简洁的 API
在本文中,我们将基于一个实际的客户端生产环境中遇到的问题,来观察如何使用 WebAssembly 技术打破原有的性能瓶颈,提升用户价值。在这个过程中,我们将引入 AssemblyScript 技术栈,把原有的 TypeScript/JavaScript 逻辑下沉 WebAssembly 中,从而实现性能的大幅提升,并通过实验验证具体的性能收益。
近年来,无论是 Serverless 还是 WebAssembly,都越来越受到开发者的广泛关注,作为字节跳动内部的函数计算平台,ByteFaaS 在 WebAssembly 方向上也有着不少的探索和实践。我们利用 WebAssembly 技术构建出了极致轻量化的函数运行时,并辅以全新设计的精简架构,打造出了云边一体的 Serverless 解决方案,拓展了 FaaS 的边界和应用场景,为业务带去了更多的可能。 本文将先带领大家认识 ByteFaaS 平台,分别介绍经典 FaaS 和 FaaS Worker(轻量级函数)方向。随后通过 WebAssembly 运行时、精简架构、开发者支持三个方面,详细介绍 FaaS Worker 的设计与实现。最后在文章结尾,会对 WebAssembly 函数能够为用户所带来的收益进行大致总结。
在 WebAssembly 社区蓬勃发展的当下,或出于对 JavaScript 等动态语言面对计算密集型任务时改善性能的愿望(如 Ammo.js),或源自将桌面表现出色的软件搬上 Web 环境的想法(如 AutoCAD),或希望在服务端利用沙箱来尽可能保证安全(如 Shopify-Serverless),越来越多的开发者选择 WebAssembly 技术。 而对于一项技术而言,围绕这项技术的开发工具矩阵是否完备,是否足够强大和易用,以及给开发者们带来的体验好坏,则是决定开发者们在尝试之后能否成为拥趸的关键因素。通常来说,一段代码的生命周期,包括编写、测试、交付与部署、上线生效、问题定位与修复等环节。在问题出现之后,对代码的源码调试(Source Code Debugging)往往是定位问题最高效的手段。提供高效的调试工具,帮助开发者迅速解决问题,是助推 WebAssembly 技术社区发展壮大的一个重要手段。 在本文中,我们将主要围绕 WebAssembly 的源码调试,阐述若干相关的问题。
课程的 WebAssembly 工作原理一章已经详细介绍了基于栈结构的指令执行原理和过程,然而,了解 WebAssembly 原理最有效的方式仍然是自己动手实现一个执行引擎;本文将从零开始实现一个简单的 WebAssembly 解释器 WAInterp (WebAssembly Interpreter),通过这一过程来进一步掌握和实践 WebAssembly 虚拟机技术。
本文是一篇WebAssembly的入门文章,从理论介绍到实战方面有全面的讲述。
狭义上的 WebAssembly 是 W3C 标准化组织制定的一个可移植、体积小、加载快并且兼容 Web 的全新二进制格式,在前面章节中已经对此做过详细的阐述;然而,随着 WebAssembly 技术的演进和广泛应用,它的内涵也在不断的外延,广义的 WebAssembly 可以理解为基于 WebAssembly 演化出来的完整生态
在本文中,我们将讨论驱动 WebAssembly 程序运行的核心组件——引擎。首先,本文将简要介绍一个语言的引擎包括哪些主要组成部分,它们如何配合完成工作,尝试构建一个概念模型。之后,就几款社区流行的开源引擎,分别介绍各自的特点。
WebAssembly (WASM) 的一个优势就是能够支持将不同语言编译成 WASM 代码,然后在不同的宿主环境中运行。这样就可以在不同的宿主环境中运行不同语言编写的 WASM 代码,比如在浏览器中运行 C/C++ 代码,或者在 Node.js 中运行 Rust 代码。那么,这些不同语言编写的 WASM 代码是如何运行在不同的宿主环境中的呢?在这一章中,我们将会重点介绍这些不同的语言和宿主环境中的 WASM 运行机制。