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

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

  • 树莓派摄像头调试
    • 排线连接
    • 摄像头权限激活
    • 测试摄像头功能
  • 树莓派原生推http流
    • 使用vlc打开网络串流
  • 树莓派原生推rtsp流
    • 使用vlc打开网络串流
    • 启动异常处理
  • ffmpeg推rtmp流
    • 安装ffmpeg
    • 异常解决
    • 树莓派推流至 rtmp 服务器
    • 使用vlc打开网络串流

树莓派摄像头调试

排线连接

硬件连接时我们首先需要使用树莓派摄像头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

找到摄像头选项,打开树莓派的摄像头功能。
树莓派4B摄像头推出流数据_第1张图片
树莓派4B摄像头推出流数据_第2张图片
树莓派4B摄像头推出流数据_第3张图片
打开后使用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打开网络串流

树莓派4B摄像头推出流数据_第4张图片

树莓派原生推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打开网络串流

树莓派4B摄像头推出流数据_第5张图片

启动异常处理

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服务器上。
树莓派4B摄像头推出流数据_第6张图片

安装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 命令,会出现下面的提示:
树莓派4B摄像头推出流数据_第7张图片

异常解决

  • 问题一: 执行 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打开网络串流

树莓派4B摄像头推出流数据_第8张图片

你可能感兴趣的:(树莓派,raspberry,pi)