【问题标题】:Record the Firefox tab as a video like screencastify on chrome将 Firefox 选项卡录制为视频,例如 chrome 上的 screencastify
【发布时间】:2016-02-11 11:46:01
【问题描述】:

我想通过浏览器扩展程序记录一个 Firefox 浏览器选项卡,例如 chrome 中的 Screencastify 扩展程序。关于chrome扩展的Recording Session,chrome.tabCaptureAPI用于获取当前活动标签的流,并使用Web-RTC Experiment的RecordRTC.js记录流。同样明智的是,Mozilla Firefox 中是否有任何 API 可以在 Firefox 浏览器中获取选项卡的流。

P.S : 我问的是记录 Firefox 的选项卡,而不是记录屏幕或窗口或通过 cam。

【问题讨论】:

    标签: javascript firefox firefox-addon record mediarecorder-api


    【解决方案1】:

    several privileged apis 可让您将部分窗口或 xul 元素捕获到画布上下文中。然后可以将画布captured 转换为媒体流。

    【讨论】:

    • 如果记录的元素是画布元素,可以这样做,我将如何处理文档中的整个 html 部分。如果我错了,请纠正我。如果有例子就更好了
    • 我的答案由两句话组成,您似乎忽略了第一句话。
    • 我以这种方式进行了尝试,我得到了一个 canvasCaptureMediaStream 并且在尝试录制时,它会在我停止录制之前记录为单个图像。文档内的鼠标移动和操作没有记录
    • 你显然每次要更新时都必须重新绘制。你说你想捕捉标签,不是屏幕。鼠标在概念上不是选项卡的一部分。
    • 所以每隔几毫秒我必须捕获一个新流并将其传递给 mediaRecorder 以便记录画布。我说的对吗?
    【解决方案2】:

    您可以像这样在 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>

    请注意,要让这个 sn-p 在浏览器中工作,您首先必须view this page in https

    然后,出于安全原因,您必须将 ,stacksnippets.net 附加到 about:configmedia.getusermedia.screensharing.allowed_domains 中的站点列表中,以使其正常工作。

    最后,您还必须在 about:config 中将 media.navigator.permission.disabled 设置为 true,因为 Firefox 没有实现选项卡选择器。

    在扩展中这些都不是必需的。

    在扩展中,您将使用browserWindow 约束来传递您希望捕获的选项卡的外部窗口 ID。

    警告:由于固有的安全风险,您可能需要在之后删除 ,stacksnippets.netmedia.navigator.permission.disabled。 SO 帖子可能会以这种方式窃取您的银行帐户信息,通过 iframe 构建您可能已登录的常见银行网址,只有您(现在是他们!)才能看到,有效地终止跨域限制。不开玩笑!

    【讨论】:

    • "mediaSource: browser" 在 FF 59 中似乎不起作用。我找不到 Firefox 当前支持的权威来源,但至少这篇文章:twilio.com/blog/2017/10/screen-capture-in-firefox.html 声称仅 FF支持“屏幕”、“窗口”或“应用程序”。经过测试,它们都可以正常工作,而“浏览器”却失败了。
    • 您可以在 about:config 中启用“media.getusermedia.browser.enabled”,之后 FF 将显示一个“应用程序”权限屏幕,其中包含一个空列表,但不会执行任何其他操作。两个非常有趣且相关的错误是:bugzilla.mozilla.org/show_bug.cgi?id=1396510bugzilla.mozilla.org/show_bug.cgi?id=1321221。基本上,“浏览器”是为现已停产的“Firefox Hello”完成的,并且从未用于公众消费。虽然媒体记录器规范需要它,但仍有一些希望。
    • 虚幻,即使在最新的FF中也能正常工作!但前提是您启用 media.getusermedia.browser.enabled media.navigator.permission.disabled (就像@jib 说的那样)。它甚至不会在地址栏中显示它正在录制,所以要小心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    相关资源
    最近更新 更多