c# - 为 HTML5 从设备中的线路创建实时音频流

标签 c# html audio-streaming naudio

我正在使用 NAudio将音频信号从我的线路输入设备捕获到字节数组中。我可以通过 UDP 广播在我的 WLAN 上成功发送该字节数组,并在另一台计算机上接收它。收到字节数组后,我就可以播放音频流了。

我的目标是从设备中的线路流式传输音频信号,以便它可以被 HTML5 音频标签或 jPlayer 使用。 .您是否有关于如何将输入字节数组转换为兼容 HTML5 格式的流的示例或阅读 Material ?

我想在不使用任何第三方应用程序的情况下创建一个 .Net 解决方案。

这是我如何通过 UDP 捕获和广播音频信号的示例。

var waveIn = new WaveInEvent();
waveIn.DeviceNumber = deviceID;
waveIn.WaveFormat = Program.WAVEFORMAT;
waveIn.BufferMilliseconds = 50;
waveIn.DataAvailable += OnDataAvailable;

var udpSender = new UdpClient();
udpSender.JoinMulticastGroup(Program.MulticastIP);

waveIn.StartRecording();

private void OnDataAvailable(object sender, WaveInEventArgs e)
{
    udpSender.Send(e.Buffer, e.BytesRecorded, Program.EndPoint);
}

最佳答案

您的问题的答案实际上取决于您是想将音频流式传输到兼容 HTML5 的浏览器,还是只想播放录制的音频。

根据 W3School,所有主要浏览器都支持主要音频格式 (wav/ogg/mp3):

http://www.w3schools.com/html/html5_audio.asp

使用 HTML5 audio 标签播放预先录制的音频文件非常简单。上面的链接描述了如何实现这一点。

将音频实时流式传输到 HTML5 浏览器是一个完全不同的故事。您需要某种流媒体服务器。我建议不要尝试自己实现。为此使用外部库要容易得多。

我现在能想到的唯一可靠的解决方案是使用 libvlc 的免费 .Net P/Invoke 库之一,它提供对 VLC 媒体播放器的流媒体功能的访问。

以下 StackOverflow 问题描述了如何使用 libvlc 设置音频流服务器:

Use libvlc to stream mp3 to network

您可以尝试在 C# 中完成同样的事情。它可能需要一些 P/Invoke 工作,但它是我能想到的最可靠的解决方案。

关于c# - 为 HTML5 从设备中的线路创建实时音频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19687658/

相关文章:

c# - N2 自定义登录逻辑

html - 尝试在多个页面中包含带有自己的 CSS 的标题

html - 拉伸(stretch) Iframe 视频超过最大屏幕宽度,无法找到 overflow hidden 的方法

c# - 信箱不可用。服务器响应为 : 5. 4.1 中继访问被拒绝

C# 从字典中获取键 <string, Stream>

c# - 引用 NuGet 包后避免在构建输出中使用多个 DLL

php - 通过切换选择中的选项在不同的表列中显示不同的数据

c# - 录制和混合音频时,NAudio的BufferedWaveProvider变满

java - 无法播放音频文件

c# - 使用 Xamarin MediaManager 流式传输音频