- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在为桌面共享编写一个简单的 WebRTC Google Chrome 扩展程序。我尝试使用 getusermedia
,但每次调用错误回调函数时返回的错误是:
NavigatorUserMediaError {constraintName: "",
message: "",
name: "InvalidStateError"}
我的代码是这样的:
var iconPath = "images/";
var iconCapture = "player_play48.png";
var iconPause = "player_stop48.png";
window.onload = init; //all'avvio
function init() {
localStorage["capturing"] = "off";
}
chrome.browserAction.onClicked.addListener(function(tab) {
var currentMode = localStorage["capturing"];
var newMode = currentMode === "on" ? "off" : "on";
// start capture
if (newMode === "on"){
console.log('running');
// NB questi messaggi saranno visualizzati sulla pagina
// di background
captureDesktop();
} // stop capture
else {
console.log('stopped');
// NB questi messaggi saranno visualizzati sulla pagina
// di background
}
localStorage["capturing"] = newMode;
// if capturing is now on, display pause icon -- and vice versa
var iconFileName = newMode === "on" ? iconPause : iconCapture;
chrome.browserAction.setIcon({path: iconPath + iconFileName});
var title = newMode === "on" ?
"Click to stop capture"
: "Click to start capture";
chrome.browserAction.setTitle({"title": title});
}); //fine pezzo relativo al click
function captureDesktop(){
chrome.desktopCapture.chooseDesktopMedia(["screen", "window"],
onAccessApproved);
console.log('siamo nel captureDesktop');
}
function onAccessApproved(desktop_id) {
if (!desktop_id) { //se è nulla, l'utente ha rifiutato la richiesta
alert('Desktop Capture access rejected.'); // verrà mostrato il
// seguente messaggio e si
// esce
return;
}
console.log('siamo in onAccessApproved');
navigator.webkitGetUserMedia({
audio: true,
video: true
}, gotStream, getUserMediaError);
function gotStream(stream) {
if (!stream) {
alert('Unable to capture Desktop. Note that
Chrome internal pages cannot be captured.');
return;
}
console.log("Received local stream");
//setupConnection(stream); // chiama una funzione più giù
// passandole lo stream catturato
}
function getUserMediaError(e) {
console.log(e);
alert('getUserMediaError: ' + JSON.stringify(e, null, '---'));
}
}
而文件 Manifest.json 是这样的:
{
"manifest_version": 2,
"name": "WebRTC Desktop Sharing",
"version": "1.0",
"description": "Chrome Extension for Desktop Sharing with WebRTC API",
"browser_action": {
"default_icon": "images/player_play16.png",
"default_title" : "Play!"
},
"background": {
"scripts": ["event.js"],
"persistent": false
},
"icons" : {
"16" : "images/player_play16.png",
"22" : "images/player_play22.png",
"29" : "images/player_play29.png",
"32" : "images/player_play32.png",
"48" : "images/player_play48.png",
"128": "images/player_play128.png"
},
"permissions": ["desktopCapture", "activeTab", "contextMenus"]
}
非常感谢愿意帮助我的人!
最佳答案
这是三大陷阱。
一方面,您使用了错误的约束条件。您不是要屏幕,而是要常规的旧音频和视频。将您的约束更改为以下内容:
navigator.webkitGetUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: "desktop",
maxWidth: 1920,
maxHeight: 1080
},
optional: [{
googTemporalLayeredScreencast: true
}]
}
}, gotStream, getUserMediaError);
然后确保您的站点正在使用 SSL/HTTPS,并且如果您使用的是旧版本的 Chrome,并且您已经使用 --enable-usermedia-screen-capture
标志启动了 Chrome。如果您使用的是新版 Chrome,此 flag has been removed赞成将所有屏幕共享限制为扩展。当它有疑问时,看看是否Google's own example code或 WebRTC-Experiment为你工作。 Google 的示例对我不起作用,但 WebRTC-Experiment 的示例适用。祝你好运!如果我发现其他任何东西或自己让它工作,我会发回。
关于javascript - 桌面共享 Chrome 扩展程序抛出 NavigatorUserMediaError InvalidStateError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23982463/
我是 magento 的新手,目前我在 magento 安装期间遇到“必须加载 PHP 扩展 curl ”错误。你能帮帮我吗? 最佳答案 如果您的服务器上没有安装 curl,您可以键入以下命令之一来安
我在 macOS Mojave/macOS Big Sur/macOS Monterey/macOS Ventura 上使用最新的 php 版本 7.2 并收到类似错误 $composer requ
这个问题已经有答案了: Why generic type is not applicable for argument extends super class for both? (5 个回答) 已关
我正在使用 NightWatch.js 并进行一些 UI 测试,我想用一些额外的 desiredCapabilities 启动默认浏览器实例(即启用扩展并应用一些特定值)。 p> 注意:我可以执行这些
有人知道为什么我在 java 8 中使用此代码时没有服务器扩展名称吗: try { URL url = new URL(urlString); URLC
扩展提供给我的类(class)。为现有的类提供新功能。或扩展现有的mixin s 或虚拟类,任何东西都可以工作。 也许是这样的: class FlatButton {} // maybe no
我有一个关于使用 c 代码和 mod_wsgi 扩展 python 的问题。 我在 apache 服务器中有一个 django 应用程序,它查询 postgresql 数据库以生成报告。在某些报告中,
testcafe支持在Chrome浏览器中加载crx扩展吗? 如果是这样,请告诉我需要尝试什么方法。 我尝试了下面的代码,但没有成功 await t.eval(new Function(fs.read
这个问题已经有答案了: What is a raw type and why shouldn't we use it? (16 个回答) 已关闭 3 年前。 有什么区别: // 1 class A c
我正在编写一个 chrome 扩展来记录单击开始按钮后触发的请求。 这是我的文件:1. list .json { "manifest_version": 2, "name": "recorde
扩展是将较短的文本,例如一组提示或主题列表,输入到大型语言模型中,让模型生成更长的文本。我们可以利用这个特性让大语言模型生成基于某个主题的电子邮件或小论文。通过这种方式使用大语言模型,可以为工作与生活
我每天都在使用 vim 和 perforce 现在我的问题是,如果我想查看 perforce 文件修订版,则从命令模式下的 vim :!p4 打印文件#1 vim 试图让我获得缓冲区 #1。有没有办法
大家好,我有一个关于 NUnit 扩展(2.5.10)的问题。 我想做的是向 数据库。为此,我使用 Event 创建了 NUnit 扩展 听众。 我遇到的问题是公共(public)无效 TestFin
我有弹出窗口,而不是模态窗口。 如何通过单击页面的其他部分(不在窗口中)来关闭此窗口? 最佳答案 像这样的东西: function closeWin(e, t) { var el = win.
我通常非常谨慎地使用扩展方法。当我确实觉得有必要编写一个扩展方法时,有时我想重载该方法。我的问题是,您对调用其他扩展方法的扩展方法有何看法?不好的做法?感觉不对,但我无法真正定义原因。 例如,第二个
扩展 Ant Ant带有一组预定义的任务,但是你可以创建自己的任务,如下面的例子所示。 定制Ant 任务应扩展 org.apache.tools.ant.Task 类,同时也应该拓展 execut
我想要一个重定向所有请求的扩展: http://website.com/foo.js 到: http://localhost/myfoo.js 我无法使用主机文件将主机从 website.com 编辑
对于为什么 QChartView 放在 QTabWidget 中时会扩展,我有点迷惑。 这是 QChartView 未展开(因为它被隐藏)时应用程序的图片。 应用程序的黑色部分是 QOpenGLWid
如果在连接条件中使用 OR 运算符,如何优化以下查询以避免 SQL 调优方面的 OR 扩展? SELECT t1.A, t2.B, t1.C, t1.D, t2.E FROM t1 LEFT J
一旦加载插件的问题得到解决(在 .NET 中通过 MEF 的情况下),下一步要解决的是与它们的通信。简单的方法是实现一个接口(interface),使用插件实现,但有时插件只需要扩展应用程序的工作方式
我是一名优秀的程序员,十分优秀!