Как я могу записать входной аудиопоток в другой поток? - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь передать аудио с микрофона по умолчанию на хосте 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 с хоста? И как только я получу этот набор правильно, как зарегистрировать входящие аудио события, чтобы я мог обработать их и записать данные в другой поток?

1 Ответ

0 голосов
/ 02 октября 2019

Проверьте метод MediaPlayer.SetAudioFormatCallback.

Но учтите, что libvlc может обрабатывать потоковую передачу для вас, используя такие параметры мультимедиа, как

media.AddOption(":sout=#rtp{sdp=rtp://127.0.0.1:5004}");
media.AddOption(":sout-keep");

См. Список параметров в https://wiki.videolan.org/VLC_command-line_help

я предпочитаю потоковую передачу HTTP, RTSP или RTP с хоста?

Возможно, вам будет интересно узнать больше об этом здесь https://stackoverflow.com/a/4303565/4064749

...