rockchip-linux / mpp

Media Process Platform (MPP) module
531 stars 161 forks source link

RK3399,多线程解码,同时多线程编码 #143

Open programcj opened 4 years ago

programcj commented 4 years ago

使用4个线程读取RTSP视频并解码没什么问题; 但是,当加入另外4个线程对视频的每一帧都编码成JPG,发现解码速度慢了很多,使用netstat -ant也看到网络中还有很多数据未接收; 不知道这是什么问题导致的?

HermanChen commented 4 years ago

jpeg 编码使用 VPU 硬件,是与小分辨率 264 码流解码的硬件是复用的 setprop use_mpp_mode 1 之后再试一下

programcj commented 4 years ago

我是在Ubuntu下测试的export use_mpp_mode=1 但是结果依旧, 我使用的是ffmpeg去拉rtsp 1080p视频流 使用h264_rkmpp去解码成 AV_PIX_FMT_DRM_PRIME的AVFrame; 将AVFrame转换成 MPP_Frame NV12数据,让JPG编码线程编成jpg, (MppEncJpegCfg 的quant设置为4) 4个编码线对应4个视频拉流解码线程 去掉JPG编码,解码就不会卡. @HermanChen

programcj commented 4 years ago

是因为 mpp_buffer_group_limit_config(data->frm_grp, buf_size, 24) 导致的吗? 因为我将 MPP_Frame缓存起来,造成解码线程不能分配倒新的MPP_Buffer? @HermanChen

HermanChen commented 4 years ago

echo 0x100 > /sys/modules/rk_vcodec/parameters/debug 看一下 log

programcj commented 4 years ago

我感觉已经可以了,应该是buffer问题

RKMPPDecodeContext rk_context = pCodecCtx->priv_data; RKMPPDecoder decoder = (RKMPPDecoder *)rk_context->decoder_ref->data; ret = mpp_buffer_group_limit_config(decoder->frame_group, 0, 100);

@HermanChen

wxlzyz commented 1 year ago

使用4个线程读取RTSP视频并解码没什么问题; 但是,当加入另外4个线程对视频的每一帧都编码成JPG,发现解码速度慢了很多,使用netstat -ant也看到网络中还有很多数据未接收; 不知道这是什么问题导致的?

请问多线程是怎么处理的?我这边一使用多线程解码多路视频mpp_frame_get_errinfo就返回1

HermanChen commented 1 year ago

是这样的,3399 的 264 编码器和 jpeg 编解码是同一个器件时分复用的,所以跑 jpeg 的时候会让 264 编码性能大大下降