// Copyright © 2019 The CefSharp Authors. All rights reserved. // // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. using System; using CefSharp.Structs; namespace CefSharp { /// /// Implement this interface to handle audio events /// All methods will be called on the CEF UI thread /// public interface IAudioHandler : IDisposable { /// /// Called on the CEF UI thread to allow configuration of audio stream parameters. /// Audio stream paramaters can optionally be configured by modifying /// /// the ChromiumWebBrowser control /// the browser object /// audio stream parameters can optionally be configured here, they are /// pre-filled with some sensible defaults. /// Return true to proceed with audio stream capture, or false to cancel it bool GetAudioParameters(IWebBrowser chromiumWebBrowser, IBrowser browser, ref AudioParameters parameters); /// /// Called on a browser audio capture thread when the browser starts streaming audio. /// OnAudioStreamStopped will always be called after OnAudioStreamStarted; both methods may be called multiple /// times for the same browser. /// /// the ChromiumWebBrowser control /// the browser object /// contains the audio parameters like sample rate and channel layout. /// Changing the param values will have no effect here. /// is the number of channels void OnAudioStreamStarted(IWebBrowser chromiumWebBrowser, IBrowser browser, AudioParameters parameters, int channels); /// /// Called on the audio stream thread when a PCM packet is received for the stream. /// Based on and the value passed to /// you can calculate the size of the array in bytes. /// /// /// is an array representing the raw PCM data as a floating point type, i.e. 4-byte value(s). /// is the number of frames in the PCM packet /// is the presentation timestamp (in milliseconds since the Unix Epoch) /// and represents the time at which the decompressed packet should be presented to the user void OnAudioStreamPacket(IWebBrowser chromiumWebBrowser, IBrowser browser, IntPtr data, int noOfFrames, long pts); /// /// Called on the CEF UI thread when the stream has stopped. OnAudioStreamStopped will always be called after ; /// both methods may be called multiple times for the same stream. /// /// the ChromiumWebBrowser control /// the browser object void OnAudioStreamStopped(IWebBrowser chromiumWebBrowser, IBrowser browser); /// /// Called on the CEF UI thread or audio stream thread when an error occurred. During the /// stream creation phase this callback will be called on the UI thread while /// in the capturing phase it will be called on the audio stream thread. The /// stream will be stopped immediately. /// /// the ChromiumWebBrowser control /// the browser object /// error message void OnAudioStreamError(IWebBrowser chromiumWebBrowser, IBrowser browser, string errorMessage); } }