树莓派4B摄像头推出流数据

树莓派摄像头调试

排线连接

硬件连接时我们首先需要使用树莓派摄像头FFC排线,连接树莓派摄像头与树莓派开发板。其中排线连接的接口被称为CSI(Camera Serial Interface)接口。

树莓派开发板的CSI接口位于USB和以太网接口旁边。我们先将CSI接口的黑色挡板拔开,之后将排线蓝色一端正对以太网接口方向插入,之后按下黑色挡板进行固定。

用同样的方法连接摄像头一端,排线的蓝色端与摄像头背面保持相同方向;注意接线时务必保持电源断开。
请添加图片描述

摄像头权限激活

先对树莓派进行更新:

sudo apt-get update
sudo apt-get upgrade

修改配置文件:

sudo vim /etc/modules

...
bcm2835-v4l2
....

输入指令打开树莓派的配置界面:

sudo raspi-config

找到摄像头选项,打开树莓派的摄像头功能。
请添加图片描述
请添加图片描述
请添加图片描述
打开后使用reboot命令重启树莓派。

执行命令查看摄像头是否接入,detected=0说明摄像头未成功接入,检查先排线或摄像头是否正常:

vcgencmd get_camera

...
supported=1 detected=1
...

测试摄像头功能

执行指令,等待几秒钟,然后保存一个图片到当前目录:

raspistill -o new.jpg

获取h264文件:

raspivid -o mykeychain.h264 -t 10000 -w 1280 -h 720 

出现下面的异常,请按激活流程排查并检查排线或摄像头是否正常:

mmal mmal_vc_component_create failed to create component 'vc ril camera' (1:ENOMEM)
mmal mmal_component_create_core could not create component 'vc ril camera' (1) mmal Failed to create camera component
mmal main Failed to create camera component
mmal Camera is not detected. Please check carefully the camera module is installed correctly

树莓派原生推http流

执行指令,将流数据推至http流:

sudo raspivid -o - -rot 180 -t 0  -w 640 -h 480 -fps 30|cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8090}' :demux=h264
  • -rot: 图像旋转180(我添加了这个,自己看情况是否添加);
  • -t:延时
  • -w:输出视频宽度
  • -h:输出视频高度
  • -fps:输出视频帧数
  • access:http协议传输
  • dst:目标端口(输出端口)
  • demux:编码格式

使用vlc打开网络串流

请添加图片描述

树莓派原生推rtsp流

执行指令,将流数据推至http流:

sudo raspivid -o - -rot 180 -t 0 -fps 30|cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://10.122.4.202:8554/}' :demux=h264

使用vlc打开网络串流

在这里插入图片描述

启动异常处理

pi@raspberrypi:~ $ raspivid -o - -t 0 |cvlc -v stream:///dev/stdin --sout '#rtp{sdp=rtsp://10.122.4.202:8554/}' :demux=h264 
VLC media player 3.0.12 Vetinari (revision 1.0.6-1618-g917488b78) 
[0085b9d8] vlcpulse audio output error: PulseAudio server connection failure: Connection refused 
[0087bfe8] dummy interface: using the dummy interface module... 
[b2400a60] stream_out_rtp stream out warning: "10.122.4.202" RTSP host might be ignored in multiple-host configurations, use at your own risks. 
[b2400a60] stream_out_rtp stream out: Consider passing --rtsp-host=IP on the command line instead. 
[b2402e90] main stream error: unknown query 0x30e in demux_vaControlHelper 

指令参数错误导致

cvlc -v # 错误
cvlc -vvv # 正确

ffmpeg推rtmp流

流程是通过ffmpeg将树莓派采集的视频数据转成rtmp的流数据,并推送到nginx-rtmp服务器上。
请添加图片描述

安装ffmpeg

顺序执行以下命令(具体的下载目录和安装目录按自己实际需要进行修改,sudo make 这一步耗时较长):

cd <你的软件下载目录>
sudo apt-get update
sudo apt-get install libx264-dev
 
wget http://ffmpeg.org/releases/ffmpeg-4.1.tar.bz2
sudo tar jxvf ffmpeg-4.1.tar.bz2
 
cd ffmpeg-4.1/
 
sudo ./configure --prefix=/opt/ffmpeg --enable-shared --enable-pthreads --enable-gpl  --enable-avresample --enable-libx264 --disable-yasm
sudo make
sudo install

最终完成后,执行 ffmpeg 命令,会出现下面的提示:
请添加图片描述

异常解决

  • 问题一: 执行 ffmpeg,报命令无效

    解决办法:把安装目录下的 /opt/ffmpeg/bin/ffmpeg 文件复制到 /usr/bin 当中,实际的安装目录见 ./configure 的 --prefix 配置项

  • 问题二:报错:ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open shared object file: No such file or directory

    解决办法:

    sudo vim ~/.bashrc
    

    复制下面内容粘贴至文件最后(FFMPEG_HOME 的值为实际的 ffmpeg 安装路径),然后保存退出:

    export FFMPEG_HOME=/opt/ffmpeg
    export PATH=$FFMPEG_HOME/bin:$PATH
    export 	LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$FFMPEG_HOME/lib:/usr/local/lib
    

    然后执行命令:

    source ~/.bashrc
    

树莓派推流至 rtmp 服务器

执行下面指令,将流数据推到rtmp服务器:

raspivid -w 640 -h 480 -b 15000000 -t 0 -a 12 -a 1024 -a "CAM-1 %Y-%m-%d %X" -ae 18,0xff,0x808000 -o - | ffmpeg -re -i - -s 640x480 -vcodec copy -acodec copy -b:v 800k -b:a 32k -f flv rtmp://<自己云服务器的公有IP地址>/videotest

使用vlc打开网络串流

请添加图片描述

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值