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

UWP中如何将多个MediaStreamSource编码为单个文件?音视频录制咨询

解决方案:同时捕获屏幕、系统音频及麦克风输入

UWP 平台实现方案

方案1:改用 MediaCapture 统一捕获(推荐)

如果不需要单独依赖WGC和WASAPI的自定义逻辑,MediaCapture本身支持同时捕获屏幕画面、系统音频和麦克风输入,无需手动合并流:

  • 配置 MediaCaptureInitializationSettings,指定 VideoDeviceId 为屏幕捕获设备(通过 GraphicsCaptureItem 获取对应设备ID),同时设置 AudioDeviceId 为系统音频输出设备的回环捕获ID,再添加麦克风作为第二音频输入。
  • 初始化MediaCapture后,直接调用 PrepareLowLagRecordToStorageFileAsync 或 PrepareRecordToStorageFileAsync 启动录制,MediaCapture会自动完成音视频流的合并。

方案2:手动合并 WGC 视频流与 WASAPI 音频流

如果必须分开用WGC和WASAPI捕获流,MediaTranscoder不支持多MediaStreamSource,但可以通过以下方式实现:

  1. 分别从WGC创建视频MediaStreamSource,从WASAPI创建音频MediaStreamSource。
  2. 使用 MediaEncodingProfile 创建包含音视频轨道的输出配置。
  3. 自定义媒体流合成逻辑:读取两个MediaStreamSource的样本,同步时间戳后,将音视频样本写入同一文件容器(如MP4)。此方式需要手动处理样本同步、时间戳对齐及容器封装,实现复杂度较高。

注意:MediaComposition仅适用于已录制媒体文件的拼接,不支持实时流合并。

Windows Media Foundation (WMF) 平台实现方案

若UWP的限制无法满足需求,WMF提供更灵活的底层控制,支持同时捕获屏幕、系统音频和麦克风:

  • 屏幕捕获:通过Windows Graphics Capture API获取屏幕帧,将帧转换为WMF兼容的媒体样本(如IMFMediaBuffer)。
  • 音频捕获:
    • 系统音频:利用WASAPI的回环模式捕获系统输出音频。
    • 麦克风:通过WASAPI的输入模式捕获麦克风音频,可选择将系统音频与麦克风音频混合为单轨,或保留为独立轨道。
  • 流合并与录制:使用WMF的Sink Writer(IMFVideoSinkWriter),将视频样本与混合后的音频样本按时间戳同步写入输出文件。Sink Writer支持自定义媒体类型,可轻松处理音视频流的同步与封装。

关键步骤:

  1. 初始化WMF环境,创建目标媒体类型(视频:H.264,音频:AAC/MP3)。
  2. 分别启动屏幕捕获、系统音频捕获、麦克风捕获线程,采集媒体样本并对齐时间戳。
  3. 按需混合音频样本,将音视频样本依次送入Sink Writer,完成文件写入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:02:48