Actualizaciones multimedia en Chrome 69

François Beaufort
François Beaufort

Decodificador de video de AV1

Seguimiento de Chromestatus | Error de Chromium

EME: Consulta de compatibilidad con esquemas de encriptación

Algunas plataformas o sistemas clave solo admiten el modo CENC, mientras que otras solo admiten Modo CBCS. Sin embargo, otros pueden admitir ambos. Estos dos esquemas de encriptación son incompatibles, por lo que los desarrolladores web deben ser capaces de tomar decisiones inteligentes sobre qué contenido publicar.

Para evitar tener que determinar en qué plataforma se encuentra para verificar si es "conocida" compatibilidad con el esquema de encriptación, se agrega una nueva clave encryptionScheme en MediaKeySystemMediaCapability diccionario para permitir que los sitios web especifiquen qué esquema de encriptación podría usarse en extensiones de medios encriptados (EME)

La nueva clave encryptionScheme puede ser uno de dos valores:

  • 'cenc' Encriptación de muestra completa y NAL de video en modo AES-CTR.
  • 'cbcs' Encriptación parcial de patrón NAL de video en modo AES-CBC.

Si no se especifica, indica que cualquier esquema de encriptación es aceptable. Nota que Clear Key siempre admite el esquema 'cenc'.

En el siguiente ejemplo, se muestra cómo consultar dos parámetros de configuración con diferentes esquemas de encriptación. En este caso, solo se elegirá una.

await navigator.requestMediaKeySystemAccess('org.w3.clearkey', [
    {
      label: 'configuration using the "cenc" encryption scheme',
      videoCapabilities: [{
        contentType: 'video/mp4; codecs="avc1.640028"',
        encryptionScheme: 'cenc'
      }],
      audioCapabilities: [{
        contentType: 'audio/mp4; codecs="mp4a.40.2"',
        encryptionScheme: 'cenc'
      }],
      initDataTypes: ['keyids']
    },
    {
      label: 'configuration using the "cbcs" encryption scheme',
      videoCapabilities: [{
        contentType: 'video/mp4; codecs="avc1.640028"',
        encryptionScheme: 'cbcs'
      }],
      audioCapabilities: [{
        contentType: 'audio/mp4; codecs="mp4a.40.2"',
        encryptionScheme: 'cbcs'
      }],
      initDataTypes: ['keyids']
    },
  ]);

En el siguiente ejemplo, solo una configuración con dos opciones de encriptación esquemas se consultan. En ese caso, Chrome descartará cualquier objeto de capacidad no admite, por lo que la configuración acumulada puede contener una encriptación o ambos.

await navigator.requestMediaKeySystemAccess('org.w3.clearkey', [{
    videoCapabilities: [
      { // A video capability using the "cenc" encryption scheme
        contentType: 'video/mp4; codecs="avc1.640028"',
        encryptionScheme: 'cenc'
      },
      { // A video capability using the "cbcs" encryption scheme
        contentType: 'video/mp4; codecs="avc1.640028"',
        encryptionScheme: 'cbcs'
      },
    ],
    audioCapabilities: [
      { // An audio capability using the "cenc" encryption scheme
        contentType: 'audio/mp4; codecs="mp4a.40.2"',
        encryptionScheme: 'cenc'
      },
      { // An audio capability using the "cbcs" encryption scheme
        contentType: 'audio/mp4; codecs="mp4a.40.2"',
        encryptionScheme: 'cbcs'
      },
    ],
    initDataTypes: ['keyids']
  }]);

Intención de implementación | Seguimiento de Chromestatus | Error de Chromium

EME: Verificación de las políticas de HDCP

En la actualidad, HDCP es un requisito de política común para transmitir contenido en alta resolución. de contenido protegido. Y a los desarrolladores web que quieren aplicar de manera forzosa una política HDCP debe esperar a que se complete el intercambio de licencias o comenzar a transmitir contenido con baja resolución. Esta es una situación lamentable que la política de HDCP Check API pretende resolver.

Esta API propuesta permite a los desarrolladores web consultar si una política HDCP determinada para que la reproducción pueda iniciarse con la resolución óptima la mejor experiencia del usuario. Consiste en un método simple para consultar el estado de una clave hipotética asociada con una política HDCP, sin la necesidad de crear una MediaKeySession o busca una licencia real. No es necesario que MediaKeys a cualquier elemento de audio o video.

La API de Policy Check de HDCP funciona con solo llamar mediaKeys.getStatusForPolicy() por un objeto que tiene una clave minHdcpVersion y uno válido. Si HDCP está disponible en la versión especificada, el valor devuelto se resuelve con un MediaKeyStatus de 'usable'. De lo contrario, la promesa se resuelve con otros valores de error de MediaKeyStatus, como 'output-restricted' o 'output-downscaled'. Si el sistema de claves no admitir la Verificación de políticas de HDCP en absoluto (p.ej., borrar el sistema de claves), la promesa se rechaza.

En pocas palabras, a continuación, te mostramos cómo funciona la API por el momento. Consulta el ejemplo oficial para probar todas las versiones de HDCP.

const config = [{
  videoCapabilities: [{
    contentType: 'video/webm; codecs="vp09.00.10.08"',
    robustness: 'SW_SECURE_DECODE' // Widevine L3
  }]
}];

navigator.requestMediaKeySystemAccess('com.widevine.alpha', config)
.then(mediaKeySystemAccess => mediaKeySystemAccess.createMediaKeys())
.then(mediaKeys => {

  // Get status for HDCP 2.2
  return mediaKeys.getStatusForPolicy({ minHdcpVersion: '2.2' })
  .then(status => {
    if (status !== 'usable')
      return Promise.reject(status);

    console.log('HDCP 2.2 can be enforced.');
    // TODO: Fetch high resolution protected content...
  });
})
.catch(error => {
  // TODO: Fallback to fetch license or stream low-resolution content...
});

Disponible para pruebas de origen

Para obtener comentarios de los desarrolladores web, anteriormente agregamos la Política de HDCP Verifica la función de la API en Chrome 69 para computadoras (ChromeOS, Linux, Mac y Windows).

La prueba finalizó correctamente en noviembre de 2018.

Intención de experimentar | Seguimiento de Chromestatus | Error de Chromium

Cumplimiento de EMS PTS/DTS

La marca de tiempo de la presentación ahora informa los rangos y los valores de duración almacenados en búfer (PTS) en lugar de intervalos de decodificación de marcas de tiempo (DTS) en los contenido multimedia Extensiones de fuente (ECM)

Cuando el ECM era nuevo, la implementación de Chrome se probó con WebM y MP3, algunas formatos de transmisión multimedia en los que no había distinción entre PTS y DTS. Y funcionaba bien hasta que se agregó ISO BMFF (también conocido como MP4). Este contenedor frecuentemente contiene secuencias de tiempo de presentación desordenadas frente a transmisiones de tiempo de decodificación (para como H.264), lo que causa que DTS y PTS difieran. Eso provocó Chrome informará (por lo general solo un poco) diferentes rangos de almacenamiento en búfer y duración de los esperados. Este nuevo comportamiento se lanzará de forma gradual en Chrome 69 y hacer que su implementación de ECM cumpla con la especificación de ECM.

PTS/DTS
PTS/DTS
.

Este cambio afecta a MediaSource.duration (y, en consecuencia, HTMLMediaElement.duration), SourceBuffer.buffered (y, en consecuencia, HTMLMediaElement.buffered) y SourceBuffer.remove(start, end).

Si no sabes qué método se usa para informar la duración y los rangos almacenados en búfer puedes ir a la página interna de chrome://media-internals y buscar "ChunkDemuxer: almacenamiento en búfer por PTS" o "ChunkDemuxer: almacenamiento en búfer por DTS" en la los registros del sistema operativo.

Intención de implementación | Error de Chromium

Manejo de intents de vista de contenido multimedia en Android Go

Android Go es una versión ligera de Android diseñada para el nivel básico smartphones. Por eso, no necesariamente se envía con cierto nivel de visualización Así, si un usuario intenta abrir un video descargado, por ejemplo, no tendrá ninguna aplicación para manejar ese intent.

Para solucionar este problema, Chrome 69 en Android Go ahora detecta intents de visualización de contenido multimedia, por lo que los usuarios pueden ver el audio, las imágenes y los videos que se descargaron. En otras palabras, lleva el lugar de las aplicaciones de visualización faltantes.

ALT_TEXT_HERE
Controlador de intents multimedia
.

Ten en cuenta que esta función de Chrome está habilitada en todos los dispositivos que ejecuten Android Android O y versiones posteriores con 1 GB de RAM o menos.

Error de Chromium

Eliminación de "Detenido" eventos para elementos de medios con ECM

Un problema "detenido" evento se genera en un elemento multimedia si la descarga de datos multimedia no pudo progresar durante unos 3 segundos. Cuando use extensiones de fuente de medios (ECM), la app web administra la descarga y el elemento multimedia no tiene conocimiento de su progreso. Esto provocó que Chrome mostrara el estado "detenido" eventos con veces el sitio web no ha agregado nuevos fragmentos de datos de medios con SourceBuffer.appendBuffer() en los últimos 3 segundos.

Como los sitios web deciden agregar grandes bloques de datos con una frecuencia baja, no es un indicador útil del estado del almacenamiento en búfer. Quitando el contenido "detenido" eventos para elementos multimedia que usan el ECM aclara la confusión y alinea a Chrome más con la especificación de ECM. Ten en cuenta que los elementos multimedia que no usan ECM siguen generando "atascado" eventos como lo hacen en la actualidad.

Intención de dar de baja y quitar | Seguimiento de Chromestatus | Error de Chromium