Обнаружить поддержку Firefox для совместного использования экрана

Firefox, начиная с версии 52, будет поддерживать совместное использование экрана через:

navigator.mediaDevices.getUserMedia({ video: { mediaSource: 'screen' }}) 
  .then(stream => { ... });

Посетите эту тестовую страницу, чтобы увидеть ее в действии.

Я хотел бы знать, есть ли способ определить, поддерживает ли браузер { mediaSource: 'screen' }?

Я хотел бы предоставить возможность делиться экраном только с теми пользователями, у которых есть возможность делиться. Поэтому я хотел бы иметь возможность обнаруживать это.


person philnash    schedule 07.09.2017    source источник
comment
демонстрация экрана реализована уже давно. FF52 просто устранил необходимость в записи в белом списке или в расширении, изменяющем белый список.   -  person Philipp Hancke    schedule 07.09.2017
comment
Да, хорошее замечание. Вы хотите сказать, что Firefox до 52 действительно будет утверждать, что поддерживает mediaSource и делает проверку со стороны jib бесполезной? (Если вы не находитесь в старом белом списке ...)   -  person philnash    schedule 07.09.2017
comment
да. Просто проверьте версию Firefox ›= 52 (или положитесь на расширение). К счастью, последнее СОЭ составляет 52, хотя есть сообщения о людях, все еще использующих FF45 ...   -  person Philipp Hancke    schedule 07.09.2017


Ответы (1)


Обновленный ответ: getDisplayMedia теперь правильный API для совместного использования экрана, поддерживаемый всеми основными браузерами уже пару лет (в Firefox с 66+). Итак, правильный API:

await navigator.mediaDevices.getUserMedia({video: true});

И правильный способ определения функции:

console.log(navigator.mediaDevices &&
            "getDisplayMedia" in navigator.mediaDevices);

Это false на мобильных устройствах, где отсутствует поддержка (Firefox для Android и Chrome для Android).

Это также false по небезопасным http (не https) соединениям, где navigator.mediaDevices сам по себе undefined, объект, который считается мощной функцией.

Ответ для действительно старого Firefox ‹66:

⚠️ Не полагайтесь на этот ответ в новых браузерах, поскольку это ограничение исчезнет!

способ определить, поддерживает ли браузер {mediaSource: 'screen'}?

Педантичный ответ таков: поддерживается ли ограничение mediaSource:

console.log(!!navigator.mediaDevices.getSupportedConstraints().mediaSource);

К сожалению, mediaSource нестандартен, и реализовано только в Firefox. На момент написания этой статьи Firefox является единственным браузером, который поддерживает совместное использование экрана без подключаемого модуля.

В Chrome есть другой нестандартный API, использующий chromeMediaSource, доступный в качестве подключаемого модуля, с использованием старого синтаксиса ограничений, но он (справедливо) не отображается в новом getSupportedConstraints.

Это все еще немного беспорядок. Долгосрочные браузеры могут в конечном итоге реализовать _ 14_.

person jib    schedule 07.09.2017
comment
Ну конечно. Я просматривал getSupportedConstraints и по какой-то причине зависал на browserWindow и полностью пропустил mediaSource. Я понимаю, что все это нестандартно, и, надеюсь, в будущем появится достойный стандарт (getDisplayMedia кажется хорошей идеей). Спасибо! - person philnash; 07.09.2017
comment
Chrome 70 теперь поддерживает getDisplayMedia() под флагом - person Octavian Naicu; 27.11.2018