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

UWP中如何使用MediaPlayer将电台音频流保存为MP3文件?

实现MediaPlayer音频流录制为MP3的方案

嘿Christian,我之前做过类似的Windows 10电台应用录制功能,用Windows.Media.Playback.MediaPlayer的话,确实没有直接获取音频字节的现成属性或事件,但可以通过AudioGraph来对接MediaPlayer的输出,再编码成MP3文件,下面是具体的实现步骤和代码示例:

核心思路

利用Windows.Media.Audio.AudioGraph搭建音频处理管线:将MediaPlayer的输出作为AudioGraph的输入节点,再添加一个支持MP3编码的文件输出节点,实现实时录制。

步骤1:配置权限

首先在你的Package.appxmanifest里添加必要的权限:

  • 勾选麦克风(虽然我们是捕获应用内音频,但部分场景下需要这个权限)
  • 添加后台媒体录制能力(如果需要后台录制的话)

步骤2:初始化AudioGraph并对接MediaPlayer

下面是关键的代码片段:

private AudioGraph _audioGraph;
private MediaPlayerAudioInputNode _playerInputNode;
private FileOutputNode _mp3OutputNode;
private MediaPlayer _mediaPlayer; // 你的现有MediaPlayer实例

// 初始化录制管线
private async Task InitializeRecordingPipeline()
{
    // 1. 创建AudioGraph设置
    var settings = new AudioGraphSettings(AudioRenderCategory.Media);
    var result = await AudioGraph.CreateAsync(settings);
    
    if (result.Status != AudioGraphCreationStatus.Success)
    {
        // 处理创建失败的情况
        return;
    }
    _audioGraph = result.Graph;

    // 2. 将MediaPlayer接入AudioGraph作为输入节点
    var playerInputResult = await _audioGraph.CreateMediaPlayerAudioInputNodeAsync(_mediaPlayer);
    if (playerInputResult.Status != MediaPlayerAudioInputNodeCreationStatus.Success)
    {
        // 处理节点创建失败
        return;
    }
    _playerInputNode = playerInputResult.Node;

    // 3. 创建MP3格式的文件输出节点
    var filePicker = new FileSavePicker();
    filePicker.FileTypeChoices.Add("MP3 文件", new List<string> { ".mp3" });
    filePicker.SuggestedFileName = $"电台录制_{DateTime.Now:yyyyMMddHHmmss}";
    var outputFile = await filePicker.PickSaveFileAsync();
    
    if (outputFile == null) return;

    // 配置MP3编码属性
    var mp3EncodingProfile = MediaEncodingProfile.CreateMp3(AudioEncodingQuality.High);
    var fileOutputResult = await _audioGraph.CreateFileOutputNodeAsync(outputFile, mp3EncodingProfile);
    
    if (fileOutputResult.Status != FileOutputNodeCreationStatus.Success)
    {
        // 处理输出节点创建失败(比如编码器缺失,N版本Windows需安装媒体功能包)
        return;
    }
    _mp3OutputNode = fileOutputResult.Node;

    // 4. 连接输入节点到输出节点
    _playerInputNode.AddOutgoingConnection(_mp3OutputNode);
}

步骤3:控制录制启停

// 开始录制
public void StartRecording()
{
    _audioGraph.Start();
    _mp3OutputNode.Start();
}

// 停止录制
public async Task StopRecording()
{
    _audioGraph.Stop();
    _mp3OutputNode.Stop();
    await _mp3OutputNode.FinalizeAsync(); // 确保文件写入完成
}

注意事项

  • 如果你的应用运行在Windows 10 N/KN版本,可能需要手动安装媒体功能包才能使用MP3编码器
  • 录制过程中要注意处理MediaPlayer的播放状态变化(比如暂停、切换曲目),可以监听MediaPlayer.PlaybackSession.PlaybackStateChanged事件来同步录制状态
  • 如果需要后台录制,还需要配置后台任务,并确保AudioGraph在后台保持活动

希望这个方案能帮到你!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:45:56