我需要将网络摄像头流式传输到IP地址。经过几天的谷歌搜索,我认为最简单的方法是嵌入Vlc。这说我仍然对其他解决方案持开放态度。
Step1 - OK!:我可以使用该代码在表单中看到我的网络摄像头:
vlcPlayer.MediaPlayer.VlcLibDirectory = new DirectoryInfo(@"c:\Program Files (x86)\VideoLAN\VLC\");
vlcPlayer.MediaPlayer.EndInit();
vlcPlayer.MediaPlayer.Play(new Uri(@"dshow://");
Step2 - OK!:现在尝试向前迈出一步并使用这个tutorial我可以使用2个Vlc实例在本地发送视频127.0.0.1:5004:一个用于发送,一个用于接收。
第3步 - 不行:配置vlc以将源文件更改为网络摄像头并通过ip传输它似乎很简单。所以我所做的就是像以前一样只改变来源:1。菜单“媒体” - >流。这打开了“开放媒体”窗口。
在这里我点击标签捕获设备 - >视频设备名称 - >我选择“集成网络摄像头”
然后剩下的就像以前一样。但没有任何反应。接收器是黑色的,内部没什么。此外,如果我尝试从接收器保存流量,我只得到几个字节。前面提到的变送器设置如下:
捕获设备选项卡 - >集成网络摄像头。然后流按钮 - >窗口正确打开dshow:\ - > next - > new destination RTP,MPEG transport stream ---> add button - > address = 127.0.0.1 port = 5004 StreamNAme = test
所以奇怪的是,当我使用来自发射器的任何名称来传输文件时,它立即被接收器识别。相反,尽量尝试,当网络摄像头是源时,没有任何反应。
话虽如此,上述问题对解决方案并不重要。我关心的不是如何单独使用vlc,而是如何在我的wpf应用程序中使用它来发送网络摄像头流。
谢谢你的帮助
帕特里克
我相信这个sample应该帮助你实现你的目标:
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库)。