普通USB摄像头转为网络摄像头

2023-12-19

普通USB摄像头转为网络摄像头

2022/02/25

Raspberry Pi Zero W吃灰有一段时间了,想着能否废物利用,使用普通USB摄像头改成一个RTSP协议网络摄像头。

1. 查看摄像头是否可用

查看是否已识别USB摄像头:

lsusb -t

安装luvcview:

sudo apt-get install luvcview

运行luvcview:

luvcview -d /dev/video0 -f yuv -s 640x480
# 这里640x480是根据`lsusb -t`获取的480M
# 如果是320M,则可以输入320x240
# 或者直接运行`luvcview`

2. 方法1:ffserver

2.1 安装H264和ffmpeg

H264:视频压缩算法 ffmpeg:视频转流工具

# 安装H264
cd /usr/src

sudo git clone https://code.videolan.org/videolan/x264.git
cd x264
sudo ./configure --host=arm-unknown-linux-gnueabi --enable-static --disable-opencl
sudo make -j4
sudo make install

# 安装ffmpeg
sudo git clone https://git.videolan.org/git/ffmpeg.git
cd ffmpeg
sudo ./configure --arch=armel --target-os=linux --enable-gpl --enable-libx264 --enable-nonfree
sudo make -j4
sudo make install

上面编译安装在我的Raspberry Pi Zero W上安装非常慢,5个多小时还没编译完。树莓派zero实在太慢,我找了台公司闲置的低配电脑装了ubuntu 16.04,插上了usb摄像头进行测试。建议使用下面的命令直接安装:

sudo apt install ffmpeg libx264-dev

电脑配置如下:

2.2 修改配置文件:

sudo gedit /etc/ffserver.conf

增加或修改以下内容:

HTTPPort 8090                                 #绑定端口号
HTTPBindAddress 0.0.0.0                       #绑定IP
MaxHTTPConnections 2000                       #最大HTTP连接数
MaxClients 1000                               #最大客户端连接数
MaxBandwidth 1000                             #最大带宽
CustomLog -                                   #日志文件,- 为直接打印
 
<Feed feed1.ffm>                              #feed:每一个输入都建立一个feed
File /tmp/feed1.ffm                           #feed缓存文件位置和名称
FileMaxSize 50M                               #缓存文件最大值
ACL allow 127.0.0.1                           #允许写入feed的IP
ACL allow 192.168.0.0 192.168.255.255         #允许写入feed的IP范围
</Feed>
 
RTSPPort 8554                                 #rtsp端口号
RTSPBindAddress 0.0.0.0                       #rtsp IP地址
<Stream live1.h264>                           #
Format rtp                                    #视频流的格式
Feed feed1.ffm                                #视频流的种子来源
VideoCodec libx264                            #
VideoFrameRate 24                             #视频帧率
VideoBitRate 128                              #视频比特率
VideoBufferSize 100                           #视频缓冲区大小
VideoSize 640x480                             #视频帧大小
VideoQMin 1                                   #
VideoQMax 31                                  #
NoAudio                                       #无音频
AVOptionVideo flags +global_header
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
Auth USERNAME:PASSWORD                        #身份验证信息
</Stream>

2.3 启动ffserver服务:

ffserver

2.4 转发rtsp流:

ffmpeg -f v4l2 -i /dev/video0 -s 640x480 -r 24 -vcodec libx264 -an http://127.0.0.1:8090/feed1.ffm

2.5 本机安装vlc图形应用:

sudo snap install vlc --devmode

2.6 vlc查看rtsp流视频

rtsp://127.0.0.1:8554/live1.h264

摄像头为普通免驱USB广角摄像头:

rtsp视频流播放界面,大约有5秒左右延迟:

这样一个普通摄像头已经被改造成RTSP协议的网络摄像头。

参考资料: https://ffmpeg.org/ffmpeg.html https://www.jianshu.com/p/20d4b81f8d14 https://www.cnblogs.com/chay/p/10553787.html

方法2:GStreamer

2.1 采集USB摄像头视频源,并RTSP推流

先安装编译gstreamer rtsp需要用到的工具:

sudo apt-get install libx264-dev gtk-doc-tools

sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-ugly
# 注意:安装部分包时可能提示需要降级,会造成系统异常。推荐一个包管理工具:aptitude。

再下载gstreamer rtsp源码(注意:下载gstreamer rtsp源码的时候必须选择1.8分支的版本,否则在进行编译的时候会报错:Dependency gstreamer-1.0 found: No found 1.14.5 but need: ‘>= 1.19.0’):

sudo apt install git
git clone -b 1.8 https://github.com/GStreamer/gst-rtsp-server.git 

接着编译gstreamer rtsp源码:

cd gst-rtsp-server 
./autogen.sh
sudo make

然后输入rtsp推流命令:

cd examples
./test-launch --gst-debug-level=3 "( v4l2src device=/dev/video0 ! videoconvert ! video/x-raw, format=(string)NV12, width=640, height=480, framerate=30/1 ! queue ! x264enc bitrate=10240 !  rtph264pay name=pay0 pt=96 )"

出现 stream ready at rtsp://127.0.0.1:8554/test 表示已成功推流。因为机器配置很低,再加上软编码处理,延迟大约4秒。

git克隆下来的c语言源码,我看到了 test-auth.c ,用于RTSP协议增加身份认证:

参考资料: https://samwhelp.github.io/note-ubuntu-18.04/read/howto/install-tool/gstreamer/ https://www.codeleading.com/article/9016320201/ https://blog.csdn.net/han2529386161/article/details/102724856 https://www.cnblogs.com/kanite/p/10743085.html http://www.javashuo.com/article/p-ekowmyzz-v.html https://blog.csdn.net/pengyouhai/article/details/122595062 https://www.itread01.com/content/1549835115.html

3. 方法3:VLC转流

sudo snap install vlc --devmode

vlc -vvv v4l2:///dev/video0 --sout '#transcode{vcodec=h264,vb=800,acodec=mp4a}:rtp{sdp=rtsp://:8554/live.ts}' --sout-rtsp-user USERNAME --sout-rtsp-pwd PASSWORD -I dummy

# v4l2:// - Video4Linux is the interface to webcams on Linux
# /dev/video1 - device number assigned to webcam by Linux
# vcodec=h264 video codec
# vb=800 - 800 kb/s video bit rate
# acodec=mp4a
# sdp=rtsp://:8554/ - URL/port advertised by RTSP

图像延迟大约5秒左右:

参考资料: https://www.cnblogs.com/chay/p/10553787.html https://superuser.com/questions/1298030/vlc-as-rtsp-server-authentication-not-working

4. 方法4:Live555流媒体服务器

4.1 安装live555

官网 下载安装,或者wget:

sudo apt-get install libssl-dev

wget  http://www.live555.com/liveMedia/public/live555-latest.tar.gz
tar -xzvf live555-latest.tar.gz
sudo chmod -R 777 live
cd live
./genMakefiles linux-gdb
make
4.1.1 运行live555MediaServer
./live555MediaServer

4.1.2 用ffmpeg将摄像头的H264流推到管道文件
ffmpeg -f v4l2 -i /dev/video0 -c libx264 ~/live/mediaServer/cam1.264

vlc打开 rtsp://127.0.0.1:8000/cam1.264 显示,延迟大约8秒,画面如下:

严重不推荐使用这种方式。因为如果重新用vlc打开rtsp,会播放ffmpeg录制到cam1.264的历史视频,而不是实时画面。

4.2 搭建v4l2rtspserver

git clone https://github.com/mpromonet/v4l2rtspserver.git

cd v4l2rtspserver
cmake .
sudo make install

v4l2rtspserver -W 640 -H 480 -F 15 -P 8554 /dev/video0

执行后界面如下(花屏,未成功,应该是编码问题):

4.3 搭建h264_v4l2_rtspserver

git clone https://github.com/lorlor/h264_v4l2_rtspserver

make

./h264_v4l2_rtspserver

程序运行不起来,失败。如下所示:

翻看c++源码,发现报错的地方。不会c++,所以搞不懂为什么前面赋值了,后面还不等于。

参考资料: https://www.g7smy.co.uk/2021/07/setup-a-network-camera-with-a-raspberry-pi/ https://www.likecs.com/show-204098027.html https://www.cuplayer.com/player/PlayerCode/RTSP/2015/0505/1915.html https://www.cnblogs.com/chaingank/p/4702554.html https://blog.csdn.net/zong596568821xp/article/details/88540455 https://download.csdn.net/download/lk8916/10554375 https://www.gushiciku.cn/pl/gfsg/zh-tw https://programmerall.com/article/14041445869/ https://www.its304.com/article/weixin_30483013/98495322 https://sudonull.com/post/14506-Broadcast-h264-video-without-transcoding-from-the-Logitech-C920

总结

看到上面的参考资料就知道我踩了多少坑,零基础入门视频解码真的非常困难,太底层了,基本都是c/c++,这还只是应用层级,嵌入式就更困难了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

普通USB摄像头转为网络摄像头 的相关文章

随机推荐

  • H5 模块化下调取外部链接js脚本方法

    div class anniu div
  • 全面掌握XSS漏洞攻击,实战案例从Self-XSS到账户接管,以及通过参数污染的XSS实现攻击

    全面掌握XSS漏洞攻击 实战案例从Self XSS到账户接管 什么是跨站脚本攻击 XSS 跨站脚本攻击 XSS 是一种网络安全漏洞 允许攻击者破坏用户与易受攻击的应用程序之间的交互 它允许攻击者绕过同源策略 该策略旨在将不同的网站隔离开来
  • QtForAndroid-------Qt开发Android程序的环境搭建

    1 Qt 我用的是Qt5 14版本的 其他的版本不知道 搭建Android的开发环境前提条件 Java SDK Android SDK Android NDK 另外在安装QT时需要把这个选项勾上 低版本的Qt可能是这样的 具体的安装步骤我是
  • IDEA--properties配置文件中文乱码处理

    在setting配置中进行配置
  • 解读 | VR体验式教育的优势 让教育触手可及

    大家好 我是极智视界 欢迎关注我的公众号 获取我的更多前沿科技分享 邀您加入我的知识星球 极智视界 星球内有超多好玩的项目实战源码和资源下载 链接 https t zsxq com 0aiNxERDq 很多孩子过多地沉浸在所谓的 传统教育
  • 极智AI | 算子融合、矩阵分块 一图看懂大模型优化技术FlashAttention

    欢迎关注我的公众号 极智视界 获取我的更多经验分享 大家好 我是极智视界 本文来介绍一下 算子融合 矩阵分块 一图看懂大模型优化技术FlashAttention 邀您加入我的知识星球 极智视界 星球内有超多好玩的项目实战源码下载 链接 ht
  • 数组对象排序 (arr.sort())

    前端面试题库 面试必备 推荐 地址 前端面试题库 对象排序 arr sort 描述 方法sort 将在原数组上对 数组元素 进行排序 即排序时不创建新的数组副本 如果想按照别的顺序进行排序 就必须提供比较函数 该函数要比较两个值 然后返回一
  • WIN10安装gurobi给matlab使用(记录)

    https www gurobi com downloads gurobi software 这是以前的matlab路径 需要修改成新的 使用校园网激活一下 运行gurobi setup Google报错信息 发现mathwork官方的解释
  • C++内存布局

    温故而知新 本文浅聊和回顾下C 内存布局的知识 一 c 内存布局 C 的内存布局主要包括以下几个部分 代码段 存储程序的机器代码 数据段 存储全局变量和静态变量 数据段又分为初始化数据段 存储初始化的全局变量和静态变量 和未初始化数据段 存
  • ITIL流程是什么?理解和应用IT服务管理最重要的框架

    IT服务管理 IT Service Management 简称ITSM 是指通过采用一系列的最佳实践和方法论来规划 设计 交付和支持信息技术服务 以满足组织和用户的需求 而ITIL Information Technology Infras
  • ubuntu部署llama2-chinese

    ubuntu上安装cuda见之前的blog 已安装cuda12 使用nvcc V 下载llama2 chinese GitHub FlagAlpha Llama2 Chinese Llama中文社区 最好的中文Llama大模型 完全开源可商
  • 【雕爷学编程】Arduino智慧农业之养殖水质监测与控制

    Arduino是一个开放源码的电子原型平台 它可以让你用简单的硬件和软件来创建各种互动的项目 Arduino的核心是一个微控制器板 它可以通过一系列的引脚来连接各种传感器 执行器 显示器等外部设备 Arduino的编程是基于C C 语言的
  • 【神器】wakatime代码时间追踪工具

    文章目录 wakatime简介 支持的IDE 安装步骤 API文档 插件费用 写在最后 wakatime简介 wakatime就是一个IDE插件 一个代码时间追踪工具 可自动获取码编码时长和度量指标 以产
  • Kyligence 发布数据和分析领域垂直大模型司南(Compass)

    12 月 19 日 跬智信息 Kyligence 正式发布 数据和分析领域垂直大模型司南 Compass 以下简称 司南大模型 基于多年数据和分析领域的实践积累和全行业指标洞察的海量语料 Kyligence 司南大模型已具备 自然语言对话分
  • ssm+mysql应急指挥平台-计算机毕业设计源码13263

    摘 要 科技进步的飞速发展引起人们日常生活的巨大变化 电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用 信息时代的到来已成为不可阻挡的时尚潮流 人类发展的历史正进入一个新时代 在现实运用中 应用软件的工作规则和开发步
  • 制造业CRM选型注意事项:有这些功能的系统更好用

    当前 推动制造业数字化转型已成时代发展趋势 为了适应这一趋势 制造业使用 CRM管理系统 是非常 重要的 那么 制造业CRM应该怎么选 1 全方位客户管理 订单价值大 交货周期长 客户开发难 这一直是制造业的痛点 前二点是由于行业特性 第三
  • 物流运输CRM:让日常工作有条不紊

    很多物流行业的企业主都有这样的烦恼 客户来自各行各业 很难细分管理 业务量大庞大 工作很难细化 客户满意度低 缺乏售后跟踪 如果您也面临相同的问题 那么该让CRM管理系统 登场啦 下面说说 物流运输行业 CRM系统有什么作用 1 客户分类管
  • CRM系统在IT软件行业的重要性和价值 | 发展趋势和选择理由

    如今 IT软件行业面临诸多问题 如推广成本的增加和交易周期的延长 很多销售人员埋怨产品好 有需求 但最终没有做到买卖的流程 为了改善这种业务问题 CRM管理系统是一个不错的选择 那样 IT软件行业CRM系统的好处是什么呢 IT软件行业面临哪
  • 金融CRM有用吗?金融行业CRM有哪些功能

    市场形式波诡云谲 金融行业也面临着资源体系分散 竞争力后继不足 未知风险无法规避等问题 金融企业该如何解决这些问题 或许可以了解一下CRM管理系统 和其提供的 金融行业CRM解决方案 金融行业是银行业 保险业 信托业 证券业和租赁业的总称
  • 普通USB摄像头转为网络摄像头

    普通USB摄像头转为网络摄像头 2022 02 25 Raspberry Pi Zero W吃灰有一段时间了 想着能否废物利用 使用普通USB摄像头改成一个RTSP协议网络摄像头 1 查看摄像头是否可用 查看是否已识别USB摄像头 lsus