草庐IT

javascript - WebRTC 无法从 USB 输入设备获取视频源(readyState 结束)

coder 2023-07-05 原文

我正在尝试使用 WebRTC 在屏幕上显示视频输入作为实时源。我不想做任何点对点通信或类似的事情,只是显示视频提要。

我的代码适用于我的笔记本电脑集成网络摄像头,但是当我连接外部视频输入设备时(在本例中是使用 StarTech 转换器通过 S-Video 连接到 USB 输入的旧摄像机 - 型号 SVID2USB2NS)我一无所获。我在 Chrome 和 FireFox 中都试过了。

两个浏览器都找到了视频设备,并为我提供了我的集成网络摄像头或 USB 设备(在本例中列为“USB 2820”)的选择,因此在本例中它们都知道该设备。

在 Chrome 中,当我尝试连接时,getUserMedia 调用的“成功”回调被调用,如果我 .getVideoTracks() 我找到了 MediaStreamTrack,回调的时刻, MediaStreamTrack 返回 enabled = truereadyState = live。但是没有视频输入(只有一个黑色的视频面板,Chrome 浏览器选项卡中的红色小“录制”图标没有出现)。如果我稍后检查 MediaStreamTrack,我发现 readyState now = "ended"(尽管启用仍然是 true)。

在 FireFox 中,再次找到设备,但任何使用 getUserMedia 连接到它的尝试只会触发错误回调,并出现 HARDWARE_UNAVAILABLE 错误。

我的 getUserMedia 调用很简单:

navigator.getUserMedia({ audio: false, video: true }, _webRTCsuccessCallback, _webRTCerrorCallback);

我的成功回调是(包括一些测试代码以立即和一秒后检查 MediaStreamTrack):

function _webRTCsuccessCallback(stream) {
    window.stream = stream; // stream available to console
    if (window.URL) {
        _video.src = window.URL.createObjectURL(stream);
    } else {
        _video.src = stream;
    }
    var tracks = stream.getVideoTracks();
    if (tracks[0]) {
        console.log(tracks[0]);
        setTimeout(function () { console.log(tracks[0]); }, 1000);
    }
}

(其中 _video 是页面上的 html5 对象)

Firefox 版本 31.0

Chrome 版本 39.0.2171.71m

操作系统版本:Windows 7 旗舰版 (6.1.7601) SP1

S-Video 转 USB 转换器:StarTech SVID2USB2NS ( http://www.startech.com/AV/Converters/Video/USB-S-Video-Capture-Cable~SVID2USB2NS )

源相机:Panasonic NV-DS35B(数码摄像机)

有没有人知道是什么原因造成的,为什么 WebRTC 不能用这个设备玩球?

(更笼统地说,我知道设备正在向 PC 发送视频信号,因为在 IE 中我开发了一个 ActiveX 控件,它使用 DirectShow 获取视频源,并且它可以很好地收集源 - 不同的技术我很感激,但它确实给了我设备在那里并正在发送视频的证据!)

最佳答案

Media Capture Streams 的规范指出,如果 MST 已被“静音”或“禁用”,则在 MediaStreamTrack 的生命周期中,实时状态可能会被零信息内容替换。这将导致渲染黑框。

换句话说,如果 MST 既未静音又已启用,则媒体只能从源流出。

muted/unmuted 状态反射(reflect)源是否提供任何媒体。

启用/禁用状态决定轨道是否输出媒体。

确保没有其他应用程序正在使用您的源设备。在您的情况下是 StarTrack 转换器。当您尝试在浏览器中获取 UserMedia 时,关闭所有其他可能访问您的捕获设备的应用程序。

访问此 Working Draft有关 MST 生命周期和流程的更多信息。

另一个问题可能是您的设备不提供满足媒体轨道上存在的限制的媒体。您的设备能够传输 NTSC 和 PAL 视频信号。因此,请尝试调整 getUserMedia 的约束,例如对于像这样的 PAL 信号:

{ 
  audio: false,
  video: {
    mandatory: {
      maxWidth: 768,
      maxHeight: 576,
      maxAspectRatio: 1.333,
      maxFrameRate: 25
  }
}

希望有所帮助。

关于javascript - WebRTC 无法从 USB 输入设备获取视频源(readyState 结束),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27174335/

有关javascript - WebRTC 无法从 USB 输入设备获取视频源(readyState 结束)的更多相关文章

  1. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  2. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  3. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  4. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  5. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  6. ruby - 无法覆盖 irb 中的 to_s - 2

    我在pry中定义了一个函数:to_s,但我无法调用它。这个方法去哪里了,怎么调用?pry(main)>defto_spry(main)*'hello'pry(main)*endpry(main)>to_s=>"main"我的ruby版本是2.1.2看了一些答案和搜索后,我认为我得到了正确的答案:这个方法用在什么地方?在irb或pry中定义方法时,会转到Object.instance_methods[1]pry(main)>defto_s[1]pry(main)*'hello'[1]pry(main)*end=>:to_s[2]pry(main)>defhello[2]pry(main)

  7. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  8. ruby - 简单获取法拉第超时 - 2

    有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url

  9. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  10. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

随机推荐