electron视频音频处理简单说明
属于一个总结,一般我们都是使用navigator.mediaDevices.getUserMedia+desktopCapturer 集成,但是getUserMedia 对于音频的捕捉是有一些问题的(audio 为true 会有bug)
基于session setDisplayMediaRequestHandler
推荐基于此方法,可以灵活的实现音视频的捕捉处理,
win.webContents.session.setDisplayMediaRequestHandler((stream, callback) => {
// 此处可以进行一些ui 选择,或者业务处理(与渲染进程的通信,可以包含ui信息,不同的source 支持的能力不太一样)
desktopCapturer.getSources({ types: ['screen','window'] }).then((sources) => {
// Grant access to the first screen found.
console.log("sources",sources);
callback({ video: sources[0], audio: 'loopback' })
})
}, { useSystemPicker: true })
基于自定义getDisplayMedia
window.navigator.mediaDevices.getDisplayMedia = () => {
return new Promise(async (resolve, reject) => {
try {
alert("navigator.mediaDevices.getDisplayMedia");
const sources = await ipcRenderer.invoke("get-sources");
console.log("sources", sources);
console.log("sources[0]", sources[0]);
// 注意此模式中audio当为chromeMediaSource 只能为false,否则会有异常问题,应该属于chrome 的bug
const stream = await window.navigator.mediaDevices.getUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: "desktop",
chromeMediaSourceId: sources[0].id,
},
},
});
stream.getTracks().forEach(track => {
console.log("track",track);
});
resolve(stream);
} catch (err) {
reject(err);
}
});
};
说明
以上是一个简单说明,因为原生navigator.mediaDevices.getUserMedia audio 为true 会有异常问题,通过以上可以解决问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2023-11-16 mailpit 试用
2023-11-16 mailpit MailHog 的替代者
2020-11-16 实现一个简单的golang db driver
2020-11-16 代码判断是否运行在docker环境中
2020-11-16 haproxy opentracing 安装构建说明
2020-11-16 haproxy 2.3 发布
2019-11-16 restql 学习一 安装试用