我正在使用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);
}
}
当数据可用时,有一个事件处理程序将从记录流中获取数据。
我能够创建一个音频 (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();
在上面的代码中,我在源目录中有一个录制完成的最终音频文件——C:\Recording\Audio\1789846.wav
我尝试使用活动文件创建流 - 记录器不断更新该文件。(SourceStreamDataAvailable
函数将字节写入此文件)。我在上面使用了相同的代码。
它在几秒/分钟后停止流式传输。(我认为它只是从最初可用的数据创建一个流,它没有使用更新的文件/内容。)
- 有没有办法解决这个问题??
- 是否可以使用我使用录音机从麦克风捕获的字节创建 HTTP 音频流
NAudio
?无需创建文件。
在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);
}
我已经做了足够的谷歌搜索来实施这个解决方案,但没有运气。我可以使用 LibVlc 或任何用于 c# 的 VLC 开源库。