说来也奇怪,最近RK3588的用户扎堆,近期连续远程了七八个板子都是3588,有firefly的,有野火鲁班猫的,有正点原子的等,总体都大差不差,通过各种性能对比测试,鲁班猫性能更突出。在我们普通的PC机器电脑,播放一个8K,直接GPU干满,除非显卡强劲,普通的显卡一般就只能支撑1路265格式的8K播放,以为这就是极限了,没想到在小小的嵌入式板子上,播放8K也是这么的流畅,不愧是专有的RKMPP硬解方案,这还不是极限,开了4路8K,居然也行,绝对的震惊,颠覆了我的认知,这才几百块的核心板,这么凶残吗?
下面是一个使用纯 Qt 和 FFmpeg 实现 Rockchip MPP (RKMPP) 硬件解码的示例代码。这个示例展示了如何初始化 FFmpeg 并使用 RKMPP 进行硬件解码。
准备工作
- 确保已安装 FFmpeg 并启用了 RKMPP 支持
- 确保 Qt 开发环境已配置好
- 需要在 Rockchip 平台上运行(如 RK3399, RK3588 等)
完整代码实现
[code]#include #include #include #include extern "C" {#include #include #include #include #include #include }class RKMPPDecoder {public: RKMPPDecoder() : fmt_ctx(nullptr), video_dec_ctx(nullptr), hw_device_ctx(nullptr) {} ~RKMPPDecoder() { cleanup(); } bool init(const QString &filePath) { // 注册所有 FFmpeg 组件 avformat_network_init(); avdevice_register_all(); // 打开输入文件 if (avformat_open_input(&fmt_ctx, filePath.toUtf8().constData(), nullptr, nullptr) < 0) { qWarning() codecpar->codec_id == AV_CODEC_ID_HEVC) { decoder = avcodec_find_decoder_by_name("hevc_rkmpp"); } else if (video_stream->codecpar->codec_id == AV_CODEC_ID_VP9) { decoder = avcodec_find_decoder_by_name("vp9_rkmpp"); } if (!decoder) { qWarning() codec_id); return false; } // 创建解码器上下文 video_dec_ctx = avcodec_alloc_context3(decoder); if (!video_dec_ctx) { qWarning() codecpar) < 0) { qWarning() |