最近在使用声网Agora的RTSA,想着把自己的树莓派使用起来,做个远程图传之类的功能。
RTSA不支持音视频的采集编码,仅提供通道能力,所以树莓派上的音视频采集和编码工作需要自己完成。
调研了市面上的两种摄像头的采集和编码,一种是从csdn上看到有介绍进行调研的,也就是camkit开源工程(由于项目过于久远中间太多坑);另一种是目前树莓派官方推荐的,功能更强大,通过libcamera;两种方式在软件处理上也有一些区别:

Legacy stack是raspberry OS Bullseye之前的版本支持的摄像头的方式,网上很多基于python的库都是基于Legacy stack,可以通过raspi-config配置打开
raspi-config
Select [ 3 Interface Options] --> [I1 Legacy Camera] --> [Yes]
Legacy stack支持的三方库,有比较全的camkit。
camkit的功能介绍这里就不做过多介绍了,csdn上有一堆科普的文章,本文尽量干货,介绍整个使用过程。
下载地址:
https://gitee.com/daiyinger/Camkit.git
该项目包含了视频的采集和编码,但是由于项目比较老,依赖的ffmpeg的库≤ffmpeg-4.4.1,ffmpeg-5.x 部分接口找不到。
参考文章FFMPEG编译编译。
wget http://www.ffmpeg.org/releases/ffmpeg-4.4.1.tar.bz2
tar zxvf ffmpeg-4.4.1.tar.bz2
./configure --prefix=/your/install/path \
--enable-gpl\
--enable-nonfree\
--enable-libfdk-aac\
--enable-libx264\
--enable-libx265\
--enable-filter=delogo\
--enable-debug\
--disable-optimizations\
--enable-libspeex\
--enable-shared\
--enable-pthreads
make -j4
make install
export LD_LIBRARY_PATH=/your/install/path/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/your/install/path/lib/pkgconfig:$PKG_CONFIG_PATH
在安装了上述的ffmpeg-4.4.1之后,编译camkit通过
cmake -S . -B build
cmake --build build -j4
编译成功:
上述ffmpeg-4.4.1编译需要依赖很多第三方库,比如libx264,所以本文顺便介绍下通过vcpkg安装ffmpeg-4.4.1,vcpkg官方默认支持的x86-linux下的最新版本就是ffmpeg-4.4.1,直接安装就行。
vcpkg search ffmpeg
vcpkg install ffmpeg[x264]
github:https://github.com/microsoft/vcpkg/blob/master/README_zh_CN.md
官网地址:https://vcpkg.io/en/getting-started.html
在线文档:https://vcpkg.readthedocs.io/en/latest/README/
package搜索:https://vcpkg.io/en/packages.html
git clone https://github.com/microsoft/vcpkg
./bootstrap-vcpkg.sh -disableMetrics
./vcpkg install ffmpeg[x264]
有些场景下需要更好版本的软件,vcpkg支持版本
git log --color=always --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad)' --date=short | grep --color=never ffmpeg
git checkout 779307a10
vcpkg install ffmpeg

非常不幸,ffmpeg-3.3.3版本vcpkg并不支持
root@locakhost# vcpkg install ffmpeg
Error: invalid triplet: x64-linux
Available architecture triplets
VCPKG built-in triplets:
x64-windows-static
x86-windows-static
x86-uwp
x64-uwp
x64-windows
arm-uwp
x86-windows
VCPKG community triplets:
看来还得自己编译,留个记录,记录vcpkg的工具的使用。
如果可以的话:
cmake -B [build directory] -S . -DCMAKE_TOOLCHAIN_FILE=[path to vcpkg]/scripts/buildsystems/vcpkg.cmake
当您希望将 vcpkg 作为一个子模块加入到您的工程中时, 您可以在第一个 project() 调用之前将以下内容添加到 CMakeLists.txt 中, 而无需将 CMAKE_TOOLCHAIN_FILE 传递给 CMake 调用。
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake"
CACHE STRING "Vcpkg toolchain file")
使用此种方式可无需设置 CMAKE_TOOLCHAIN_FILE 即可使用 vcpkg,且更容易完成配置工作。
学习从cktool.c开始。
camkit通过cmake的PLAT参数设置目标平台,本文使用参数PLAT=PC,同时基于linux进行测试,linux采集使用v4l2框架,v4l2de 初始化流程可以参考:linux调用v4l2获取视频,嵌入式Linux:V4L2视频采集操作流程和接口说明。
树莓派默认支持3个版本的摄像头,即1)OV5647 or V1 camera;2)IMX219 or V2 camera;3)IMX477 or HQ camera。当然除了这三种sensor,还支持 IMX290, IMX327, OV9281, IMX378。

libcamera 提供了一些列的C++ API用于应用程序可以配置摄像头,以及获取摄像头的帧数据。获取的图像数据可以直接用于图像编码或者视频编码。但是不包括编码和渲染相关的工作。
所有树莓派官方提供了一组基于libcamera的应用层的工具包libcamera-apps,并且模拟了legacy stack的基于Broadcom的GPU的一组接口(raspstill和raspivid):
libcamera-hello: 一个简单的 “hello world” 应用,提供一个camera的流获取以及在屏幕上进行渲染。
libcamera-jpeg:一个小的应用程序用来抓取高清图像。
libcamera-still:一个更加复杂的图像抓取应用,并且拥有和raspistill类似的功能。
libcamera-vid: 视频抓取程序。
libcamera-raw: 用来直接抓取raw 帧(Bayer格式)的应用。
libcamera-detect:该应用默认没有,但是当在树莓派上安装了TensorFlow Lite后就可以用这个库来触发当检测到某个物体时抓取JPEG格式的图像。
libcamera-apps除了具有命令行,用户也可以作为参考示例来创建用户自己的应用程序,可以参考github库,https://github.com/raspberrypi/libcamera-apps。
git clone https://git.libcamera.org/libcamera/libcamera.git
cd libcamera
pip3 install --user meson==0.63.3 # libcamera need version>0.56
meson build --prefix /your/path/to/install
ninja -C build install
更详细的编译参考building-libcamera
libcamera-hello -qt-preview -t 0 # 正常不需要加入-qt-preview,由于我使用的vnc,加入-qt-preview参数显示摄像头stream窗口
libcamera-jpeg -o test.jpg
libcamera-still -o test.jpg
#Encoders
libcamera-still -e png -o test.png
libcamera-still -e bmp -o test.bmp
libcamera-still -e rgb -o test.data
libcamera-still -e yuv420 -o test.data
#Raw Image Capture
libcamera-still -r -o test.jpg
#Very long exposures
libcamera-still -o long_exposure.jpg --shutter 100000000 --gain 1 --awbgains 1,1 --immediate
# basic
libcamera-vid -t 10000 -o test.h264
vlc test.h264
# Encoders
libcamera-vid -t 10000 --codec mjpeg -o test.mjpeg
libcamera-vid -t 10000 --codec yuv420 -o test.yuv
# Network Streaming
# UDP
libcamera-vid -t 0 --inline -o udp://<ip-addr>:<port>
# paly
vlc udp://@:<port> :demux=h264
ffplay udp://<ip-addr-of-server>:<port> -fflags nobuffer -flags low_delay -framedrop
# TCP
libcamera-vid -t 0 --inline --listen -o tcp://0.0.0.0:<port>
# play
vlc tcp/h264://<ip-addr-of-server>:<port>
ffplay tcp://<ip-addr-of-server>:<port> -vf "setpts=N/30" -fflags nobuffer -flags low_delay -framedrop
# RTSP
libcamera-vid -t 0 --inline -o - | cvlc stream:///dev/stdin --sout
'#rtp{sdp=rtsp://:8554/stream1}' :demux=h264
# play
vlc rtsp://<ip-addr-of-server>:8554/stream1
ffplay rtsp://<ip-addr-of-server>:8554/stream1 -vf "setpts=N/30" -fflags nobuffer -flags low_delay -framedrop
# libcamera-vid 可以配合ffmpeg libav,但是测试没有通过
# 参考 https://www.raspberrypi.com/documentation/accessories/camera.html#libav-integration-with-libcamera-vid
用得不多,获取bayer帧。
依赖TensorFlowLite,感兴趣可以参考libcamera-detect,本文不做讲解。
高科技摄像头特别是海康萤石摄像头,已经不再只局限于简单的视频功能,特别是智能AI的普及,摄像头也华丽变身成了一个个独立的智能个体,可以实现人脸抓拍,人形检测,客流统计等店铺值守场景,也可以实现安全帽识别,车辆识别,非法入侵识别等智慧工地场景。但用户也许会问,摄像头又不会说话,他得知的这些信息怎么告诉我们,还是说需要配一个主机去处理,这成本又有点太高了。这点正是萤石云要为大家解决的,下面来介绍下如何让设备更简便智能的说话。API(应用程序编程接口)提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力。形象一点API可以理解为一个管道,通过该管道,可以传入约定好的命令,来获得摄像头的反馈,
我正在使用Asp.netMVC4开发一个项目。我需要用网络摄像头拍照。此应用程序应该可以配置为任何平板电脑。目前在台式机上运行该应用程序,在平板电脑上没有。我正在使用jscam.swf和jscam_canvas_only.swf。在平板电脑上,我在这些设备上使用SamsungGalaxy安装adobeflashplayer无法正常工作...有人知道其他一些拍照技术,或者如果有人可以帮助我解决这个问题,我将不胜感激 最佳答案 Flash在Android平板电脑上的支持有限,在iOS设备上不支持。更好的解决方案可能是转向100%HTML
有谁知道可以让两个用户通过网络摄像头相互连接的WebRTC/getUserMediaAPI脚本的好教程?一个恰当的例子应该是Chatroulette,只是它不需要那么大。并且应该可以在本地主机上创建它。希望有人能帮帮我! 最佳答案 使用SimpleWebRTC与Signallingserver实现你的目标。在mainsite找到更多信息您将需要nodejs来运行信令服务器,或者您可以使用simplewebrtcsignallingserver用于测试目的。虽然屏幕共享仅适用于HTTPS。工作DEMOSimpleWebRTCDemoS
所以我一直在搞乱这个页面:https://tutorialzine.github.io/pwa-photobooth/基本上它的作用是激活您的网络摄像头并让您直接从流中拍摄快照,我为我的网络借用了它,但视频流被翻转了,我想镜像视频流以便感觉更好。注意:我是一个js新手,所以欢迎详细解释。这是代码,您可能必须使用Firefox而不是Chrome:$('.closecam').click(function(){$('.webcam__overlay').hide();}); $('.camera').click(function(){$('.webcam__overlay').show()
我使用three.js创建了一个用于3D场景的嵌入式轨迹球相机Controller。目前,这使用一个小立方体、一个圆和一个放置在世界原点的正交相机。然而,这三个对象在场景本身中仍然可见,如通过主摄像机所见。(在我下面的演示代码中,我特意将立方体设为10x10x10,以便清晰可见,但它可以做得更小。)此外,作为主场景一部分的穿过原点的元素在插图中可见。例如:插图中可以看到属于主场景的AxisHelper。是否可以在three.js/webgl中使某些对象仅对某些相机可见?如果没有,那么一个解决方法是将轨迹球功能所需的对象放置在远离深空的地方,主摄像头看不到它们,但如果可能的话我更喜欢更纯
我一直在尝试在运行最新raspbian的树莓派3上使用node.js创建和弦WAV播放:shellingouttoaplay/mpg123/someotherprogram-让我一次只能播放一个声音我尝试了https://github.com/sebpiq/node-web-audio-api的组合和https://github.com/TooTallNate/node-speaker(下面的示例代码)但音频质量很低,有很多失真这里有什么我遗漏的吗?我知道我可以用另一种编程语言轻松地做到这一点(我能够用SDL编写C++代码,用pygame编写Python),但问题是node.js是否可
平升电子电池供电遥测终端RTU/遥测终端机/低功耗遥测采集终端是基于4G、5G、NB-IoT网络实现数据采集、远程传输、分析计算、越限报警的智能设备,具有功耗低、IP68防水等特点。特别适合用在无供电条件、防水防尘要求高的监测现场。随着通信网络更迭、产品持续改进,平升电子电池供电遥测终端RTU自2007年问世至今,已经拥有了4款系列产品,可应用于多种场合:管网监测、地下水监测、无线远程抄表、水资源取用水计量监测、油田长停井监测等。功能特点 ★ 远程监测仪表/传感器数据 ★ 4G/5G/NB-IoT无线远传 ★ 数据越限、设备异常自动报警,及时发现事故隐患 ★ IP68级防护——防水防潮
文章目录前言一、整体系统框图二、代码部分二、APP客户端1.MainActivity.java2.NetUtils.java三、实物展示前言一个简易的小项目,以下是代码部分和实物效果展示。一、整体系统框图二、代码部分main.c#include#include#include#include#include#include#include#include#include#include#include#include#include#include"contrlDevices.h"#include"inputCommand.h"pthread_tvoiceThread; //注意:定义线程不使
我正在尝试从MediaStream中删除轨道。MediaStream.removeTrack()从流中删除轨道,但摄像头灯保持亮起,表示摄像头仍处于事件状态。https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack?redirectlocale=en-US&redirectslug=DOM%2FMediaStreamTrack这引用了一个stop()方法,我想它会完全停止相机,但是在chrome中我得到"ObjectMediaStreamTrackhasnomethod'stop'"有没有办法解决这个问题,还是我
目录前言必读方法一、重置和隐式设置摄像头方法二、更新windwos驱动方法三、检查串行总线控制器方法四、下载驱动精灵来安装驱动方法五、驱动精灵里面修复 方法六、检查键盘上面有没有物理摄像头按键 方法七、使用万能摄像头前言必读读者手册(必读)_云边的快乐猫的博客-CSDN博客使用电脑时候,电脑摄像头会遇到黑了用不了,图像无法显示的问题。是设置的问题或者驱动的问题方法一、重置和隐式设置摄像头1.快捷键:win键+X,然后点击设置2.点击蓝牙和其他设备,然后再点击摄像头3.点开连接的摄像头 4.重置一下(也可以调一下亮度对比度这些试试看),正常来说摄像头那里是会看见的。ps:如果还不行就点击下面的2