Compruebe si la captura de pantalla de soporte de navegador / plataforma a través de `getDisplayMedia`

8

Podemos solicitar una transmisión multimedia a una pantalla o ventana a través de navigator.mediaDevices.getDisplayMedia(). Sin embargo, esto incita inmediatamente al usuario a decidir qué tipo de captura usar. Necesito verificar si el navegador / plataforma incluso admite la captura de pantalla.

Por supuesto, es posible verificarlo 'getDisplayMedia' in navigator.mediaDevices, pero esto solo nos dice si la API es compatible con el navegador. En particular, en FF y Chrome en Android, la API está definida y puedo llamar getDisplayMedia(), pero siempre devuelve un NotAllowedErrorerror de inmediato (lo cual es de esperar: según caniuse , los navegadores móviles aún no son compatibles getDisplayMedia).

A continuación, intenté verificar navigator.mediaDevices.getSupportedConstraints(). Sin embargo, mi FF móvil devuelve exactamente el mismo objeto que mi FF de escritorio. En particular, navigator.mediaDevices.getSupportedConstraints().mediaSourcees trueen ambos casos. Finalmente, los datos devueltos por navigator.mediaDevices.enumerateDevices()tampoco me ayudan. Solo obtengo un dispositivo y una ID de grupo que no puedo interpretar de ninguna manera (¿verdad?).

¿Es posible detectar si la captura de pantalla a través de o no getDisplayMediaes compatible de antemano?

( Nota : estas preguntas y respuestas parecen bastante similares, pero getUserMediaya son bastante antiguas)

Lukas Kalbertodt
fuente
¿Estás usando HTTPS?
str
@str Sí, lo soy. También tenga en cuenta que esta pregunta no se trata de "No puedo usar getDisplayMediaen dispositivos móviles". Eso está bien para mí. Solo quiero verificar si es compatible o no .
Lukas Kalbertodt
¿GetDisplayMedia no devuelve una promesa?
aksappy
@aksappy Sí. ¿Por qué? No veo cómo eso me ayudaría. O bien se resuelve de inmediato a un error (en dispositivos móviles) o el navegador le solicita al usuario (escritorio, si es compatible).
Lukas Kalbertodt el
Bueno, eso fue más un comienzo de conversación :-) ¿Has mirado en MediaRecorder? Resuelve su caso de uso con un método isTypeSupported.
aksappy

Respuestas:

6

Desafortunadamente, no hay una forma directa de detectar características si getDisplayMedia funcionará en esos navegadores.

Todo lo que puede hacer hoy es rastrear el navegador de la cadena UA para detectar que no está en el móvil, donde falta soporte.

He presentado un problema en la especificación en función de su pregunta, para ver si getDisplayMedia es mejor dejarlo undefinedsin soporte.


1. caniuse afirma Opera Mobile tiene apoyo, pero esto no parece así que cuando me probarlo .

foque
fuente
1
Vota a favor este informe de errores de cromo para solucionar estos errores
Chromium.org/p/chromium/issues/detail?id=1038244#c2