c# - 使用 NAudio BufferedWaveProvider 发送 Icecast 实时音频流
问题描述
我想将读取的字节从 NAudio BufferedWaveProvider 发送到 Icecast 服务器。我已经完成了,但我面临着音频块和静音的问题。声音没有连续发送。
我试过以下方法:
void init_broadcast(){
//Connect to the icecast server
Libshout icecast = new Libshout();
icecast.connect();
//Audio format
WaveFormat format = new WaveFormat(44100, 2);
//Audio input and buffer
WaveIn wavein = new WaveIn(format);
BufferedWaveProvider bwp = new BufferedWaveProvider(format);
//Save audio to buffer
wavein.DataAvailable += delegate(object sender, WaveInEventArgs args){
bwp.AddSamples(args.Buffer, 0, args.BytesRecorded);
}
//Start recording
wavein.StartRecording();
//Thread to send continuously audio to icecast server
new Thread(() => {
while(true){
if(!icecast.isConnected)
break;
var buffer = new byte[bwp.BufferLength];
bwp.Read(buffer, 0, buffer.Length);
byte[] mp3 = to_mp3_encoder(buffer);
icecast.send(mp3);
}
}).Start();
}
这是我的 to_mp3_encoder 方法:
public byte[] to_mp3_encoder(byte[] buffer) {
byte[] buffer_mp3;
using(MemoryStream ms = new MemoryStream()) {
LameMP3FileWriter writer = new LameMP3FileWriter(ms, new WaveFormat(44100, 2), LAMEPreset.ABR_128);
writer.Write(buffer, 0, buffer.Length);
writer.Flush();
buffer_mp3 = ms.GetBuffer();
}
return buffer_mp3;
}
它可以正常工作,服务器连接并正确发送音频,但是当我在icecast客户端上播放音频时,它在音频中间有一个静音块。音频不连续。看起来它发送了一半的音频一半的沉默。
有人可以帮我吗?我是否在线程中使用了错误的缓冲区?
解决方案
推荐阅读
- python - Netsuite的“Invalid company/rolequalification”查询错误含义
- swift - 在 Mongo RealmSwift 中注册用户之前如何调用系统函数?
- flutter - Dart 和 Flutter 异步初始化最佳实践和代码结构 - 如何在继续之前等待流中的某个条件
- python - 在 pygal Worldmaps 中生成值格式化程序的 Python 问题
- maven - Maven 插件 - 如何为列表的每个项目配置元素
- linux - 詹金斯服务器重启/重启后詹金斯ssl失败?
- excel - 从这个错误日志中,您可以判断是否确实对此 Excel 文件进行了任何修复?
- javascript - 有什么方法可以复制元素以防止 HTML 中的重复代码?
- .net - 具有多个数据源的 DAL 的最佳模式是什么?
- java - 除非调整大小,否则 JPanel 拒绝显示在窗口中