NAudio 网络流媒体

Posted

技术标签:

【中文标题】NAudio 网络流媒体【英文标题】:NAudio network streaming 【发布时间】:2011-06-13 14:17:11 【问题描述】:

我有一个应用程序可以使用 NAudio 播放一些 mp3 文件,我花了几天时间尝试通过网络将此声音发送到另一台电脑,但我不知道有什么更好的方法。 我需要使用哪些类来访问缓冲区以及如何重新构建要在远程播放的字节数组?什么是最好的,发送 mp3Frames,还是发送 raw 或 pcm 数据更好?

我真的迷路了,任何帮助将不胜感激。 谢谢

【问题讨论】:

【参考方案1】:

我建议通过网络传输 MP3,而不是 PCM,因为 PCM 文件比 MP3 大很多。

最新的NAudio source code 包含一个播放互联网 MP3 广播的演示(在 NAudioDemo 项目中),它将向您展示如何接收 MP3 帧,解压缩它们,并将它们放入 BufferedWaveProvider 进行播放。我已经在我的博客上写了 an article 关于它的工作原理。

NAudioDemo 还包括网络对等音频聊天的演示,使用 UDP 套接字发送音频,但不使用 MP3 进行压缩。

【讨论】:

谢谢,我想它现在可以工作了,但我还是有问题。 谢谢,我想它现在可以工作了,但我还是有问题。我逐帧读取 mp3 以播放和发送 rawData,但缓冲区增长很快(它在循环内)并且我得到缓冲区满异常。我试图改变缓冲区大小,但显然这不是解决方案。每次 bufferedWaveProvider 读取一个块时,我都尝试读取下一帧,但在这种情况下,缓冲区中没有足够的数据来播放文件。 (太慢了)。你能帮我解决这个问题吗?谢谢。 快速简单的解决方案 - 只需在 bufferedWaveProvider 中有太多内容时执行 Thread.Sleep,然后等到它关闭。更好的解决方案,将 MP3Frames 放入队列中。然后另一个线程监视 bufferedWaveProvider,当它变低时,从队列中弹出一个 MP3 帧,解压缩并将其粘贴在 bufferedWaveProvider 中。 最后我在添加字节之前用一个简单的“If”解决了这个控制bufferLength的问题......我认为我的最后一个问题是平移声音,因为我不使用WaveChannel,但我想我可以通过 PanningSampleProvider 修复它。再次感谢!

以上是关于NAudio 网络流媒体的主要内容,如果未能解决你的问题,请参考以下文章

NAudio流式语音聊天c#

使用 NAudio 替换视频的音频流

流媒体网络协议概述

如何用VLC播放网络流媒体

如何用VLC播放网络流媒体

网络新媒体专业的所学课程都有哪些