根据正在录制的WAV音频,使用C#中的VLC创建http音频流

Sar*_*yil 10 c# vlc audio-streaming bass http-live-streaming

我正在使用NAudio库来记录系统麦克风输入 - 连续.

private void RecordStart() {
        try {
            _sourceStream = new WaveIn {
                DeviceNumber = _recordingInstance.InputDeviceIndex,
                WaveFormat =
                    new WaveFormat(
                    44100,
                    WaveIn.GetCapabilities(_recordingInstance.InputDeviceIndex).Channels)
            };
            _sourceStream.DataAvailable += SourceStreamDataAvailable;
            _sourceStream.StartRecording();
        } catch (Exception exception) {
            Log.Error("Recording failes", exception);
        }
}
Run Code Online (Sandbox Code Playgroud)

有一个事件处理程序,只要有数据,它就会从记录流中获取数据.

我能够使用现有的音频文件创建一个音频(mp3)HTTP流媒体,并在我的系统中安装VLC播放器.

const int portNumber = 8089;
const string streamName = "fstream_1789846";
const string audio = "C:\\Recording\\Audio\\1789846.wav";
const string windowQuiet = "-I dummy --dummy-quiet";
const string tanscode = ":sout=#transcode{vcodec=none,acodec=mp3,ab=128,channels=2,samplerate=44100}";
var stream = String.Format(@":http{{mux=mp3,dst=:{0}/{1}}}", portNumber, streamName);
const string keep = ":sout-keep";

var vlcStreamParamList = new List<string> {windowQuiet, audio, tanscode+stream, keep};

var process = new Process
{
    StartInfo =
    {
        FileName = @"C:\Program Files (x86)\VideoLAN\VLC\vlc.exe",
        RedirectStandardOutput = true,
        UseShellExecute = false,
        CreateNoWindow = true                    
    }
};

var vlcParamString = String.Join(" ", vlcStreamParamList);
process.StartInfo.Arguments = vlcParamString;
process.Start();
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我在源目录中有一个录制完成的最终音频文件 - C:\Recording\Audio\1789846.wav

我试图用活动文件创建流 - 这是由记录器不断更新.(SourceStreamDataAvailable函数将字节写入此文件).我上面使用了相同的代码.

它会在几秒钟/几分钟后停止流式传输.(我认为它仅从最初可用的数据创建流,并且它没有使用更新的文件/内容.)

  1. 有什么方法可以解决这个问题吗?
  2. 是否可以使用NAudio记录器从麦克风中捕获的字节创建HTTP音频流.没有创建文件.

SourceStreamDataAvailable函数内,发送流可用的任何内容,并不断更新它.

private void SourceStreamDataAvailable(object sender, WaveInEventArgs e) {

        //create an http stream with Vlc/LibVlc/BASS.Net or any library
        //and stream the bytes received from recording.
        //e.BytesRecorded);  
}
Run Code Online (Sandbox Code Playgroud)

我已经做了足够的谷歌搜索来实现这个解决方案,但没有运气.我对LibVlc或任何用于c#的VLC开源库都没问题.