11

I am using NAudio library to record systems mic input - continuously.

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);
        }
}

there is an event handler which will get the data from recording stream, whenever data is available.

I was able to create an audio (mp3) HTTP streaming, with the VLC player installed in my system - with an existing audio file.

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();

In the above code, I have a recording completed final audio file in the source directory - C:\Recording\Audio\1789846.wav

I have tried to create the stream with the active file - which is continuously being updated by a recorder. (SourceStreamDataAvailable function write bytes to this file). I used same code above.

It stops streaming after few seconds/minutes. (I think it is creating a stream from the initially available data only, and it is not using the updated file/content.)

  1. Is there any way to solve this problem??
  2. Is it possible to create an HTTP audio stream with the bytes I have captured from the mic using NAudio recorder.? without creating a file.

Within the SourceStreamDataAvailable function, sent whatever content is available to the stream, and keep updating it.

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);  
}

I have done enough googling to implement this solution but no luck. I am okay with LibVlc or any VLC open source libraries for c#.

CSDev
  • 3,177
  • 6
  • 19
  • 37

0 Answers0