求助:使用Mumblesharp实现语音通话的代码示例
使用Mumblesharp实现语音通话的核心代码片段
前提准备
确保已通过NuGet安装Mumblesharp和NAudio(Mumblesharp仅处理Mumble协议交互,音频设备IO依赖NAudio实现)。
1. 基础服务器连接与登录
using Mumblesharp; using Mumblesharp.Models; using System.Security.Cryptography.X509Certificates; var client = new MumbleClient(); // 配置本地Mumble服务器参数 client.Host = "localhost"; client.Port = 64738; // Mumble默认端口 client.Username = "YourClientUsername"; // 若服务器启用证书验证,可加载本地证书(可选) client.Certificate = new X509Certificate2("path/to/cert.pfx", "certPassword"); // 连接状态监听 client.Connected += (_, __) => Console.WriteLine("已连接到Mumble服务器"); client.Authenticated += (_, __) => Console.WriteLine("身份验证通过,进入频道"); client.Disconnected += (_, __) => Console.WriteLine("与服务器断开连接"); // 启动连接 await client.ConnectAsync();
2. 麦克风音频捕获与发送
using NAudio.Wave; // 初始化麦克风捕获,匹配Mumble默认音频格式:48kHz、16位、单声道 var waveIn = new WaveInEvent(); waveIn.WaveFormat = new WaveFormat(48000, 16, 1); waveIn.DataAvailable += async (_, e) => { // 仅在已认证状态下发送语音 if (client.IsAuthenticated) { await client.SendVoiceAsync(e.Buffer, e.BytesRecorded); } }; // 开始捕获麦克风输入 waveIn.StartRecording();
3. 语音接收与扬声器播放
using NAudio.Wave; // 初始化音频播放器,匹配Mumble音频格式 var waveOut = new WaveOutEvent(); var bufferProvider = new BufferedWaveProvider(new WaveFormat(48000, 16, 1)); waveOut.Init(bufferProvider); waveOut.Play(); // 监听语音接收事件,解码后播放 client.VoiceReceived += (_, e) => { bufferProvider.AddSamples(e.PcmData, 0, e.PcmData.Length); };
关键注意事项
- 服务器配置检查:确保本地Mumble服务器(murmur)未禁用语音传输功能。
- 音频格式强制匹配:必须使用48kHz、16位、单声道的PCM格式,否则会出现语音失真或无法播放。
- 资源释放:程序退出时需调用
waveIn.StopRecording()、waveOut.Stop()、client.DisconnectAsync()释放占用的音频设备和网络连接。
内容的提问来源于stack exchange,提问作者segzwealth
相关产品推荐
相关产品推荐

