Mídia

Este guia apresenta uma visão geral dos formatos de vídeo e áudio suportados, descreve como controlar o áudio, obter informações sobre as câmaras Web e microfones disponíveis e outras funcionalidades.

Codecs

O Google Chrome e o Chromium diferem em vários aspectos, incluindo os conjuntos de codecs de áudio e vídeo que suportam.

A tabela abaixo mostra quais os codecs suportados pela base de código dos navegadores correspondentes.

    Chromium Google Chrome
  AAC não sim
  AV1 sim sim
  FLAC sim sim
  H.264 não sim
  HEVC não sim
  MP3 sim sim
  Opus sim sim
  Theora sim sim
  Vorbis sim sim
  VP8 sim sim
  VP9 sim sim
  WAV sim sim


Como pode ver na tabela acima, o Google Chrome suporta determinados codecs e o Chromium não. O motivo é porque estes codecs são proprietários e não podem ser utilizados num projeto de código aberto ou comercial sem a obtenção de licenças dos titulares das patentes correspondentes.

Diferentes codecs têm diferentes detentores de patentes. Por exemplo, para utilizar o H.264, as empresas devem adquirir a licença da empresa MPEG-LA. Você pode ler mais sobre os termos da licença no site Web MPEG-LA.

Codecs proprietários

Os detentores de patentes não licenciam codecs para o software que representa apenas uma parte do produto final implementado para os usuários finais, por exemplo, bibliotecas como o DotNetBrowser.

Para suportar H.264, HEVC e AAC nos seus produtos, é necessário adquirir as licenças adequadas e ativar as seguintes funcionalidades proprietárias:

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

Depois de fornecer as informações da licença e ativar as funcionalidades proprietárias, você pode carregar páginas Web com os formatos AAC, H.264 e HEVC reproduzir arquivos de áudio e vídeo, tal como no Google Chrome. Por padrão, os codecs proprietários estão desativados.

Os codecs H.264, HEVC e AAC são os componentes proprietários. Ao ativar estes codecs, o usuário declara ter conhecimento de que o H.264, HEVC e o AAC são componentes proprietários e que você deve ter uma licença para os utilizar. Para mais informações, pode contatar os titulares das patentes: Via Licensing e MPEG LA. A TeamDev não será responsável pela sua utilização dos codecs H.264, HEVC e AAC.

Vídeo

O DotNetBrowser suporta totalmente o elemento HTML5 <video> e pode reproduzir vídeo nos formatos suportados.

Se a biblioteca não puder reproduzir um vídeo, ou se um formato de vídeo não for suportado, o DotNetBrowser sugere o download do arquivo de vídeo. Para mais informações, consulte a seção Downloads que contém as instruções sobre como gerir os downloads.

Vídeo HTML5

Áudio

Controlando o áudio

Utilizando o IAudioController é possível saber se o áudio está sendo reproduzido na página Web carregada:

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

Se necessário, você pode mutar ou desmutar o áudio na página Web carregada:

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

Para verificar se o áudio está silenciado, utilize o seguinte código:

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

Eventos de áudio

Para saber se o áudio começou/parou de ser reproduzido na página Web carregada, você pode se inscrever nos seguintes eventos:

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

Os serviços Web como Netflix ou Amazon Prime utilizam Widevine para distribuir os seus conteúdos codificados por DRM. O Widevine é um componente proprietário da Google e está desativado por padrão. Para o ativar e reproduzir o conteúdo codificado por DRM, utilize o exemplo de código abaixo:

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

O Widevine é um componente de propriedade da Google, regido pelos seus próprios termos de utilização. Para mais informações, consulte Widevine.

Câmara e microfone

O DotNetBrowser suporta uma câmara Web e um microfone. Você pode obter informações sobre todos os dispositivos de stream multimídia disponíveis utilizando o exemplo de código abaixo:

IMediaDevices mediaDevices = engine.MediaDevices;

// Obter todos os dispositivos de vídeo disponíveis, por exemplo, câmara web.
IEnumerable<MediaDevice> videoDevices = mediaDevices.VideoCaptureDevices;

// Obter todos os dispositivos de áudio disponíveis, por exemplo, o microfone.
IEnumerable<MediaDevice> audioDevices = mediaDevices.AudioCaptureDevices;
Dim mediaDevices As IMediaDevices = engine.MediaDevices

' Obter todos os dispositivos de vídeo disponíveis, por exemplo, câmara web.
Dim videoDevices As IEnumerable(Of MediaDevice) = mediaDevices.VideoCaptureDevices

' Obter todos os dispositivos de áudio disponíveis, por exemplo, o microfone.
Dim audioDevices As IEnumerable(Of MediaDevice) = mediaDevices.AudioCaptureDevices

É possível detectar quando a captura de mídia começa ou para utilizando estes eventos:

Browser.MediaStreamCaptureStarted += (sender, args) =>
{
    Console.WriteLine($"Iniciou a captura {args.MediaStreamType}"); 
};

Browser.MediaStreamCaptureStopped += (sender, args) =>
{
    Console.WriteLine($"Parou de capturar {args.MediaStreamType}");  
};
AddHandler Browser.MediaStreamCaptureStarted, Sub(sender, args)
    Console.WriteLine($"Iniciou a captura {args.MediaStreamType}")
End Sub

AddHandler Browser.MediaStreamCaptureStopped, Sub(sender, args)
    Console.WriteLine($"Parou de capturar {args.MediaStreamType}")
End Sub

Selecionando um dispositivo multimídia

Você pode ter várias webcams e microfones no seu ambiente. Quando uma página Web pretende utilizar um deles, você pode utilizar SelectMediaDeviceHandler para indicar à página Web qual o dispositivo utilizar.

O exemplo de código abaixo demonstra como selecionar o primeiro dispositivo da lista de dispositivos disponíveis:

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)

O manipulador não será invocado se não existirem dispositivos de entrada multimídia do tipo solicitado.

Se pretender restringir o acesso ao microfone ou à Webcam para uma determinada página Web, você pode utilizar RequestPermissionHandler, tal como mostrado no exemplo de código abaixo:

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