Verifique se o navegador / plataforma suporta captura de tela via `getDisplayMedia`

8

Podemos solicitar um fluxo de mídia para uma tela ou janelas via navigator.mediaDevices.getDisplayMedia(). No entanto, isso imediatamente solicita que o usuário decida que tipo de captura usar. Preciso verificar se o navegador / plataforma suporta até a captura de tela.

Obviamente, é possível procurar 'getDisplayMedia' in navigator.mediaDevices, mas isso apenas indica se a API é suportada pelo navegador. Em particular, no FF e no Chrome no Android, a API é definida e eu posso chamar getDisplayMedia(), mas sempre retorna imediatamente um NotAllowedErrorerro (o que é esperado: de acordo com o caniuse , os navegadores móveis ainda não são compatíveis getDisplayMedia).

Em seguida, tentei verificar navigator.mediaDevices.getSupportedConstraints(). No entanto, meu FF móvel retorna exatamente o mesmo objeto que meu FF de desktop. Em particular, navigator.mediaDevices.getSupportedConstraints().mediaSourceé trueem ambos os casos. Finalmente, os dados retornados por navigator.mediaDevices.enumerateDevices()também não me ajudam. Eu só recebo um ID de dispositivo e grupo que não consigo interpretar de forma alguma (certo?).

É possível detectar se a captura de tela via getDisplayMediaé ou não suportada anteriormente?

( Observação : essas perguntas e respostas parecem bastante semelhantes, mas são sobre getUserMediae já são bastante antigas)

Lukas Kalbertodt
fonte
Você está usando HTTPS?
str
@str Sim, eu sou. Observe também que esta pergunta não é sobre "Não consigo usar getDisplayMediano celular". Isso é bom para mim. Eu só quero verificar se é ou não suportado.
Lukas Kalbertodt 13/11/19
O getDisplayMedia não retorna uma promessa?
aksappy
@aksappy Sim. Por quê? Não vejo como isso me ajudaria. Ele resolve imediatamente um erro (no celular) ou o usuário é solicitado pelo navegador (desktop, se suportado).
Lukas Kalbertodt 13/11/19
Bem, isso foi mais um começo de conversa :-) Você já viu o MediaRecorder? Ele resolve seu caso de uso com um método isTypeSupported.
aksappy

Respostas:

6

Infelizmente, não há maneira direta de detectar recursos se o getDisplayMedia funcionará nesses navegadores.

Tudo o que você pode fazer hoje é farejar o navegador da string UA para detectar que você não está no celular, onde falta suporte. lack

Arquivei um problema com as especificações com base na sua pergunta, para ver se getDisplayMedia fica melhor undefinedquando não é suportado.


1. caniuse afirma que o Opera Mobile tem suporte, mas isso não acontece quando o testo .

jib
fonte
1
Atualize este relatório de bug do cromo para obter esse bugs.chromium.org/p/chromium/issues/detail?id=1038244#c2
jpodwys 08/01