首页 > 解决方案 > 使用 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客户端上播放音频时,它在音频中间有一个静音块。音频不连续。看起来它发送了一半的音频一半的沉默。

有人可以帮我吗?我是否在线程中使用了错误的缓冲区?

标签: c#naudiolive-streamingicecastlame

解决方案


推荐阅读