gpt4 book ai didi

http - 树莓派 : use VLC to stream webcam : Logitech C920 [H264 Video without transcoding + Audio + LED control] - SpyCam/BabyCam

转载 作者:可可西里 更新时间:2023-11-01 15:12:39 25 4
gpt4 key购买 nike

我有一个 RaspberryPi 和一个罗技 C920 网络摄像头。
我想将这些设备用作监控/婴儿摄像头,即:在没有 CPU 密集型视频的情况下通过 HTTP(或任何其他协议(protocol))流式传输音频 + 视频
转码


C920 网络摄像头能够本地传输 H264,因此理论上我不需要让 RaspberyPi+VLC 对视频流进行转码。

内置的 C920 麦克风流似乎没有包含在网络摄像头流中。
摄像头和麦克风是 2 个独立的设备。

C920 还具有内置 LED 指示灯。我想控制它以避免录制时 LED 亮起。

我怎样才能做到这一点?

最佳答案

此解决方案经过测试并适用于以下所示版本。
使用这种方法,RaspberryPi3 始终占用 5% 左右的 CPU。

编辑 2018-11-18:
还可以在RaspiVWS project homepage上看到一体化解决方案原型(prototype)。 (对于好奇的人,请参阅 GitHub project)

0. 初步检查

1.摄像头视频配置

2.麦克风识别

3. 使用 VLC 串流

4. 将 RaspberryPi3+ 设为 Wifi 接入点
(如果您没有可将 Pi 连接到的现有网络)

5. 启动脚本或作为服务

6. [编辑] 附加命令:无限循环录制和分割视频

7. [编辑] 给定时刻的程序执行

8. [编辑] 故障排除

0. 初步检查

答案是使用 Raspbian 9.4 Stretch。
使用以下命令检查您的版本:

lsb_release -a

你应该看到:
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 9.4 (stretch)
Release: 9.4
Codename: stretch

我们可以依赖以下工具:
  • v4l 允许控制网络摄像头。它提供命令 v4l2-ctl这将允许我们控制和配置网络摄像头。
  • VLC 不仅是视频播放器,还具有强大的流媒体功能

  • 您可以使用以下命令安装它们:
    sudo apt-get install vlc
    sudo apt-get install v4l-utils

    安装完所有内容后,您可以配置 C920 网络摄像头。

    1.网络摄像头视频配置
    v4l2-ctl --all列出所有可用设备及其配置
    pi@raspberrypi:~ $ v4l2-ctl --all
    Driver Info (not using libv4l2):
    Driver name : uvcvideo
    Card type : HD Pro Webcam C920
    Bus info : usb-3f980000.usb-1.5
    Driver version: 4.14.30
    Capabilities : 0x84200001
    Video Capture
    Streaming
    Extended Pix Format
    Device Capabilities
    Device Caps : 0x04200001
    Video Capture
    Streaming
    Extended Pix Format
    Priority: 2
    Video input : 0 (Camera 1: ok)
    Format Video Capture:
    Width/Height : 1920/1080
    Pixel Format : 'H264'
    Field : None
    Bytes per Line : 3840
    Size Image : 4147200
    Colorspace : sRGB
    Transfer Function : Default
    YCbCr/HSV Encoding: Default
    Quantization : Default
    Flags :
    Crop Capability Video Capture:
    Bounds : Left 0, Top 0, Width 1920, Height 1080
    Default : Left 0, Top 0, Width 1920, Height 1080
    Pixel Aspect: 1/1
    Selection: crop_default, Left 0, Top 0, Width 1920, Height 1080
    Selection: crop_bounds, Left 0, Top 0, Width 1920, Height 1080
    Streaming Parameters Video Capture:
    Capabilities : timeperframe
    Frames per second: 30.000 (30/1)
    Read buffers : 0
    brightness (int) : min=0 max=255 step=1 default=-8193 value=128
    contrast (int) : min=0 max=255 step=1 default=57343 value=128
    saturation (int) : min=0 max=255 step=1 default=57343 value=128
    white_balance_temperature_auto (bool) : default=1 value=1
    gain (int) : min=0 max=255 step=1 default=57343 value=255
    power_line_frequency (menu) : min=0 max=2 default=2 value=2
    white_balance_temperature (int) : min=2000 max=6500 step=1 default=57343 value=4822 flags=inactive
    sharpness (int) : min=0 max=255 step=1 default=57343 value=128
    backlight_compensation (int) : min=0 max=1 step=1 default=57343 value=0
    exposure_auto (menu) : min=0 max=3 default=0 value=3
    exposure_absolute (int) : min=3 max=2047 step=1 default=250 value=333 flags=inactive
    exposure_auto_priority (bool) : default=0 value=1
    pan_absolute (int) : min=-36000 max=36000 step=3600 default=0 value=0
    tilt_absolute (int) : min=-36000 max=36000 step=3600 default=0 value=0
    focus_absolute (int) : min=0 max=250 step=5 default=8189 value=0 flags=inactive
    focus_auto (bool) : default=1 value=1
    zoom_absolute (int) : min=100 max=500 step=1 default=57343 value=100
    led1_mode (menu) : min=0 max=3 default=3 value=3
    led1_frequency (int) : min=0 max=255 step=1 default=0 value=0

    最后 2 行为我们提供了控制内置 LED 指示灯的线​​索,例如,停用 LED 指示灯。 -d0参数指示应在哪个设备上应用修改(如果您有多个凸轮或其设备名称已更改)
    v4l2-ctl -d0 --set-ctrl=led1_mode=0
    v4l2-ctl -d0 --set-ctrl=led1_frequency=30

    2. 麦克风识别

    命令 arecord -l将为我们提供 ALSA 设备列表。 (ALSA 是树莓派中的音频管理器)
    pi@raspberrypi:~ $ arecord -l
    **** Liste des Périphériques Matériels CAPTURE ****
    carte 1: C920 [HD Pro Webcam C920], périphérique 0: USB Audio [USB Audio]
    Sous-périphériques: 1/1
    Sous-périphérique #0: subdevice #0

    这意味着内置麦克风位于 hardware 1, periph 0 .您可以在命令行中使用 alsamixer -c 1 -V capture 进行检查

    3. 使用 VLC 串流

    VLC 可以使用命令行启动。
    由于我们还没有在单个流访问中将视频和音频混合在一起,因此我们需要要求 VLC 这样做。
    它的作用是 transcoding VLC 的特点。
  • 通过 HTTP 传输

  • 我们还想通过 HTTP 进行流式传输,VLC 也可以实现。
    cvlc v4l2:///dev/video0:chroma=h264 :input-slave=alsa://hw:1,0 --sout '#transcode{acodec=mpga,ab=128,channels=2,samplerate=44100,threads=4,audio-sync=1}:standard{access=http,mux=ts,mime=video/ts,dst=:8099}'

    说明
  • v4l2:///dev/video0:chroma=h264提供 VLC 输入数据:它从/dev/video0 获取视频流,并且它是 h264 编码(如果您的网络摄像头是第 0 个视频设备,它也可以是另一个数字,请参阅 v4l2-ctl --all 命令)
  • :input-slave=alsa://hw:1,0告诉 VLC 使用视频获取另一个输入流。它是从 arecord 识别的音频流以上
  • --sout告诉 VLC 如何处理输出流
  • #transcode{acodec=mpga,ab=128,channels=2,samplerate=44100,threads=4,audio-sync=1}告诉 VLC 将音频转换为 mpga编解码器,128 kbits/s,2 channel ,44100 Hz 采样,使用所有 4 个 RaspberryPi3+ 内核。音频同步是可选的。我花了一些时间才意识到这一点:网络摄像头 h264 视频流保持原样(无视频转码)。
  • :standard{access=http,mux=ts,mime=video/ts,dst=:8099}告诉 VLC 在端口 8099 上使用 TS 复用格式通过 HTTP 提供流。

  • 在任何其他设备上,您可以使用 VLC 访问您的 RaspberryPi3+ VLC 流: vlc http://<raspberrypi-ip>:8099
    它适用于任何 VLC 客户端:
  • window
  • unix
  • mac
  • 使用 iPhone 7 (v11.2.1 (15C153)) 和 VLC 应用程序 (3.0.3 (305)) 确认

  • 注意:网络摄像头输出中的视频已经是 H264 1920x1080 30fps,可以节省大量 RaspberryPi3+ CPU。
  • 不同的容器

  • 你也可以记录到各种容器,甚至容器+流,这里有一些例子:
  • 录制到 MKVcvlc v4l2:///dev/video0:chroma=h264 :input-slave=alsa://hw:1,0 --sout '#transcode{acodec=mpga,ab=128,channels=2,samplerate=44100,threads=4,audio-sync=1}:standard{access=file,mux=mkv,dst='/home/pi/Webcam_Record/MyVid.mkv'}'
  • 录制到 MP4cvlc v4l2:///dev/video0:chroma=h264 :input-slave=alsa://hw:1,0 --sout '#transcode{acodec=mpga,ab=128,channels=2,samplerate=44100,threads=4,audio-sync=1}:standard{access=file,mux=mp4,dst='/home/pi/Webcam_Record/MyVid.mp4'}'
  • 记录+流cvlc v4l2:///dev/video0:chroma=h264 :input-slave=alsa://hw:1,0 --sout '#transcode{acodec=mpga,ab=128,channels=2,samplerate=44100,threads=4,audio-sync=1}:duplicate{dst=standard{access=file,mux=mp4,dst='/home/pi/Webcam_Record/MyVid.mp4'},dst=standard{access=http,mux=ts,mime=video/ts,dst=:8099}}'
  • 格式化文件名、时间戳

  • 您还可以使用格式化字符串作为文件名。像这样的前缀命令:
    cvlc --sout-file-format v4l2:///dev/video0:<...> dst='/home/pi/Webcam_Record/%F_%T_MyVid.mp4'}

    它将产生一个名为 YYYY-MM-DD_HH:MM:SS_MyVid.mp4 的文件( : 在 unix 文件名中被授权,但在 Windows 文件名中没有)

    4. 使 RaspberryPi3+ 成为 Wifi 接入点

    如果您没有将 Pi 连接到的现有网络:
    您可以按照 RaspberryPi3+ 官方网站的说明进行操作: https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md

    否则,如果您已经拥有网络,则可以使用其 IP 连接到您的 pi。
    见第 3 部分

    On any other device, you can use VLC to access your RaspberryPi3+ VLC stream : vlc http://<raspberrypi-ip>:8099



    5. 启动脚本

    您可以将许多命令放入一个 bash 文件 my_bash_file.sh .
    例如:
    #!/bin/bash
    # auto stream launch + led off
    #cvlc -vvv for verbose debug

    # change this value to adapt to your webcam device number
    deviceNb=0

    # force video format + led off
    v4l2-ctl -d${deviceNb} --set-fmt-video=width=1920,height=1080,pixelformat=1 --set-ctrl=led1_mode=0

    # if delay needed
    # cvlc v4l2:///dev/video${deviceNb}:chroma=h264 :input-slave=alsa://hw:1,0 :live-caching=2500 --sout '#transcode{acodec=mpga,ab=128,channels=2,samplerate=44100,threads=4,audio-sync=1}:standard{access=http,mux=ts,mime=video/ts,dst=:8099}'

    # no delay
    cvlc v4l2:///dev/video${deviceNb}:chroma=h264 :input-slave=alsa://hw:1,0 --sout '#transcode{acodec=mpga,ab=128,channels=2,samplerate=44100,threads=4,audio-sync=1}:standard{access=http,mux=ts,mime=video/ts,dst=:8099}'
  • 基本方法

  • 然后您可以制作 rc.local script 使用您的自定义脚本在启动时执行。
    您可以按照 RaspberryPi3+ 官方网站的说明进行操作: https://www.raspberrypi.org/documentation/linux/usage/rc-local.md
  • 另一种方法:创建一个守护进程

  • 我们将创建一个“网络摄像头流”服务,假设所有必要的 bash 命令都位于 /home/pi/Webcam_Record/vlc_webcam_stream_service.sh
    cd /lib/systemd/system/
    sudo nano webcam-stream.service

    并在其中写下:
    [Unit]
    Description=Custom Webcam Streaming Service
    After=multi-user.target

    [Service]
    Type=simple
    ExecStart=/home/pi/Webcam_Record/vlc_webcam_stream_service.sh
    Restart=on-abort

    [Install]
    WantedBy=multi-user.target

    使服务文件和脚本可执行:
    sudo chmod 644 /lib/systemd/system/webcam-stream.service
    chmod +x /home/pi/Webcam_Record/vlc_webcam_stream.sh

    允许 VLC 以 ​​root 身份执行:
    sudo sed -i 's/geteuid/getppid/' /usr/bin/vlc

    重新加载守护进程并启用我们的服务:
    sudo systemctl daemon-reload
    sudo systemctl enable webcam-stream.service

    检查它是否被识别并正常工作:
    sudo service webcam-stream status
    sudo service webcam-stream start

    您可以使用另一台计算机检查视频是否正确流式传输。
    请注意,服务运行时网络摄像头将不可用。

    完成后,您可以连接到 RaspberryPi3+ wifi 接入点并访问您的视频流。

    6. [编辑] 附加命令:无限循环录制和分割视频

    以下 bash 脚本允许无限录制带有时间戳的文件名和流媒体的 15 秒长视频
    #!/bin/bash
    # auto stream launch + led off
    #cvlc -vvv for verbose debug

    # adapt to video device name
    deviceNb=1

    # loop duration
    duration=15

    #infinite recording
    #loopOption=
    loopOption=--loop

    # force video format + led off
    v4l2-ctl -d ${deviceNb} --set-fmt-video=width=1920,height=1080,pixelformat=1 --set-ctrl=led1_mode=0

    # if delay needed :live-caching=2500
    cvlc --sout-file-format --run-time=${duration} ${loopOption} v4l2:///dev/video${deviceNb}:chroma=h264 :input-slave=alsa://hw:1,0 --sout '#transcode{acodec=mpga,ab=128,channels=2,samplerate=44100,threads=4,audio-sync=1}:duplicate{dst=standard{access=file,mux=mp4,dst='/home/pi/Webcam_Record/%F_%T_Spy.mp4'}:dst=standard{access=http,mux=ts,mime=video/ts,dst=:8099}'

    7. [编辑] 给定时刻的程序执行

    编辑 2018 年 8 月 4 日

    要在今天 14:00 启动执行,您可以使用以下命令:
    ./my_vlc_webcam_script.sh | at 1400

    at命令手册以获取更多详细信息。

    8. 故障排除

    编辑 2018 年 7 月 7 日

    我最近在 dist 升级后遇到了 VLC 错误:
    VLC media player 2.2.6 Umbrella (revision 2.2.6-0-g1aae78981c)
    [00acb230] pulse audio output error: PulseAudio server connection failure: Connection refused

    我找到的解决方案是在 GUI 模式下启动 VLC 并将默认音频设备更改为 ALSA(而不是自动)。我也可以在命令行中完成。
    请参阅此处找到的解决方案 VLC issues with PulseAudio
    cvlc -A alsa,none --alsa-audio-device default

    关于http - 树莓派 : use VLC to stream webcam : Logitech C920 [H264 Video without transcoding + Audio + LED control] - SpyCam/BabyCam,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49846400/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com