По умолчанию, если вы пытаетесь получить доступ к navigator.getUserMedia
Объект в окне из документа, загруженного в CefSharp без соответствующей настройки, браузер не разрешит доступ к микрофону или камере. Даже если вы заходите на защищенный веб-сайт (используя https
протокол) или с локальными файлами, API не будет просто работать.
Решение, однако, очень простое, вам нужно только добавить --enable-media-stream
установите флажок при инициализации CefSharp, и вы готовы работать с микрофоном и камерой.
Добавить флаг включения медиа потока
Решение звучит легко, правда? Его реализация тоже проста. Вам просто нужно найти где CefSettings
загружаются в Cefsharp в вашем проекте и используют Add
метод CefCommandLineArgs
Словарь, чтобы добавить флаг, который нам нужен:
CefSettings settings = new CefSettings();
// Add the --enable-media-stream flag
settings.CefCommandLineArgs.Add("enable-media-stream", "1");
Cef.Initialize(settings);
CefSettings.CefCommandLineArgs
Свойство позволяет добавлять настраиваемые аргументы командной строки в коллекцию флагов, которые должны быть добавлены при инициализации Chromium и в OnBeforeCommandLineProcessing
событие. Первый аргумент Add
Функция указывает имя флага, который должен быть добавлен, а в качестве второго аргумента — его значение (в этом случае 1 указывает, что он должен быть включен).
пример
В следующем примере инициализируется простой экземпляр CefSharp внутри формы. Он загрузит веб-сайт, который позволяет вам делать снимки в браузере (или измеритель объема в соответствии с заданным вами веб-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, вам не будет предложено предоставить доступ к микрофону или камере, он просто предоставит доступ к устройствам.