本文概述
默认情况下, 如果你在没有正确配置的情况下尝试从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不同, 不会提示你授予对麦克风或摄像头的访问权限, 而只是授予对设备的访问权限。
编码愉快!
评论前必须登录!
注册