Я хочу отправить прочитанные байты из 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, в середине аудио появляется немая часть. Аудио не является непрерывным. Похоже, он посылает половину звука, половина молчания.
Может кто-нибудь помочь мне с этим? Я неправильно использую буфер с потоками?