个性化阅读
专注于IT技术分析

如何在WinForms中为CefSharp启用WebRTC(访问摄像机和麦克风)

本文概述

默认情况下, 如果你在没有正确配置的情况下尝试从CefSharp中加载的文档访问窗口中的navigator.getUserMedia对象, 则浏览器将不允许访问麦克风或相机。即使你访问的是受保护的网站(使用https协议)或本地文件, 该API也不会简单地起作用。

但是, 该解决方案非常简单, 只需在CefSharp的初始化时添加–enable-media-stream标志, 即可使用麦克风和摄像头。

添加启用媒体流标志

解决方案听起来很简单吧?它的实现也很容易。你只需要查找项目中CefSettings加载到Cefsharp的位置, 并使用CefCommandLineArgs字典的Add方法添加我们需要的标志:

CefSettings settings = new CefSettings();

// Add the --enable-media-stream flag
settings.CefCommandLineArgs.Add("enable-media-stream", "1");

Cef.Initialize(settings);

CefSettings.CefCommandLineArgss属性使你可以将自定义命令行参数添加到应在Chromium的初始化以及OnBeforeCommandLineProcessing事件中添加的标志的集合。 Add函数的第一个参数指示应添加的标志的名称, 第二个参数为其值(在这种情况下, 1指示应包括该标志)。

例子

下面的示例在表单中初始化CefSharp的简单实例。它将加载一个网站, 使你可以在浏览器中拍照(或根据你设置的Web URL设置音量计)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

// Load cefsharp
using CefSharp;
using CefSharp.WinForms;

namespace CefsharpExample
{
    public partial class Form1 : Form
    {
        public ChromiumWebBrowser chromeBrowser;

        public void InitializeChromium()
        {
            CefSettings settings = new CefSettings();

            // Initialize cef with a command line argument
            // In this case the enable-media-stream flag that allows you to access the camera and the microphone
            settings.CefCommandLineArgs.Add("enable-media-stream", "1");

            Cef.Initialize(settings);

            // Create a browser component
            // In this example we are opening a website that allows you to take pictures with the camera online
            chromeBrowser = new ChromiumWebBrowser("https://webcamtoy.com");
            // Or if you want to test the microphone level instead
            // chromeBrowser = new ChromiumWebBrowser("https://webaudiodemos.appspot.com/volume-meter/");

            // Add the cef control to the form and fill it to the form window.
            this.Controls.Add(chromeBrowser);
            chromeBrowser.Dock = DockStyle.Fill;
        }

        public Form1()
        {
            InitializeComponent();

            // Start cefsharp
            InitializeChromium();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Cef.Shutdown();
        }
    }
}

CefSharp的有趣之处在于, 与Google Chrome不同, 不会提示你授予对麦克风或摄像头的访问权限, 而只是授予对设备的访问权限。

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何在WinForms中为CefSharp启用WebRTC(访问摄像机和麦克风)

评论 抢沙发

评论前必须登录!