Chrome已经引入了WebRTC屏幕共享扩展的使用。在此,每个域都必须具有扩展名,以便人们安装扩展程序以便使用webrtc共享屏幕。
这是我的用例:
在正在进行的webrtc视频通话期间,如果一个人需要进行屏幕共享但没有扩展名,则在安装扩展程序后需要刷新页面。这会中断呼叫,两个人都需要再次加入呼叫。
我想使用javascript控制用户体验,因此不需要刷新。但如果我们不进行刷新,则html页面无法识别最近安装的扩展程序。
我见过很多关于此的开源代码,但没有一个与我的用例相似。他们假定在会话期间安装扩展程序。
但是,我见过www.uberconference.com并且他们有类似的用例。我尝试在实时通话期间安装屏幕共享扩展,它不需要页面刷新,也没有中断通话。它在安装扩展程序后立即进行了屏幕共享。
我无法理解他们是如何做到的,因为优步不是开源的。许多人说安装扩展后必须刷新。在这种情况下的任何帮助将受到高度赞赏。
以下是使用内联安装安装chrome扩展程序的方法:
$scope.installExtension= function(){
!!navigator.webkitGetUserMedia
&& !!window.chrome
&& !!chrome.webstore
&& !!chrome.webstore.install &&
chrome.webstore.install('https://chrome.google.com/webstore/detail/<some-id>',
successInstallCallback,
failureInstallCallback
);
};
function successInstallCallback() {
//location.reload();
}
function failureInstallCallback(error) {
alert(error);
}
答案 0 :(得分:5)
这是我们最近在getScreenMedia
中更改的内容。查看pull request以了解我们是如何做到的:
我写了关于更改on my blog的内容,所以请查看更多详情,但重点是:
我们可以使用外部消息传递,而不是在
chrome.runtime.sendMessage(extensionId, options, callback)
上创建通信渠道,直接发送消息。我们可以使用chrome.runtime.onMessageExternal
和后台脚本"externally_connectable": { "matches": [ "https://example.com/*" ] }
,而不是向内容脚本提取并传递给后台脚本(反之亦然)的窗口发送消息。这适用于其他解决方案没有的地方,因为在扩展安装时会立即加载后台脚本,而在页面加载时会注入内容脚本。
因此,基本上,扩展程序使用不同的权限:
chrome.runtime.sendMessage
另外一个API:
chrome.runtime.onMessageExternal
与window.postMessage
而不是
window.addEventListener('message')
与chrome.runtime.connect
和A
相结合。 至少有两个不同的网站https://apps.mypurecloud.com和https://beta.talky.io与内联扩展程序安装进行屏幕共享,而根本没有重新加载。
答案 1 :(得分:0)
今天可能会有所帮助。如果您要在本地主机上运行Janus演示-只需在 https 上运行即可。
如果您将通过http运行它:getDisplayMedia
函数将不会被声明(例如,在Chrome中),然后Janus会要求您安装插件。
如果您已经安装了自己的Janus服务器:要使用https,则必须在Janus服务器配置中配置ssl证书:
janus.transport.http.jcfg
-如果您在服务器定义中使用https
janus.transport.websockets.jcfg
-如果您使用的是wss(并且不要忘记在其中启用安全的网络套接字)
答案 2 :(得分:-1)
您是否看过Chrome扩展内联安装... https://developer.chrome.com/webstore/inline_installation
我遇到了同样的问题,直到我放入html&lt; head&gt;标签......
<link rel="chrome-webstore-item" href="https://chrome.google.com/webstore/detail/[your-chrome-extension-id]" >
您的扩展程序清单还需要包含此标记所在的域。