rk3568之mpp开发笔记怎么实现mpp编码摄像头实时码流?
前言:
大家好,今天给大家分享的内容是在rk3568上,通过mpp来进行实时对摄像头imx415采集的码流数据进行编码成h264或者h265,后期文章,会开发测试一下通过rtsp推流出去,然后电脑端拉流,看一下整个环路的延迟多大,会采用slice的方式去进行编码,mpp编码器有类似的配置。
ok,我们开始今天的内容!
怎么找到摄像头视频节点?
首先要明白为啥要找到摄像头的视频节点,毫无疑问,上层要能够访问摄像头,必须通过驱动层生成的设备节点,上层才可以进行操作,所以我们该怎么判断哪个视频节点(/dev/videoX)是我们需要的呢?
ok,我们可以通过下面可以看到:
/dev/media0 和/dev/v4l-subdev0~3、/dev/video0~9等这些都是和摄像头相关的设备节点。
这里考察一下大家,/dev/v4l-subdev和/dev/video有什么区别?
那么我们回到刚才的问题,哪个/dev/videoX是我们需要的,我们可以通过media-ctrl控件来打印查看拓扑结构,这里注意,因为我现在接入了一个摄像头imx415,所以就只有一个媒体设备节点/dev/media0,那么通过下面的命令,我们来看一下整个摄像头的拓扑结构:
media-ctl -p -d /dev/media0
我们可以从这个拓扑图来看, entity 76是imx415摄像头注册成功的标识,然后我们可以看到摄像头/dev/vedieo0~9,其中/dev/video0和/dev/video1是我们需要的节点,其他节点暂时用不到:
主要上面截图中中的rkisp_mainpath和rkisp_selfpath这代表什么意思,其实这个mainpath和selfpath在整个rk平台简称叫做:
-
MP,即Main Path,指Rockchip ISP驱动的一个输出节点,可输出高分辨率图像,一般用来拍照,抓取Raw图
-
SP,即Self Path,指Rockchip ISP驱动的一个输出节点,最高只能输出1080p分辨率
开始mpp编码:
有了上面的基础作为铺垫,我们开始来进行测试编码h264和h265:
首先来测试一下h264编码,分辨率大小位1080-30fps,视频节点/dev/video0:
用potplay看一下效果:
再来测试一下h264编码,分辨率大小位4k-30fps,视频节点/dev/video0:
看一下效果:
接着来测试一下h265编码,分辨率大小位1080-30fps,视频节点/dev/video0:
mpi_enc_test -w 1920 -h 1080 -t 16777220 -i /dev/video0 -o ./out.h265
播放效果:
总结:
我们可以看到rk的mpp编码支持h264、h265、vp8/vp9、jpeg、avs等相关编码标准,更多的测试,大家可以去感受一下!
同时mpp编码实时流到底怎么实现的,我们下期内容来揭晓,敬请期待!