【问题标题】:How to access builtin webcam from a docker container using ffmpeg?如何使用 ffmpeg 从 docker 容器访问内置网络摄像头?
【发布时间】:2020-06-24 13:44:00
【问题描述】:

我已经编写了代码,该代码通过我的 MAC 的内置网络摄像头使用 ffmpeg 捕获视频。
在本地机器上,代码运行良好。但是,我为我的代码构建了一个 docker 容器,并尝试运行它,但出现以下错误:

error: Command failed: ffmpeg -f avfoundation -framerate 30 -i "0" -target pal-vcd -vf scale=640x480 -flags +global_header -f segment -segment_time 10 -segment_list ../out.csv -segment_format_options movflags=+faststart -reset_timestamps 1 -strftime 1 %Y%m%d-%H%M%S.mp4
ffmpeg version git-2016-05-25-9591ca7 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
  configuration: --extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-openssl
  libavutil      55. 24.100 / 55. 24.100
  libavcodec     57. 43.100 / 57. 43.100
  libavformat    57. 37.100 / 57. 37.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 46.100 /  6. 46.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
Unknown input format: 'avfoundation'
  1. 据我从该日志中了解到,docker 容器无权访问本地设备。
    据 这个讨论Docker - a way to give access to a host USB or serial device? ,我需要使用--device 标志来传递我的 设备的位置。
    但是,根据this answer, 这不可能吗?
  2. 除了我提到的 上面,我一开始就无法获得网络摄像头的路径。 what is a correct path for macbook webcam

我的问题是:如何访问我的 MAC 的内置摄像头以从 docker 容器进行录制?

【问题讨论】:

标签: macos docker ffmpeg usb avfoundation


【解决方案1】:

我不是 docker 专家,但我可以看到一堆问题:

  • Mac 上的 Docker 运行运行 Linux 的虚拟机 (hyperkit/xhyve),然后使用容器。这意味着容器不在裸机内核上运行,并且它们的内核无法直接访问硬件。当然,您也可以使用 Parallels 或 VMWare Fusion 或 VirtualBox 来运行 Linux 系统。
  • 这取决于 Mac 的具体型号,但许多较新的型号使用基于 PCIe 的摄像头,而不是 USB。

因此,要使其发挥作用,您需要:

  • 为您的相机卸载 macOS 驱动程序。
  • 将原始 USB 设备传递到运行 Linux 的虚拟机(如果它确实是 USB 模型)。
  • 让 Linux 加载摄像头驱动程序。
  • 将摄像头从主机 Linux 系统传递到容器。

目前在 macOS 主机上根本无法实现 PCIe 直通,因此根据您的硬件,它可能完全不可行。

如果它在没有 Docker 的情况下工作,试图将其强制放入容器中似乎比必要的复杂得多且容易出错。

【讨论】:

  • 感谢您的详细解答。老实说,我对dockerffmpeg 也很陌生,所以我几乎没有他们两个的经验。你提到的细节比我的知识要高,所以目前我认为不可能从 docker 容器中执行ffmpeg。同时将继续寻找解决方法。
  • 您可以使用ffmpeg,但使用裸机网络摄像头作为输入可能会比它的价值更麻烦。如果您通过网络将网络摄像头的视频流式传输到 docker 容器中,您也许可以做到这一点,但您如何详细做到这一点也超出了我的知识范围。
【解决方案2】:

我认为这条评论会回答你的问题: https://stackoverflow.com/a/64634921/838712

这解释了如何使 macOS 相机在 linux docker 容器中可用。 ffmpeg 应该可以毫无问题地使用这个设备。

【讨论】:

    猜你喜欢
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多