我正在尝试将音频从Windows主机上的默认麦克风流传输到Docker容器。通过虚拟化层安装设备可能会出现问题。我无法弄清楚如何正确使用C#(dotnet核心)代码中的传入流。
我正在使用VLC Windows应用程序按照说明here在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流?一旦我正确设置了该设置,如何注册传入的音频事件,以便我可以对其进行处理并将数据写入另一个流?
答案 0 :(得分:0)
检出MediaPlayer.SetAudioFormatCallback
方法。
但是请注意,libvlc可以使用诸如p
之类的媒体选项为您处理流式传输。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