我们正在探索WebRTC,但看到了关于目前可能和支持的内容的相互矛盾的信息。
使用WebRTC,是否可以重新创建类似join.me或WebEx的屏幕共享服务,其中:
- 您可以共享屏幕的一部分
- 你可以把控制权交给对方
- 无需下载
今天任何一款WebRTC浏览器都可以做到这一点吗?iOS上的Chrome怎么样?
chrome.tabCaptureneneneba API可用于chrome应用程序和扩展。
这使得可以将选项卡的可见区域捕获为流,该流可以在本地使用或通过RTCPeerConnection的addStream()共享。
有关更多信息,请参阅WebRTC选项卡内容捕获建议。
最初,使用带有chromeMediaSource约束的getUserMedia的"普通"网页支持屏幕共享,但这已被禁止。
2015年4月1日编辑:现已编辑,Chrome应用程序和扩展程序仅支持屏幕共享。
你们可能知道screencapture(而不是tabCapture)在Chrome Canary(26+)中可用,我们最近刚刚在上发布了一个演示;https://screensharing.azurewebsites.net
请注意,您需要在https://,下运行它
video: {
mandatory: {
chromeMediaSource: 'screen'
}
你也可以在这里找到一个例子;https://html5-demos.appspot.com/static/getusermedia/screenshare.html
我知道我的回答有点晚,但希望这能帮助那些偶然发现页面的人,如果不是OP.的话
目前,Firefox和Chrome都支持通过WebRTC与同行共享整个屏幕或部分屏幕(您可以选择的一些应用程序窗口),作为媒体流,就像您的相机/麦克风馈送一样,因此还没有让其他方控制您的桌面的选项。除此之外,还有一个问题,你的网站必须在https
模式下运行,在firefox和chrome中,用户都必须安装扩展。
您可以在这个Muaz Khan的屏幕共享演示中尝试一下,该页面也包含所需的扩展。
第页。S: 如果你不想安装扩展来运行演示,在firefox中(没有办法在chrome中转义扩展),你只需要修改两个标志,
- 转到
about:config
- 将CCD_ 3设置为CCD_
- 将CCD_ 5添加到CCD_
- 刷新演示页面并单击共享屏幕按钮
据我所知,目前任何浏览器都不可能实现这一点,尽管谷歌Chrome团队已经表示,他们最终打算支持这种场景(请参阅他们路线图上的"屏幕共享"要点);我怀疑这意味着其他浏览器最终也会紧随其后,可能IE和Safari会紧随其后。但所有这些都可能在2月份之后的某个时候发布,届时他们将最终确定当前的WebRTC标准并交付生产部分。(希望微软最后一刻的扳手不会把事情搞砸。)我可能错过了最近的一些东西,但我一直在非常仔细地关注这个项目,我认为屏幕共享甚至还没有进入Chrome Canary,更不用说开发/测试/产品了。Opera是唯一一款在WebRTC实现方面与Chrome保持同步的浏览器(FireFox似乎落后了大约六个月),我也没有从该团队那里看到任何关于屏幕共享的信息。
有人告诉我,现在有一种方法,那就是编写自己的网络摄像机驱动程序,这样您的本地屏幕就可以作为另一个视频源显示给WebRTC getUserMedia()API。我不知道有人这样做过——当然,这需要在有问题的机器上安装驱动程序。等到一切都说了算,使用VNC或类似的东西可能会更容易。
navigator.mediaDevices.getDisplayMedia(constraint).then((stream)=>{
// todo...
})
现在你可以这么做了,但Safari在音频方面与Chrome不同。
我可能已经完成了这项工作,并为Screen共享构建了一个Demo。在此期间,观察者可以访问您的鼠标和键盘。如果他移动他的鼠标,那么你的鼠标也会移动,如果他从键盘输入,它会输入到你的电脑中
查看此代码此代码用于屏幕共享。。。
现在,在这个日子里,你可以用这个共享屏幕,你不需要任何扩展。
const getLocalScreenCaptureStream = async () => {
try {
const constraints = { video: { cursor: 'always' }, audio: false };
const screenCaptureStream = await navigator.mediaDevices.getDisplayMedia(constraints);
return screenCaptureStream;
} catch (error) {
console.error('failed to get local screen', error);
}
};