如何在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 flagsettings.CefCommandLineArgs.Add("enable-media-stream", "1"); Cef.Initialize(settings);

CefSettings.CefCommandLineArgss属性使你可以将自定义命令行参数添加到应在Chromium的初始化以及OnBeforeCommandLineProcessing事件中添加的标志的集合。 Add函数的第一个参数指示应添加的标志的名称, 第二个参数为其值(在这种情况下, 1指示应包括该标志)。
例子【如何在WinForms中为CefSharp启用WebRTC(访问摄像机和麦克风)】下面的示例在表单中初始化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 cefsharpusing 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 microphonesettings.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 onlinechromeBrowser = 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 cefsharpInitializeChromium(); }private void Form1_Load(object sender, EventArgs e){}private void Form1_FormClosing(object sender, FormClosingEventArgs e){Cef.Shutdown(); }}}

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

    推荐阅读