Отправка потокового аудио Icecast с помощью NAudio BufferedWaveProvider - PullRequest
0 голосов
/ 05 июня 2019

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

Может кто-нибудь помочь мне с этим? Я неправильно использую буфер с потоками?

...