首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从主机上的铬和码头容器中的铬共享/dev/videoX设备上的WebRTC流

如何从主机上的铬和码头容器中的铬共享/dev/videoX设备上的WebRTC流
EN

Stack Overflow用户
提问于 2017-12-18 13:37:23
回答 1查看 3.8K关注 0票数 26

环境

  • 主机运行Ubuntu 14.04.5 LTS
  • Docker版本17.09.0-ce,构建afdb6d4
  • 铬62.0.3202.89
  • 2个网络摄像头:/dev/video0/dev/video1

摄像机

代码语言:javascript
运行
AI代码解释
复制
# v4l2-ctl --list-devices
Venus USB2.0 Camera (usb-0000:00:1a.0-1.2.2):
    /dev/video1

USB 2.0 Camera (usb-0000:00:1a.0-1.3):
    /dev/video0

我需要将Ubuntu 14.04 主机上的网络摄像头共享给Ubuntu 16.04 码头容器,并能够从每个铬实例上从每个摄像机获得视频流(WebRTC getUserMedia),它们分别在主机和容器上运行,或者在两个单独的码头容器上运行。

为了测试getUserMedia,我浏览

如何繁殖

Dockerfile

代码语言:javascript
运行
AI代码解释
复制
FROM ubuntu:16.04

# Install chromium
RUN apt-get update \
    && apt-get install sudo chromium-browser alsa-base alsa-utils alsa-oss -y \
    && rm -rf /var/lib/apt/lists/*

# Create a normal user to run chromium as
RUN useradd --create-home browser \
    && adduser browser video \
    && adduser browser audio \
    && usermod -aG sudo browser
USER browser
WORKDIR /home/browser

ENTRYPOINT ["/usr/bin/chromium-browser", "--use-fake-ui-for-media-stream", "--disable-infobars", "--allow-running-insecure-content", "--ignore-certificate-errors"]
CMD ["https://www.stackoverflow.com/"]

码头工人-组成

代码语言:javascript
运行
AI代码解释
复制
$ more docker-compose.yml 
version: '3'
services:
  chromium_video1:
    build:
      context: .
      dockerfile: Dockerfile
    image: ubuntu-cr:0.1
#    privileged: true # then you don't need the devices section

    # Pass the URL as an argument (CMD) to ENTRYPOINT in the Dockerfile
    #command: ["https://www.onlinemictest.com/webcam-test/"] # WORKS
    command: ["https://webrtc.github.io/samples/src/content/getusermedia/gum/"] # FAILS

    environment:
        #DISPLAY: $DISPLAY
        DISPLAY:
        XAUTHORITY: /.Xauthority

    devices:
        - /dev/video1
        - /dev/dri
#        - /dev/snd

    volumes:
        - /tmp/.X11-unix:/tmp/.X11-unix
        - ~/.Xauthority:/.Xauthority:ro
        - /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket

    cap_add:
        - SYS_ADMIN

  chromium_video0:
    build:
      context: .
      dockerfile: Dockerfile
    image: ubuntu-cr:0.1
#    privileged: true

    # Pass the URL as an argument (CMD) to ENTRYPOINT in the Dockerfile
    #command: ["https://www.onlinemictest.com/webcam-test/"]
    command: ["https://webrtc.github.io/samples/src/content/getusermedia/gum/"]

    environment:
        DISPLAY:
        XAUTHORITY: /.Xauthority

    devices:
        - /dev/video0
        - /dev/dri
#        - /dev/snd

    volumes:
        - /tmp/.X11-unix:/tmp/.X11-unix
        - ~/.Xauthority:/.Xauthority:ro
        - /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket

    cap_add:
        - SYS_ADMIN

附加尝试

代码语言:javascript
运行
AI代码解释
复制
command: ["https://appear.in/hello"]

代码语言:javascript
运行
AI代码解释
复制
command: ["https://test.webrtc.org/"]

导致同样的事情,一旦一个摄像头开始流,另一个就不能

在码头集装箱中启动铬

代码语言:javascript
运行
AI代码解释
复制
export DISPLAY=:0.0 
docker-compose up

结果

使用https://webrtc.github.io/samples/src/content/getusermedia/gum/ =>失败

如果关闭chromium_video1,则在浏览器刷新(?)之后,chromium_video0会对视频进行流。

从web控制台尝试了getUserMedia

代码语言:javascript
运行
AI代码解释
复制
 navigator.mediaDevices.getUserMedia({audio: true, video: true})

但是在关闭铬流/dev/video1之后,/dev/video0现在是可读的了。getUserMedia命令解析,摄像机从/dev/video0中传输视频。

他们没有访问相同的设备。我登记了chrome://media-internals

使用https://www.onlinemictest.com/webcam-test/工作!

当使用https://www.onlinemictest.com/webcam-test/时,它可以工作,我们可以看到两个摄像机的流。我相信这个特定的网站仍然在使用URL.createObjectURL

图片

代码语言:javascript
运行
AI代码解释
复制
docker images
REPOSITORY      TAG            IMAGE ID            CREATED             SIZE
ubuntu-cr       0.1            a61f5506b1f9        9 minutes ago       764MB
ubuntu          16.04          747cb2d60bbe        2 months ago        122MB

主机上打开铬浏览器到相同的URL

) :(我收到错误消息

NotReadableError

关于如何配置我的对接容器以允许将一个凸轮分配给主机而另一个专用于码头容器的指针呢?

有趣的线程

  • NotReadableError: Failed to allocate videosource指出,这可能是因为相机是由另一个应用程序使用。
  • 有趣的是,当我在主机上打开指向同一摄像头测试页面(getUserMedia)的2个Chromium实例(这次没有容器)时,它确实能够将相同的视频流发送到2个Chromium实例。这就是我试图从一个容器访问它冲突的时候。它可以播放一个或另一个,但不能在同一时间。所以可以在码头容器上配置一些东西。尽管如此,我们还是要理解为什么会发生这种事。

更新

码头日志

代码语言:javascript
运行
AI代码解释
复制
chromium_video1  | libGL error: failed to open drm device: No such file or directory
chromium_video1  | libGL error: failed to load driver: i965
chromium_video0  | libGL error: failed to open drm device: No such file or directory
chromium_video0  | libGL error: failed to load driver: i965

解决这个读取这个thread的问题

试图按下面的评论中的建议共享devices,但没有效果。

代码语言:javascript
运行
AI代码解释
复制
- /dev/video1:/dev/video1:rm 
- /dev/video1:/dev/video1:r  
- /dev/video1:/dev/video1:rw

问题

  • 当摄像机被访问并开始流时会发生什么?是否创建了一个锁文件以及在哪里?但是,请注意,我没有访问相同的相机。

在我分享的章节中

代码语言:javascript
运行
AI代码解释
复制
- /tmp/.X11-unix:/tmp/.X11-unix
- ~/.Xauthority:/.Xauthority:ro
- /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket

我不认为这些文件是问题所在,但仍在调查

EN

回答 1

Stack Overflow用户

发布于 2018-06-26 15:18:44

如果您只想要单独的Chrome会话,您可以简单地从以下内容开始:

代码语言:javascript
运行
AI代码解释
复制
chromium-browser --user-data-dir=/tmp/chrome1 

和另一个实例

代码语言:javascript
运行
AI代码解释
复制
chromium-browser --user-data-dir=/tmp/chrome2

Docker只是一种记录和重复设置非常特定环境的方法。它增加的额外安全层最少,特别是你传递的额外权限,特别是与Chrome真正经过良好测试的安全性相比。

如果需要更多的隔离,可以创建单独的用户:

代码语言:javascript
运行
AI代码解释
复制
 # run these lines individualy, just press Enter for everything, don't set passwords for them, they won't be able to log in. 
 sudo adduser chrome1
 sudo adduser chrome2 

 # if you want to give each access to only one of the cams you can try this
 sudo chown chrome1:chrome1 /dev/video0 
 sudo chown chrome2:chrome2 /dev/video1
 # keeping in mind unplugging and replugging the camera might reset the permissions unless you update the relevant /etc files

 # to allow anyone to use your X
 xhost +

 # run the two separate browsers
 sudo su - chrome1 -c chromium-browser & 
 sudo su - chrome2 -c chromium-browser &
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47876771

复制
相关文章
铬镍不锈钢的切削加工
  1Cr18Ni9Ti不锈钢的强度硬度很低(硬度≤187HB),而塑性很高,具有良好的耐酸性、耐腐蚀性。经固溶处理后的机械性能,屈服强度s0.2≥205MPa,抗拉强度sb≥520MPa,伸长率d5≥40%,收缩率y≥50%,用常规牌号的硬质合金刀具和常规方法加工很困难,原因是该材料的塑性及韧性较大,容易产生粘刀现象,断屑困难,同时产生振动,使刀具容易崩刃、磨损。
lrglu
2022/03/30
6730
铬镍不锈钢的切削加工
使用Webrtc和React Js在网络上共享跨平台的点对点文件
原文链接:https://medium.com/@dev2919/cross-platform-peer-to-peer-file-sharing-over-the-web-using-webrtc-and-react-js-525aa7cc342c
LiveVideoStack
2020/09/22
1.6K0
使用Webrtc和React Js在网络上共享跨平台的点对点文件
监控视频中的主码流和子码流是什么意思?
高清网络摄像机产品编码器都会产生两个编码格式,称为主码流和子码流,这就叫双码流技术。目的是用于解决监控录像的本地存储和网络传输的图像的质量问题。
EasyNVR
2020/05/19
7.3K0
如何在主机上调试容器、在容器中操作主机
老板有个奇怪的需求,通过一个 kubeconfig 文件,获取主机的各种状态信息,比如进程列表、进程状态等。
陈少文
2021/01/13
2.5K1
如何在主机上调试容器、在容器中操作主机
超高速激光熔覆技术的优势
镀铬是过去广泛使用的防腐耐磨涂层技术之一。制备过程是将工件浸泡在铬酸溶液中,用电化学方法沉积涂层。制备的硬铬涂层通常伴有微裂纹,涂层与基体的结合力差,在使用中常导致开裂和剥落。由于电镀耗电量巨大,其利润空间一再被压缩。生产过程中产生的废气和废液也污染了环境。目前,电镀行业已成为夕阳产业,受到欧盟、美国和中国工业部门的严格限制。超高速激光熔覆工艺不涉及化学过程,对环境友好。有很多种硬表面涂层可供选择,包括铁基、镍基和钴基合金涂层。该方法制备的镀层无缺陷,结合强度高,耐久性远高于电镀层。目前,超高速激光熔覆是替代镀硬铬的首选技术。
国盛激光
2022/12/28
4550
超高速激光熔覆技术的优势
video_replay如何捕获和回放WebRTC视频流
在数据包有丢失的环境下进行视频解码不是一件容易的事。Chrome 58中引入了一种新的视频抖动缓冲区,这导致最新版的Chrome在视频显示时一直有问题。由于该问题只在某些数据包丢失时才会出现,因此调试难度很大。为此,webrtc.org提供了一个名为video_replay的工具来复现和分析这些棘手问题。
LiveVideoStack
2021/09/02
1.8K0
video_replay如何捕获和回放WebRTC视频流
激光熔覆再制造与电镀修复的技术比较
激光熔覆再制造是使旧机械设备更新换代的过程。它是以旧机械设备的原体为主体,采用特殊的新技术、新工艺、新材料和新手段,在原有基础上进行新的制造。再制造产品在性能和寿命上都可以达到或超过新产品。
国盛激光
2023/02/08
3870
激光熔覆再制造与电镀修复的技术比较
Windows如何访问Mac上的共享文件
当我们拥有windows和mac两种设备时,难免会遇到需要将mac上的文件传输到windows的情况,最简单直接的方式自然是通过U盘拷贝。但如果刚好手上没有U盘,或者U盘的空间不足怎么办?也许此时你会想到通过网盘、qq、微信等软件进行文件的传输,但又苦于需要先上传再下载。
端碗吹水
2022/01/12
10.5K0
Windows如何访问Mac上的共享文件
如何在Ubuntu 14.04上的Docker容器中运行Nginx
通过容纳Nginx,我们减少了系统管理员的开销。我们将不再需要通过包管理器管理Nginx或从源代码构建它。Docker容器允许我们在发布新版本的Nginx时简单地替换整个容器。我们只需要维护Nginx配置文件和我们的内容。
朝朝
2018/10/19
2.9K0
Docker容器如何共享数据
image.png 容器与外部的数据共享是通过数据卷实现的 数据卷概念 是容器与外部在文件系统上的通道,可以和主机的文件系统建立联系,也可以和其他容器建立文件级的联系 容器把希望对外的数据写入自己的数据卷,其他容器就可以加载这个数据卷,操作其中的数据了 数据卷可以指定目录和文件,但实际操作中经常使用目录,所以数据卷可以大概理解为一个挂载目录,可以和挂载主机目录,也可以被其他容器挂载,这样就实现了容器和主机之间、容器和容器之间的数据共享问题 数据共享两种形式 (1)挂载一个主机目录作为数据卷 挂载一个本地已
dys
2018/04/02
1.7K0
Docker容器如何共享数据
快速识别PCB绿色产品标识
2003年2月13日,欧盟137《官方公报》公布了欧洲议会和欧盟部长理事会共同批准的《报废电子电气设备指令》(WEEE 2002/96/EC)和《关于限制在电气电子设备中使用某些有害物质指令》(ROHS 2002/95/EC) 两指令是欧盟在环保领域的又一新举措,前一指令除对报废电子电气设备的回收和处理作出特殊规定,还规定回收费用由生产者承担;后一指令要求在2006年7月1日起在欧盟市场上禁止出售含有铅等6种有害物质的电子电气设备. 这两项指令都反映了发达国家在贸易政策上,市场的对外开放是行前提的. 这些前提除了符合各种技术标准外。还需要符合劳工以及环保标准。两指令的生效期在2004年8月13日以后。其适用范闹包括家电等。
高拓电子
2022/08/17
9890
Redis中主、从库宕机如何恢复?
说明已经监控到slave宕机了,那么,如果我们将3380端口的redis实例启动后,会自动加入到主从复制吗?
码农编程进阶笔记
2021/09/09
1K0
Redis中主、从库宕机如何恢复?
论文研读-数据共享-大数据流分析中的共享执行技术
Shared Execution Techniques for Business Data Analytics over Big Data Streams
yzsDBA
2023/09/24
2080
论文研读-数据共享-大数据流分析中的共享执行技术
Redis中主、从库宕机如何恢复?
来源 | 程序员老鬼 正文 1、什么是哨兵 哨兵是对Redis的系统的运行情况的监控,它是一个独立进程,功能有二个: 监控主数据库和从数据库是否运行正常; 主数据出现故障后自动将从数据库转化为主数据库; 2、原理 单个哨兵的架构: 多个哨兵的架构: 多个哨兵,不仅同时监控主从数据库,而且哨兵之间互为监控。 多个哨兵,防止哨兵单点故障。 如果您正在学习Spring Boot,推荐一个连载多年还在继续更新的免费教程:http://blog.didispace.com/spring-boot-learn
程序猿DD
2023/04/04
6250
Redis中主、从库宕机如何恢复?
WebRTC的现状和未来:专访W3C WebRTC Chair Bernard Aboba(上)
Bernard在实时通信领域有着长久而卓越的职业生涯。除了W3C WebRTCCo-Chair 的角色之外,他还是WEBTRANS和AVTCORE工作组的Co-Chair以及ORTC、WebRTC-SVC、WebRTC-NV Use Cases、WebRTC-ICE、WebTransport和WebRTC-QUIC文档的编辑。不要忘记,WebRTC在IETF中也是部分标准化的,同时Bernard也是WEBTRANS和AVTCORE WGs的Co-Chair。在微软,他是微软团队媒体组织的首席架构师,该组织名为IC3,支持微软团队和基于团队基础设施的其他项目,如Azure通信服务(Gustavo在此发布了相关信息)。
LiveVideoStack
2021/01/13
8700
WebRTC的现状和未来:专访W3C WebRTC Chair Bernard Aboba(上)
Redis中主、从库宕机如何恢复?
说明已经监控到slave宕机了,那么,如果我们将3380端口的redis实例启动后,会自动加入到主从复制吗?
民工哥
2021/12/06
9080
Redis中主、从库宕机如何恢复?
3.如何RedHat7上实现OpenLDAP的主主同步
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.文档编写目的 ---- 前面Fayson文章讲《1.如何在RedHat7上安装OpenLDA并配置客户端》以及《2.如何在RedHat7中实现OpenLDAP集成SSH登录并使用sssd同步用户》,那么如何确保OpenLDAP服务的高可用?本篇文章主要介绍如何通过OpenLDAP的MorrorMode实现
Fayson
2018/04/18
1.6K0
3.如何RedHat7上实现OpenLDAP的主主同步
INFOCOM 2023 | 基于多核的移动设备上的节能 360 度视频流
与传统视频不同,360°视频为用户提供了沉浸式体验,即用户可以通过四处查看和与虚拟世界互动来导航虚拟世界。360°视频可以使用专用的头戴式显示器(如Oculus和HTC Vive)进行观看,或者通过将智能手机放入如Google Cardboard和Samsung Gear VR之类的头戴式设备中进行观看。下图展示了360°视频处理流程,其中现代移动设备中的硬件加速器(如硬件解码器、GPU和显示处理单元)被用于处理360°视频。具体来说,设备首先从视频服务器(如YouTube、Facebook-360等)接收编码的360°视频,或从本地加载视频。
用户1324186
2023/10/24
4490
INFOCOM 2023 | 基于多核的移动设备上的节能 360 度视频流
点击加载更多

相似问题

WebRTC屏幕共享铬(Retina MacBookPro)低frameRate

11

铬WebRTC如何确定qualityLimitationReason?

16

在铬和铬上做铬扩展

10

铬和铬的扩展

13

不含LTO的铬、WebRTC的制造

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档