技术问询:如何播放包含MPEG文件的流中的音频?
实时播放MPEG音频流的解决方案
针对你需要实时播放接收的MPEG音频流的需求,SoundPlayer确实仅支持WAV格式,无法直接处理MPEG(如MP3)流,这里提供几种可行的实现思路:
使用NAudio库:这是.NET生态中处理音频的常用工具,支持直接解码并播放MPEG音频流。如果接收的是可定位流,可通过
Mp3FileReader读取,再用WaveOut或WasapiOut播放:// 假设receivedStream为你接收的MPEG音频流 var mp3Reader = new Mp3FileReader(receivedStream); var waveOut = new WaveOut(); waveOut.Init(mp3Reader); waveOut.Play();若接收的是实时推送的不可定位流,需用
BufferedWaveProvider做缓存处理,平衡延迟与卡顿:var bufferedProvider = new BufferedWaveProvider(WaveFormat.CreateIeeeFloatWaveFormat(44100, 2)); bufferedProvider.BufferDuration = TimeSpan.FromSeconds(3); // 可根据网络情况调整缓存时长 var waveOut = new WaveOut(); waveOut.Init(bufferedProvider); waveOut.Play(); // 接收流数据时写入缓存 byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = receivedStream.Read(buffer, 0, buffer.Length)) > 0) { bufferedProvider.AddSamples(buffer, 0, bytesRead); }嵌入Windows Media Player控件:如果是WinForms或WPF应用,可直接嵌入Windows Media Player控件,它原生支持MPEG格式流播放,只需将控件的播放源指向接收的流对象或流地址即可实现实时播放。
借助FFmpeg解码:利用FFmpeg的强大解码能力,将MPEG流转换为PCM格式后,再通过基础音频播放API输出。这种方式支持几乎所有音频格式,但需要集成FFmpeg的绑定库(如FFmpeg.AutoGen)。
内容的提问来源于stack exchange,提问作者lingeringame
相关产品推荐
相关产品推荐

