Я пытаюсь передать аудио с микрофона по умолчанию на хосте Windows в контейнер Docker. Монтирование устройств через уровни виртуализации может быть проблематичным. Я не могу понять, как правильно использовать входящий поток в моем коде C # (dotnet core).
Я использую приложение Windows VLC для создания тестового потока на моем хосте Windows, используя инструкции здесь . Я транслирую на rtp: //127.0.0.1: 5004, так как все будет работать на одной машине. Код для использования потока в моем пользовательском приложении на C # выглядит следующим образом:
LibVLC libvlc = new LibVLC();
libvlc.SetLogFile("c:\\temp\\vlc.log");
MediaPlayer player = new MediaPlayer(libvlc);
var media = new Media(libvlc, "rtp://127.0.0.1:5004", FromType.FromLocation);
var status = await media.Parse(MediaParseOptions.ParseNetwork);
player.Playing += (sender, e) =>
{
//Need to do something here?
};
player.Play(media);
Что я ожидал сделать, это зарегистрировать некоторый обработчик событий в MediaPlayer, Media или каком-либо другом объекте VLC и получить буфераудио байтов, которые я мог бы преобразовать в ожидаемый формат (PCM, 1 канал, 16K выборок / сек, 16 бит на выборку), а затем переписать в другой поток (не показан в коде для простоты). Но я явно что-то упускаю.
Итак, мои вопросы: для моего сценария, я должен предпочесть потоковую передачу HTTP, RTSP или RTP с хоста? И как только я получу этот набор правильно, как зарегистрировать входящие аудио события, чтобы я мог обработать их и записать данные в другой поток?