rk3588+opencv+mpp硬编码采集视频保存文件 QT c++代码
时间: 2023-08-08 19:14:18 浏览: 685
以下是基于RK3588平台,使用OpenCV和MPP进行视频采集和硬编码保存的示例代码,采用QT C++编写:
```c++
#include <opencv2/opencv.hpp>
#include <rockchip/rk_mpi.h>
#include <rockchip/mpp_buffer.h>
using namespace cv;
// 定义视频输入参数
#define VIDEO_WIDTH 1280
#define VIDEO_HEIGHT 720
#define VIDEO_FPS 30
#define VIDEO_BPS 8000000
#define VIDEO_GOP 30
// 定义编码器参数
#define ENCODER_NAME "h264enc"
#define ENCODER_WIDTH VIDEO_WIDTH
#define ENCODER_HEIGHT VIDEO_HEIGHT
#define ENCODER_FPS VIDEO_FPS
#define ENCODER_GOP VIDEO_GOP
#define ENCODER_BITRATE VIDEO_BPS
int main(int argc, char** argv)
{
// 初始化MPP环境
RK_MPI_SYS_Init();
// 创建编码器
MPP_ENC_CONFIG_S enc_cfg;
memset(&enc_cfg, 0, sizeof(enc_cfg));
enc_cfg.eType = MPP_VIDEO_CodingAVC;
enc_cfg.iUsage = MPP_ENC_NORMAL;
enc_cfg.iPicWidth = ENCODER_WIDTH;
enc_cfg.iPicHeight = ENCODER_HEIGHT;
enc_cfg.iKeyInterval = ENCODER_GOP;
enc_cfg.fFrameRate = ENCODER_FPS;
enc_cfg.iBitRate = ENCODER_BITRATE;
MPP_ENC_HANDLE hEnc;
RK_MPI_VENC_Create(&hEnc, &enc_cfg);
// 创建输入视频流
VideoCapture cap(0);
cap.set(CAP_PROP_FRAME_WIDTH, VIDEO_WIDTH);
cap.set(CAP_PROP_FRAME_HEIGHT, VIDEO_HEIGHT);
cap.set(CAP_PROP_FPS, VIDEO_FPS);
// 创建输出文件
VideoWriter writer;
writer.open("output.mp4", VideoWriter::fourcc('a', 'v', 'c', '1'), VIDEO_FPS, Size(VIDEO_WIDTH, VIDEO_HEIGHT), true);
// 循环采集视频帧并编码保存
while (true)
{
Mat frame;
cap.read(frame);
MPP_BUFFER buffer;
RK_MPI_MBPOOL pool = NULL;
RK_MPI_MBPOOL_CREATE(&pool, MPP_BUFFER_TYPE_ION, 1, ENCODER_WIDTH*ENCODER_HEIGHT*3/2);
RK_MPI_MBPOOL_GET_BUFFER(pool, &buffer, RK_TRUE);
RK_MPI_MB_BLK blk = RK_MPI_MB_GetPtr(buffer);
memcpy(blk->pVirAddr, frame.data, VIDEO_WIDTH*VIDEO_HEIGHT*3/2);
blk->u32Size = VIDEO_WIDTH*VIDEO_HEIGHT*3/2;
MPP_PACKET packet;
memset(&packet, 0, sizeof(packet));
RK_MPI_VENC_SendFrame(hEnc, buffer, &packet);
if (packet != NULL)
{
writer.write(packet->pData, packet->iDataSize);
RK_MPI_SYS_FreePacket(packet);
}
RK_MPI_MBPOOL_PUT_BUFFER(pool, buffer);
}
// 释放资源
writer.release();
RK_MPI_VENC_Destroy(hEnc);
RK_MPI_SYS_Exit();
return 0;
}
```
以上代码仅作为示例,具体实现过程需要根据您的具体需求进行调整和优化。另外,需要注意的是,由于硬编码需要使用MPP库,因此需要将相关头文件和库文件链接到项目中。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![7z](https://img-home.csdnimg.cn/images/20241231044736.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![7z](https://img-home.csdnimg.cn/images/20241231044736.png)