You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C# MediaCapture录制两路音频输入与一路视频输入

C# 双音频输入+单视频采集实现方案

方案1:AudioGraph + MediaStreamSource 混合录制

核心思路是绕开MediaCapture直接绑定单一音频设备的限制,自己用AudioGraph完成双路音频混音后输出到自定义媒体流,再交给MediaCapture录制,全程不会触发音频外放,音质可控。

  • 初始化AudioGraph时禁用默认输出设备,避免声音外放:
var graphSettings = new AudioGraphSettings(AudioRenderCategory.Media);
graphSettings.PrimaryRenderDevice = null; // 禁用默认渲染输出
CreateAudioGraphResult graphResult = await AudioGraph.CreateAsync(graphSettings);
AudioGraph audioGraph = graphResult.Graph;
  • 分别为摄像头麦克风、独立麦克风创建输入节点,挂载到同一子混音节点完成混音:
// 提前枚举获取两个音频设备的DeviceInformation对象
var webcamAudioInput = await audioGraph.CreateDeviceInputNodeAsync(MediaCategory.Media, audioGraph.EncodingProperties, webcamAudioDevice);
var standaloneMicInput = await audioGraph.CreateDeviceInputNodeAsync(MediaCategory.Media, audioGraph.EncodingProperties, standaloneMicDevice);
AudioSubmixNode submixNode = audioGraph.CreateSubmixNode();
webcamAudioInput.AddOutgoingConnection(submixNode);
standaloneMicInput.AddOutgoingConnection(submixNode);
  • 创建音频帧输出节点接收混音数据,结合摄像头视频流构造MediaStreamSource,交给MediaCapture录制:
AudioFrameOutputNode audioOutputNode = audioGraph.CreateFrameOutputNode();
submixNode.AddOutgoingConnection(audioOutputNode);
// 构造音视频流描述符,绑定音频帧输出回调、摄像头视频采集回调到MediaStreamSource
MediaStreamSource mediaSource = new MediaStreamSource(videoStreamDesc, audioStreamDesc);
// 后续直接用MediaCapture编码MediaStreamSource即可输出包含双路音频的录制文件

方案2:FFmpeg 直接采集封装

如果不需要完全依赖WinRT原生API,可以引入FFmpeg.AutoGen绑定库,直接通过FFmpeg API指定3个输入设备(2路音频+1路视频),在FFmpeg层完成音频混音和音视频封装。该方案开发成本更低,支持的输出格式更丰富,只需将FFmpeg官方二进制文件随同应用打包即可。

方案3:虚拟音频设备

如果必须使用原生MediaCapture的设备绑定逻辑,无需自己从零开发驱动,可直接采用成熟的开源虚拟音频设备驱动,安装后将两个麦克风的音频路由到虚拟音频设备的输入,再将MediaCapture的AudioDeviceId指定为虚拟音频设备的ID即可实现双路音频采集,缺点是需要用户额外安装驱动组件。

内容的提问来源于stack exchange,提问作者GreenDragon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 01:00:02