Wpf如何完美嵌入摄像头(一)

Wpf如何完美嵌入摄像头

写在前面

简单的东西不要复杂化,高手绕道,钥匙君分享技巧!
本篇主要介绍通过嵌入浏览器的方式访问摄像头,以及嵌入后各种常见问题,后面文章依次讲解更多方式嵌入,欢迎关注点赞支持!

开炮!开炮!

1、先测一下摄像头

直接一根网线一端接到电脑一端接摄像头,打开浏览器输入摄像头ip可直接访问到摄像头,证明硬件没问题,不同摄像头操作和画面可能不一样
Wpf如何完美嵌入摄像头(一)_第1张图片

2、正确引用CefSharp包

可以看到默认的版本都是最新的版本,最新的版本可能不支持网页视频的播放,如果遇到这个问题请选择88.2.90版本,然后按下一步操作
Wpf如何完美嵌入摄像头(一)_第2张图片
选择88.2.90版本后,在解决方案文件夹的packages下分别替换掉libcef.dll
附上这个dll的下载地址
https://download.csdn.net/download/vitomian/87512769
找到解决方案文件夹中的packages\cef.redist.x64.88.2.9\CEF文件夹中,将上述下载的x64文件夹下的libcef.dll替换
Wpf如何完美嵌入摄像头(一)_第3张图片
同理,找到解决方案文件夹中的packages\cef.redist.x86.88.2.9\CEF,将上述下载的x86文件夹下的libcef.dll替换
替换完成后务必重新生成解决方案!!

3、直接上MainWindow.xaml代码

剩下就是代码了,前端极其简单,就一个名字自己定义的Grid控件,这里叫SoulkeyGrid
Wpf如何完美嵌入摄像头(一)_第4张图片

<Window x:Class="Demo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Demo"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid x:Name="SoulkeyGrid">
        
    </Grid>
</Window>

3、直接上MainWindow.xaml.cs代码

后端句句给你注释了,别说看不懂啊…

namespace Demo
{

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            //这句还要注释?
            InitializeComponent();
            //这里自定义了一个方法,主要用于初始化浏览器配置
            InitializeCefSharp();
        }
   
      
        private void InitializeCefSharp()
        {
            //实例化一个Cef设置类
            var settings = new CefSettings();
            
         
            //调用初始化函数
            //需要注意的是必须在主应用程序线程(通常是UI线程)上调用Initialize和Shutdown。如果在不同的线程上调用它们,应用程序将挂起。
            Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null);

            //通过实例化一个browser来访问
         
            ChromiumWebBrowser browser = new ChromiumWebBrowser("https://www.bilibili.com/video/av554890701/?vd_source=998270bb6676960b85d15a8c120673d8");//这里是测试网页视频是否能正确播放,确认无误后输入你的摄像头ip

            //SoulkeyGrid是MainWindow.xaml前端定义的一个Grid名称叫SoulkeyGrid
            SoulkeyGrid.Children.Add(browser);

        }

    }
}

这里是随便打开了某视频网站的网址,确认能正常播放视频
Wpf如何完美嵌入摄像头(一)_第5张图片
接下来直接将这句的url改成第一步测试摄像头的网页地址即可

ChromiumWebBrowser browser = new ChromiumWebBrowser("摄像头的url");//这里是测试网页视频是否能正确播放,确认无误后输入你的摄像头ip

4、常见问题

1、首先就是摄像头地址能在窗体中访问,但是没有flash或者不支持视频播放,遇到这个问题请翻阅本文第2点
2、有些摄像头网址它是有安全性认证的,那么对于Cef如何跳过安全性认证呢,其实只需要给上述setting多添加两句设置就行了

    settings.CefCommandLineArgs.Add("--ignore-urlfetcher-cert-requests", "1");
            settings.CefCommandLineArgs.Add("--ignore-certificate-errors", "1");

这样完整代码如下

namespace Demo
{

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            //这句还要注释?
            InitializeComponent();
            //这里自定义了一个方法,主要用于初始化浏览器配置
            InitializeCefSharp();
        }

        [MethodImpl(MethodImplOptions.NoInlining)]
        private void InitializeCefSharp()
        {
            //实例化一个Cef设置类
            var settings = new CefSettings();

            //跳过安全证书认证
            settings.CefCommandLineArgs.Add("--ignore-urlfetcher-cert-requests", "1");
            settings.CefCommandLineArgs.Add("--ignore-certificate-errors", "1");


            //调用初始化函数
            //需要注意的是必须在主应用程序线程(通常是UI线程)上调用Initialize和Shutdown。如果在不同的线程上调用它们,应用程序将挂起。
            Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null);

            //通过实例化一个browser来访问

            ChromiumWebBrowser browser = new ChromiumWebBrowser("https://www.bilibili.com/video/av554890701/?vd_source=998270bb6676960b85d15a8c120673d8");//这里输入你的摄像头ip
            //ChromiumWebBrowser browser = new ChromiumWebBrowser("摄像头的url");//如果是局域网直接这里输入你的摄像头ip

            //SoulkeyGrid是MainWindow.xaml前端定义的一个Grid名称叫SoulkeyGrid
            SoulkeyGrid.Children.Add(browser);

        }

    }
}

还不会?附上全文Demo源码,请笑纳
下一篇将介绍如何直接通过SDK去获取摄像头画面
如果确实帮到您了感谢关注点赞支持,谢谢!

你可能感兴趣的:(Wpf专栏,wpf,c#,visual,studio,.netcore,青少年编程)