C#wpf如何将网络摄像头传输到ip地址(可能是用Vlc)

问题描述 投票:0回答:1

我需要将网络摄像头流式传输到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应用程序中使用它来发送网络摄像头流。

谢谢你的帮助

帕特里克

c# wpf stream webcam vlc.dotnet
1个回答
0
投票

我相信这个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库)。

© www.soinside.com 2019 - 2024. All rights reserved.