RK3399 ,播放RTSP流,使用QMediaPlayer,不使用FFMpeg方式

rk3399 想要拉RTSP流并显示共有俩种显示方式

其中rk3399拥有mpp硬件解码器,能够解h264与h265码流

第一种方式为 FFmpeg+qt+MPP,方式进行解码

此种解码方式,前面的文章有阐述过,在此就不再过多阐述了

第二种方式是利用qt中的qMediaplayer方式进行播放,Qmediaplayer,自己并无解码器,rk3399中恰巧提供了GST(gstreamer)框架,Qt中的qmediaplayer 在linux下支持这种解码框架,能够自己调用,因此,我们只需要设置播放源即可,在本项目中,需要把显示的图像进行另外的处理,因此我们利用QVideoProbe 的方式的槽函数的方式进行获取

整体思路如下

1,确定rk3399 上有安装 gst ,可输入gst 按tab键进行补全命令进行查看,如图所示

2.

QVideoProbe class允许你监控正在播放或者记录的视频

可以发出两个信号,其中比较重要的是后面一个videoFrameProbed

void flush()

void videoFrameProbed( const QVideoFrame &frame)

利用此函数我们可以接收rtsp流中的每一帧图像,再利用cpu或者rk3399中的rga模块进行转码,将nv12转为rgb888格式,

如下所示

剩下部分为RGA解码,部分,注意这里要对图像的真实的分辨率进行计算,h264与h265,图像对齐方式并不一致,h264为16位对齐方式,h265对齐方式为265奇数对齐方式,直接设置用frame的宽高的方式,会导致rga解析的图像并不正确。因此我们这里要计算图像的正确的大小,还有一种方式,是利用ffmpeg拉流,获取图像正确的大小格式,这里我们直接计算图像的大小。为265整除即可,当图像转换完成后,即使宽高设置正确,也会存在绿边现象,这时我们可计算绿边的大小,用原始图像大小减去h265对齐之后的大小,就是绿边的大小,再利用Qimg的copy,拷贝正确的图像大小,即可。

rga 图像转换代码如下所示

猜你喜欢

转载自blog.csdn.net/qq_41117054/article/details/128534344
今日推荐