解决Puppeteer内置的Chromium无法自动播放音频问题

简介: 解决Puppeteer内置的Chromium无法自动播放音频问题

(S97S)})SC3B`{~Z0I5@Z(R.png

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情


背景


以前做的一个基于 Wechaty 的客户端应用,最近更新个功能,涉及到提示语音的播放,由于要实现对附近人员的提醒,要求自动播放音频,可人工操作关闭。但是实际开发中,发现 Chrome 浏览器无法自动播放音频,经过查询,发现是 Chromium 本身做了限制。


版本信息:

  1. wechaty@0.14.1,puppeteer: ^1.2.0;
  2. 音频播放用的是jquery.jplayer.min.js

解决


这里场景比较特殊, 这个客户端就在用户的一台电脑上使用,那么只要想法解决这个客户端的问题就行了。 Wechaty 项目依赖了 Puppeteer ,其中内置了 Chromium ,那么按道理,应该可以通过修改源码配置的方式突破这一无法自动播放音频的限制。

经过查找依赖信息,终于找到了相关的配置,源码路径:node_modules\wechaty\dist\src\puppet-web\bridge.js,默认的浏览器初始化参数如下:


initBrowser() {
    return __awaiter(this, void 0, void 0, function*() {
        config_1.log.verbose('PuppetWebBridge', 'initBrowser()');
        const headless = this.options.head ? false : true;
        const browser = yield puppeteer_1.launch({
            headless,
            args: [
                '--audio-output-channels=0',
                '--disable-default-apps',
                '--disable-extensions',
                '--disable-translate',
                '--disable-gpu',
                '--disable-setuid-sandbox',
                '--disable-sync',
                '--hide-scrollbars',
                '--mute-audio',
                '--no-sandbox',
            ],
        });
        const version = yield browser.version();
        config_1.log.verbose('PUppetWebBridge', 'initBrowser() version: %s', version);
        return browser;
    });
}
按照下图进行配置(删掉参数:--mute-audio,增加参数:--autoplay-policy=no-user-gesture-required):

3724)}KF@OMJZ1M9($]Z_CX.png


即:--autoplay-policy=no-user-gesture-required,在启动参数中加上这个, 就可以自动播放音频了。


Note:其他场景:如果想直接在 GoogleChrome 浏览器上实现音频自动播放,那么可对浏览进行配置(可解决当前电脑 Chrome 浏览器的这一问题):

在浏览器输入: chrome://flags/#autoplay-policy ,将第一个配置项 Autoplay policy ,设置为 no user gesture is required ,重启浏览器生效。😊



If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

目录
相关文章
|
Ubuntu Linux Windows
Linux下音频开发: 读取声卡PCM数据保存到文件(alsa-lib库)
Linux下音频开发: 读取声卡PCM数据保存到文件(alsa-lib库)
1908 0
Linux下音频开发: 读取声卡PCM数据保存到文件(alsa-lib库)
|
8月前
playwright Test 录制视频
playwright Test 录制视频
182 3
|
11月前
|
Web App开发 API 图形学
QtWebEngine性能问题
QtWebEngine性能问题
381 1
|
XML JSON 安全
Base64编码原理与在网络传输中的应用
Base64编码原理与在网络传输中的应用
|
负载均衡 应用服务中间件 API
Docker-compose 简单介绍
Docker-compose 简单介绍
|
机器学习/深度学习 编解码 人工智能
一篇文章搞懂CNN(卷积神经网络)及其所含概念
一篇文章搞懂CNN(卷积神经网络)及其所含概念
447 0
一篇文章搞懂CNN(卷积神经网络)及其所含概念
|
Web App开发 数据采集 JavaScript
利用无头浏览器爬取JavaScript生成的网页
利用无头浏览器爬取JavaScript生成的网页
|
Web App开发 Serverless Linux
以 selenium + chromium 为例在函数计算中安装复杂依赖
以 selenium + chromium 为例在函数计算中安装复杂依赖
911 0
|
存储 小程序 API
对象存储OSS产品常见问题之前端直传视频获取视频的长度获得多少秒如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
782 0
|
Ubuntu Linux 网络安全
Linux(31)Rockchip RK3568 Ubuntu22.04上部署 Docker: 问题与解决方案
Linux(31)Rockchip RK3568 Ubuntu22.04上部署 Docker: 问题与解决方案
988 0