媒体

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

编解码器

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())

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

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 是 Google 专有组件,受其自己的使用条款约束。 有关详细信息,请参阅 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