Запишите вкладку Firefox в виде видео, например screencastify в Chrome.

Я хотел бы записать вкладку браузера Firefox через расширение браузера, например Расширение Screencastify работает в Chrome. О сеансе записи расширения Chrome API chrome.tabCapture используется для получения потока активного в данный момент и записывать поток RecordRTC.js Web-RTC Используется эксперимент. Аналогично, есть ли какой-либо API в Mozilla Firefox для получения потока вкладки в браузере Firefox.

P.S: я спрашиваю о записи вкладки firefox без записи экрана или окна или через камеру.


person Muthu    schedule 11.02.2016    source источник


Ответы (2)


Существует несколько привилегированных API, которые позволяют захватывать части окон или xul в контекст холста. Затем холст можно захватить в медиапоток.

person the8472    schedule 11.02.2016
comment
Это можно сделать, если записанный элемент является элементом холста. Как бы я поступил для всей html-части в документе. Поправьте меня, если я ошибаюсь. Было бы лучше, если бы был пример - person Muthu; 12.02.2016
comment
Мой ответ состоит из двух предложений, похоже, вы проигнорировали первое. - person the8472; 12.02.2016
comment
Я попробовал таким образом, и я получаю canvasCaptureMediaStream, и при попытке записи он записывает как одно изображение до тех пор, пока я не остановлю запись. Движения мыши и операции внутри документа не записываются - person Muthu; 12.02.2016
comment
вам, очевидно, придется рисовать снова каждый раз, когда вы хотите обновить. и вы сказали, что хотите захватить вкладку, не экран. мышь концептуально не является частью вкладки. - person the8472; 12.02.2016
comment
Таким образом, каждые несколько миллисекунд я должен захватывать новый поток и передавать его в mediaRecorder для записи холста. Я прав? - person Muthu; 12.02.2016
comment
один поток, рисовать новые кадры на холсте - person the8472; 12.02.2016
comment
Этот ответ актуален только для записи элемента холста, а не произвольного содержимого окна/вкладки браузера. - person Kalle; 20.04.2018

Вы можете записать вкладку в Firefox следующим образом:

var constraints = { video: { mediaSource: "browser" } };

navigator.mediaDevices.getUserMedia(constraints)
  .then(stream => video.srcObject = stream)
  .catch(log);

var offset = () => video.srcObject.getVideoTracks()[0].applyConstraints({
    mediaSource: "browser",
    scrollWithPage: false,
    viewportOffsetX: x.value,
    viewportOffsetY: y.value
  })
  .catch(log);

var log = msg => div.innerHTML += "<br>" + msg;
<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
<span title="This is an experimental API that should not be used in production code."><i class="icon-beaker"> </i></span> <strong>This is an experimental technology</strong><br>Because this technology's specification has not stabilized, check the compatibility table for the proper browsers versions. Also note that the syntax and behavior of an experimental technology is subject to change in future versions of browsers as the spec changes.</p>
Capture offset:<br>
<input id="x" min="0" max="500" value="0" oninput="offset()" type="range">
<input id="y" min="0" max="500" value="0" oninput="offset()" type="range"><br>
<video id="video" height="120" width="320" autoplay></video><br>
<div id="div"></div><br>

Обратите внимание, что для того, чтобы этот фрагмент работал здесь, в браузере, вам сначала нужно https://stackoverflow.com/questions/35338487/record-the-firefox-tab-as-a-video-like-screencastify-on-chrome/.

А затем, по соображениям безопасности, вы должны добавить ,stacksnippets.net к списку сайтов в media.getusermedia.screensharing.allowed_domains в разделе about:config, чтобы это работало.

Наконец, вы также должны установить media.navigator.permission.disabled на true в about:config, так как Firefox не реализует средство выбора вкладок.

Ничего из этого не было бы необходимо в расширении.

В расширении вы должны использовать ограничение browserWindow для передачи идентификатора внешнего окна вкладки, которую вы хотите захватить.

Предупреждение. После этого вы можете удалить ,stacksnippets.net и media.navigator.permission.disabled из-за неотъемлемых угроз безопасности. Сообщения SO потенциально могут украсть информацию о вашем банковском счете таким образом, создавая фреймы общих банковских URL-адресов, на которые вы можете войти, чтобы только вы (а теперь и они!) Не шутка!

person jib    schedule 16.04.2016
comment
mediaSource: браузер. Кажется, не работает в FF 59. Я не смог найти авторитетный источник того, что в настоящее время поддерживается в Firefox, кроме этой статьи: twilio.com/blog/2017/10/screen-capture-in-firefox.html утверждает, что FF поддерживает только экран , окно или приложение. Протестировано, и все они работали, тогда как браузер не работал. - person Kalle; 19.04.2018
comment
Вы можете включить media.getusermedia.browser.enabled в about:config, после чего FF покажет экран разрешений приложения с пустым списком, но больше ничего делать не будет. Вот две очень интересные и актуальные ошибки: =1396510 и bugzilla.mozilla.org/show_bug.cgi?id=1321221 . По сути, браузер был создан для снятого с производства Firefox Hello и никогда не предназначался для публичного использования. Однако есть некоторая надежда, поскольку этого требует спецификация медиарекордера. - person Kalle; 20.04.2018
comment
Нереально, это работает даже в последнем FF! Но только если вы включите media.getusermedia.browser.enabled и media.navigator.permission.disabled (точно так же, как сказал @jib). Он даже не укажет в адресной строке, что он записывает, так что будьте осторожны. - person Kalle; 20.04.2018