通过构造VideoEncoder类实例可实现视频编码功能,编码功能配置项及各项约束与支持情况请参考VideoEncodeConfig数据结构说明。
视频编码支持自定义输出数据格式,通过自定义回调函数传入编码功能配置项,方便用户使用编码后的数据,详情可参考VideoEncodeCallBack。
首先根据需求定义需要的输出数据组合方式,根据组合方式参考VideoEncodeCallBack定义回调函数传入编码功能配置项,然后实例化VideoEncoder类,最后调用Encode成员函数完成编码,获取数据。
视频编码接口调用流程参考如下:
mxVision提供VideoEncoder类进行视频编码,关键步骤说明如下:
// 初始化 MxBase::MxInit(); { // 定义要接收的编码数据 struct FrameImage { Image image; // Video Image Class uint32_t frameId = 0; // Video Frame Index uint32_t channelId = 0; // Video Channel Index }; // 定义获取编码数据到自定义结构的回调函数 APP_ERROR CallBackVenc(std::shared_ptr<uint8_t>& outDataPtr, uint32_t& outDataSize, uint32_t& channelId, uint32_t& frameId, void* userData) { Image image(outDataPtr, outDataSize, -1, Size(1920, 1080)); FrameImage* encodedVec = static_cast<FrameImage*>(userData); FrameImage frameImage; encodedVec.image = image; encodedVec.channelId = channelId; encodedVec.frameId = frameId; return APP_ERR_OK; } // 构造编码配置项 VideoEncodeConfig vEncodeConfig; VideoEncodeCallBack cPtr2 = CallBackVenc; vEncodeConfig.callbackFunc = cPtr2; vEncodeConfig.width = 1920; vEncodeConfig.height = 1080; vEncodeConfig.keyFrameInterval = 1; vEncodeConfig.srcRate = 30; vEncodeConfig.rcMode = 1; vEncodeConfig.maxBitRate = 30000; vEncodeConfig.ipProp = 70; // 实例化编码类 VideoEncoder videoEncoder(vEncodeConfig, deviceId); // 执行编码操作 FrameImage encodedFrame; for (size_t i = 0; i < inputFrameList.size(); i++) { ret = videoEncoder.Encode(image, frameId, &encodedFrame); } } // 去初始化 MxBase::MxDeInit();