媒体

本指南概述了支持的视频和音频格式,介绍了如何控制音频、获取有关可用网络摄像头和麦克风的信息以及其他功能。

编解码器

Google Chrome 和 Chromium 在几个方面有所不同,包括它们支持的音频和视频编解码器集。

下表显示了相应浏览器的代码库支持的编解码器。

  Chromium Google Chrome
AAC no yes
AV1 yes yes
FLAC yes yes
H.264 no yes
HEVC no yes
MP3 yes yes
Opus yes yes
Theora yes yes
Vorbis yes yes
VP8 yes yes
VP9 yes yes
WAV yes yes


如上表所示,Google Chrome 浏览器支持某些编解码器,而 Chromium 浏览器则不支持。 原因是这些编解码器是专有的,未经相应专利持有者的许可不能用于开源或商业项目。

不同的编解码器有不同的专利持有者。 例如,要使用 H.264,公司必须获得 MPEG-LA 公司的许可。 您可以在 MPEG-LA 网站上阅读有关其许可条款的更多信息。

专有编解码器

专利持有者不会将编解码器许可给仅代表部署给终端用户的最终产品的一部分的软件,例如,像 DotNetBrowser 这样的库。

要在您的产品中支持 H.264,HEVC 和 AAC,您需要购买相应的许可证并启用以下专有功能:

engine = EngineFactory.Create(new EngineOptions.Builder
{
    RenderingMode = RenderingMode.HardwareAccelerated,
    ProprietaryFeatures = ProprietaryFeatures.H264 |
                          ProprietaryFeatures.Aac |
                          ProprietaryFeatures.Hevc
}.Build());
engine = EngineFactory.Create(New EngineOptions.Builder With 
{
    .RenderingMode = RenderingMode.HardwareAccelerated,
    .ProprietaryFeatures = ProprietaryFeatures.H264 Or
                           ProprietaryFeatures.Aac Or
                           ProprietaryFeatures.Hevc
}.Build())

提供许可证信息并启用专有功能后,您就可以像在 Google Chrome 浏览器中一样,使用 AAC、H.264 和 HEVC 格式加载网页,播放音频和视频文件。 默认情况下,专有编解码器被禁用。

H.264,HEVC 和 AAC 编解码器是专有组件。 启用这些编解码器即表明您知道 H.264、HEVC 和 AAC 是专有组件,您必须获得许可才能使用它们。 欲了解更多信息,您可以联系专利持有者:Via Licensing 和 MPEG LA。 TeamDev 对您使用 H.264、HEVC 和 AAC 编解码器不承担任何责任。

视频

DotNetBrowser 完全支持 HTML5 <video> 元素,可以播放支持格式的视频。

如果库无法播放视频,或者不支持视频格式,DotNetBrowser 会建议下载视频文件。 有关详细信息,请参阅包含管理下载说明的下载部分。

HTML5 Video

音频

控制音频

使用 IAudioController,您可以了解加载的网页是否正在播放音频:

bool audioPlaying = browser.Audio.IsPlaying;
Dim audioPlaying As Boolean = browser.Audio.IsPlaying

如有需要,您可以在加载的网页上将音频静音或取消静音:

browser.Audio.Muted = true;
browser.Audio.Muted = false;
browser.Audio.Muted = True
browser.Audio.Muted = False

要检查音频是否静音,请使用以下代码:

bool audioMuted = browser.Audio.Muted;
Dim audioMuted As Boolean = browser.Audio.Muted

音频事件

要了解音频是否已在加载的网页上开始/停止播放,您可以订阅以下事件:

browser.Audio.AudioPlaybackStarted += (s, e) => { };
browser.Audio.AudioPlaybackStopped += (s, e) => { };
AddHandler browser.Audio.AudioPlaybackStarted, Sub(s, e)
End Sub
AddHandler browser.Audio.AudioPlaybackStopped, Sub(s, e)
End Sub

DRM

Widevine

NetflixAmazon Prime 等网络服务使用 Widevine 分发其 DRM 编码内容。 Widevine 是 Google 专有组件,默认情况下处于禁用状态。 要启用它并播放 DRM 编码的内容,请使用下面的代码示例:

engine = EngineFactory.Create(new EngineOptions.Builder
{
    RenderingMode = RenderingMode.HardwareAccelerated,
    ProprietaryFeatures = ProprietaryFeatures.Widevine
}.Build());
engine = EngineFactory.Create(New EngineOptions.Builder With 
{
    .RenderingMode = RenderingMode.HardwareAccelerated,
    .ProprietaryFeatures = ProprietaryFeatures.Widevine
}.Build())

Widevine 是谷歌的专有组件,受其自身使用条款的约束。 更多信息,请参阅 Widevine

摄像头和麦克风

DotNetBrowser 支持网络摄像头和麦克风。 您可以使用下面的代码示例获取所有可用媒体流设备的信息:

IMediaDevices mediaDevices = engine.MediaDevices;

// 获取所有可用的视频设备,例如 网络摄像头。
IEnumerable<MediaDevice> videoDevices = mediaDevices.VideoCaptureDevices;

// 获取所有可用的音频设备,例如 麦克风。
IEnumerable<MediaDevice> audioDevices = mediaDevices.AudioCaptureDevices;
Dim mediaDevices As IMediaDevices = engine.MediaDevices

' 获取所有可用的视频设备,例如网络摄像头。
Dim videoDevices As IEnumerable(Of MediaDevice) = mediaDevices.VideoCaptureDevices

' 获取所有可用的音频设备,例如麦克风。
Dim audioDevices As IEnumerable(Of MediaDevice) = mediaDevices.AudioCaptureDevices

您可以使用以下事件检测媒体捕捉何时开始或停止:

Browser.MediaStreamCaptureStarted += (sender, args) =>
{
    Console.WriteLine($"Started capturing {args.MediaStreamType}"); 
};

Browser.MediaStreamCaptureStopped += (sender, args) =>
{
    Console.WriteLine($"Stopped capturing {args.MediaStreamType}");  
};
AddHandler Browser.MediaStreamCaptureStarted, Sub(sender, args)
    Console.WriteLine($"Started capturing {args.MediaStreamType}")
End Sub

AddHandler Browser.MediaStreamCaptureStopped, Sub(sender, args)
    Console.WriteLine($"Stopped capturing {args.MediaStreamType}")
End Sub

选择媒体设备

您的环境中可以有多个网络摄像头和麦克风。 当网页想要使用其中一个设备时,可以使用 SelectMediaDeviceHandler 来指示网页使用哪个设备。

下面的代码示例演示了如何从可用设备列表中选择第一个设备:

mediaDevices.SelectMediaDeviceHandler = 
    new Handler<SelectMediaDeviceParameters, SelectMediaDeviceResponse>(p =>
    {
        return SelectMediaDeviceResponse.Select(p.Devices.FirstOrDefault());
    });
mediaDevices.SelectMediaDeviceHandler = 
    New Handler(Of SelectMediaDeviceParameters, SelectMediaDeviceResponse)(Function(p)
        Return SelectMediaDeviceResponse.Select(p.Devices.FirstOrDefault())
    End Function)

如果没有所请求类型的媒体输入设备,处理程序不会被调用

如果您想限制特定网页对麦克风或网络摄像头的访问,您可以使用 RequestPermissionHandler ,如下面的代码示例所示:

engine.Profiles.Default.Permissions.RequestPermissionHandler = 
    new Handler<RequestPermissionParameters, RequestPermissionResponse>(p => 
    {
        if (p.Type == PermissionType.AudioCapture || p.Type == PermissionType.VideoCapture)
        {
            return RequestPermissionResponse.Deny();
        }
        return RequestPermissionResponse.Grant();
    });
engine.Profiles.Default.Permissions.RequestPermissionHandler =
    New Handler(Of RequestPermissionParameters, RequestPermissionResponse)(Function(p)
        Dim type = p.Type
        If type = PermissionType.AudioCapture OrElse type = PermissionType.VideoCapture Then
            Return RequestPermissionResponse.Deny()
        End If
        Return RequestPermissionResponse.Grant()
    End Function)
Go Top