Я использую библиотеку 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
с микрофона, используя рекордер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);
}
Я сделал достаточно Google, чтобы реализовать это решение, но не повезло. Я в порядке с LibVlc или любыми библиотеками с открытым исходным кодом VLC для С#.