C# wpf如何将网络摄像头流式传输到IP地址(可能使用Vlc)



我需要将网络摄像头流式传输到IP地址。 经过几天的谷歌搜索,我决定最简单的方法是嵌入 Vlc。 也就是说,我也仍然对其他解决方案持开放态度。


步骤1 - 好的!:我可以使用该代码在表单中看到我的网络摄像头:

vlcPlayer.MediaPlayer.VlcLibDirectory = new DirectoryInfo(@"c:Program Files (x86)VideoLANVLC");
vlcPlayer.MediaPlayer.EndInit();
vlcPlayer.MediaPlayer.Play(new Uri(@"dshow://");

Step2 - 好的!:现在尝试向前迈出一步并使用本教程,我可以使用 2 个 Vlc 实例在本地发送视频 127.0.0.1:5004:一个用于传输,一个用于接收。


步骤3 - 不行:配置VLC以将源从文件更改为网络摄像头并通过IP传输似乎很简单。 所以我所做的是像以前一样操作,只更改源: 1.菜单"媒体"-->流。这将打开"打开媒体"窗口。

在这里我点击标签捕获设备-->视频设备名称-->我选择"集成网络摄像头">

然后剩下的一切都和以前一样。但什么也没发生。接收器是黑色的,里面什么都没有。此外,如果我尝试保存来自接收器的流,我只会得到几个字节。 上述变送器的设置如下:

捕获设备选项卡 ->集成网络摄像头。然后流按钮 -->窗口正确打开,dshow:\ -->下一个 -->新的目标 RTP,MPEG 传输流--->添加按钮 -->地址 = 127.0.0.1 端口 = 5004 流NAme=测试

所以奇怪的是,当我从发射器流式传输具有任何名称的文件时,接收器会立即识别它。相反,尽我所能尝试,当网络摄像头是源时,什么都不会发生。


话虽如此,上述问题对解决方案并不重要。 我关心的不是如何单独使用 vlc,而是如何从我的 wpf 应用程序中使用它来发送网络摄像头流。

感谢您的任何帮助

帕特里克

我相信此示例应该可以帮助您实现目标:

static void Main()
{
var currentDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
// Default installation path of VideoLAN.LibVLC.Windows
var libDirectory =
new DirectoryInfo(Path.Combine(currentDirectory, "libvlc", IntPtr.Size == 4 ? "win-x86" : "win-x64"));
using (var mediaPlayer = new Vlc.DotNet.Core.VlcMediaPlayer(libDirectory))
{
var mediaOptions = new[]
{
":sout=#rtp{sdp=rtsp://127.0.0.1:554/}",
":sout-keep"
};
mediaPlayer.SetMedia(new Uri("http://hls1.addictradio.net/addictrock_aac_hls/playlist.m3u8"),
mediaOptions);
mediaPlayer.Play();
Console.WriteLine("Streaming on rtsp://127.0.0.1:554/");
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
}

您将需要 2 个 nuget 包:Vlc.DotNet(C# 包装器(和 VideoLAN.LibVLC.Windows(适用于 Windows 的 LibVLC 库(。

最新更新