树莓派CSI相机使用 + ffmpeg推流

编程入门 行业动态 更新时间:2024-10-11 09:24:53

树莓派CSI<a href=https://www.elefans.com/category/jswz/34/1768004.html style=相机使用 + ffmpeg推流"/>

树莓派CSI相机使用 + ffmpeg推流

树莓派相机模组v2在2016年发布,采用800万像素的Sony IMX219的传感器。
支持1080p30, 720p60和VGA90录像模式,拍照模式最大支持3280*2464的图像分辨率。
相机模组采用CSI接口与树莓派相连接,获取图像数据支持MMAL和V4L api, 也支持第三方库如ffmpeg。

树莓派系统中提供了至少拍照raspstill录像raspivid两个工具,本文介绍这两个工具的使用。

硬件安装

相机模组

安装之后,运行抓图工具,如raspistill -o image.jpg,出现报错

相机已经安装,但是初始化组件时失败。后面需要使用sudo raspi-config进行配置。同时,查看系统的设备,并没有指示相机的/dev/video0设备

树莓派系统配置

执行命令:sudo raspi-config,使能摄像头,按照图示顺序操作:



操作完成后重启树莓派,再次查看视频设备,出现了 /dev/video0

测试拍照功能

再次运行拍照命令 raspistill -o image.jpg
完成后,使用file image.jpg查看图片信息:

可以直观看到当前图像文件的基本信息,图像分辨率为3280*2464 ≈ 800W,宽高比为3280/2464= 1.331 ≈ 4:3。

复制到windows下查看图片。

测试录像功能

raspivid仅支持录制h264裸流视频文件,例如 raspivid -o video.h264 -t 10000 -w 1280 -h 720 ,表示录制10秒、图像分辨率为1280*720的视频保存为video.h264。

使用file命令查看文件信息

复制文件到windows视频VLC播放,查看媒体信息

用到命令说明

拍摄时长,只要通过 “-t” 选项来设置你想要的长度就行了(单位是毫秒)
图像分辨率,使用 “-w” 和 “-h” 选项将分辨率降为 1280x720等等
码率, 默认是12Mbps ,通过”-b”来指定,例如150Kbps, 设置为 “-b 1200000”
帧率,默认是25fps,通过”-fps”来指定,例如5fps, 设置为 “-fps 5”
gop,通过”-g”来指定,通常设定为 1fps、2fps等
H264 profile,可选baseline、main、high
H264 level,可选4、4.1、4.2
强制每个I帧添加PPS、SPS, 设置"-ih"即可



Raspberry Pi Camera Module官方说明

.md

新的网址 .html


FFmpeg推流测试

1、ffmpeg官网安装下载

下载ffmpeg-git-armhf-static.tar.xz,解压放入/usr/bin中,可以直接使用fmpeg命令进行录像拍照等功能。

推流测试,例如执行ffmpeg -i /dev/video0 -f flv rtmp://192.168.3.86:9092/live/raspi

推流默认视频分辨率为1024*768,存在问题:

  • 终端显示的帧率始终不到5fps,cpu占用巨高;
  • vlc拉流播放延迟30s以上,降低分辨率也基本改善

2、使用树莓派官方提供的ffmpeg

卸载上一步安装的ffmpeg,使用sudo apt-get install ffmpeg命令安装树莓派提供的ffmpeg工具。

安装后,可以使用硬编码器h264_omx, 实现硬件加速。

推流执行命令修改,效率有明显改善。

ffmpeg -i /dev/video0 -vcodec h264_omx -f flv rtmp://192.168.3.86:9092/live/raspi

使用如下方法

ffmpeg -f v4l2 -c:v h264_mmal -pix_fmt yuv420p -i /dev/video0 -s 1280x720 -r 30 -c:v copy -b:v 4000k -f flv rtmp://192.168.3.86:9092/live/raspi

修改分辨率使用前置video_size参数,
ffmpeg -f v4l2 -c:v h264_mmal -pix_fmt yuv420p -video_size 1280x720 -i /dev/video0 -r 30 -c:v copy -b:v 4000k -f flv rtmp://192.168.3.86:9092/live/raspi

根据情况再加上 preset 和 tune (如 -preset:v ultrafast -tune:v zerolatency)基本满足要求。

也可使用如下方式
raspivid -o - -t 0 -w 1280 -h 720 -fps 25 -b 4000000 -g 50 --nopreview | ffmpeg -re -i - -f h264 -vcodec copy -g 50 -f flv rtmp://192.168.3.86:9092/live/raspi
正常,但是延迟10s左右! -_-!


另外的方式,直接通过v4l2获取yuv数据再使用硬编码器,可以配置码率:
ffmpeg -f v4l2 -input_format yuv420p -i /dev/video0 -vcodec h264_omx -b:v 2000000 1111111.h264

且使用ffplay 播放时增加参数 -fflags nobuffer 能显著降低播放延迟。

更多推荐

树莓派CSI相机使用 + ffmpeg推流

本文发布于:2024-03-14 18:56:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1737127.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:相机   树莓派   CSI   ffmpeg

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!