微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有耳机和系统音频的屏幕录制

如何解决带有耳机和系统音频的屏幕录制

我正在尝试构建一个具有屏幕录制功能网络应用程序,系统音频 + 耳机麦克风音频在保存的视频中被捕获。

我一直在彻底搜索解决方案,但是我的发现显示了多个浏览器解决方案,只要耳机连接,上述方法就可以工作,这意味着麦克风输入来自系统而不是比耳机。

如果您连接耳机,所有这些解决方案都可以捕获没有视频音频的屏幕,以及来自我的耳机的麦克风音频。因此,为了重新澄清这一点,它应该在录制时从正在播放的视频中录制视频音频,以及耳机麦克风音频。

这在本机应用程序中完全可用,但是我正在寻找一种在浏览器上执行此操作的方法

如果目前没有任何人知道的解决方案,那么了解有关开发此功能的局限性的一些见解也会很有帮助,谢谢。

解决方法

您的浏览器管理在所选标签/窗口中接收的媒体输入

要接收媒体输入,您需要确保已选中下图中的复选框 Share Audio。但是,这只会记录您耳机中正在播放的媒体音频,在接收麦克风音频时,必须执行相反的操作,即该复选框应取消选中,或者在保存时单独合并麦克风音频录制的视频

https://slack-files.com/T1JA07M6W-F0297CM7F32-89e7407216

,
  1. 创建两个 const,一个检索屏幕视频,另一个检索音频媒体:
const DISPLAY_STREAM = await navigator.mediaDevices.getDisplayMedia({video: {cursor: "motion"},audio: {'echoCancellation': true}}); // retrieving screen-media
        
const VOICE_STREAM = await navigator.mediaDevices.getUserMedia({ audio: {'echoCancellation': true},video: false }); // retrieving microphone-media

  1. 使用 AudioContext 分别从 getUserMedia()getDisplayMedia() 检索音频源:
const AUDIO_CONTEXT = new AudioContext();

const MEDIA_AUDIO = AUDIO_CONTEXT.createMediaStreamSource(DISPLAY_STREAM); // passing source of on-screen audio
            
const MIC_AUDIO = AUDIO_CONTEXT.createMediaStreamSource(VOICE_STREAM); // passing source of microphone audio
  1. 使用以下方法创建一个新的音频源,用作合并或合并版本的音频,然后将音频传递到合并中:
const AUDIO_MERGER = AUDIO_CONTEXT.createMediaStreamDestination(); // audio merger

MEDIA_AUDIO.connect(AUDIO_MERGER); // passing media-audio to merger
MIC_AUDIO.connect(AUDIO_MERGER); // passing  microphone-audio to merger
  1. 最后,将合并的音频和视频连接到一个数组中以形成一个轨道,并将其传递给 MediaStreamer:
const TRACKS = [...DISPLAY_STREAM.getVideoTracks(),...AUDIO_MERGER.stream.getTracks()] // connecting on-screen video with merged-audio
stream = new MediaStream(TRACKS);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。