0

我正在尝试将音频从 Windows 主机上的默认麦克风流式传输到 Docker 容器。通过层 pf 虚拟化安装设备可能会出现问题。我无法弄清楚如何在我的 C#(dotnet 核心)代码中正确使用传入的流。

我正在使用 VLC windows 应用程序在我的 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 流?一旦我正确设置了该设置,如何注册传入的音频事件,以便我可以处理它们并将数据写入另一个流?

4

1 回答 1

0

检查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

于 2019-10-02T03:37:58.397 回答