相机使用 + 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推流
发布评论