提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
注意:这篇文章仅针对firefly设备,我在rk3399上操作成功,理论上也适合rk356x或358x系列的,我手上没有这些设备,所以没法测试。
今天这个方法比较简单,使用起来也有些限制,但是对于很多人来说够用了。
Device:firefly rk3399
OS:Ubuntu-20.04,Ubuntu-18.04
一、准备一个firefly的rk3399
为什么一定要是firefly的呢?首先我手上只有firefly的设备,其次这个方法要使用firefly的软件源。
二、使用步骤
1.检查ffmpeg版本
没错,这个方法比直接使用mpp简单,它将mpp和ffmpeg结合了起来,操作也大大简化。前提是ffmpeg的版本必须是firefly编译的版本。
ffmpeg
ffmpeg version 4.2.4-1ubuntu1.0firefly3 Copyright (c) 2000-2020 the FFmpeg developers
ffmpeg版本带firefly
字样就是对的,如果你删除了firefly的源或者重新装过ffmpeg
就不行。如果你属于前者就跳过下一步,如果你属于后者不妨往下看:
1.查看源
ls /etc/apt/source.list.d/
cat /etc/apt/source.list
如果是Ubuntu-18.04那么源是作为文件存放在/etc/apt/source.list.d/
的,如果是Ubuntu-20.04源是作为条目放在/etc/apt/source.list
文件里面的。
deb http://wiki.t-firefly.com/firefly-ubuntu-repo focal main
如果你没有firefly的源,或者删掉了就重新加上就行了,切记备份数据可能覆盖!
2.查看解码器
确认ffmpeg支持我们需要的解码器:h264_rkmpp
和hevc_rkmpp
。
ffmpeg -decoders | grep rkmpp
V..... h264_rkmpp h264 (rkmpp) (codec h264)
V..... hevc_rkmpp hevc (rkmpp) (codec hevc)
V..... vp8_rkmpp vp8 (rkmpp) (codec vp8)
V..... vp9_rkmpp vp9 (rkmpp) (codec vp9)
查看下是否有我们需要的条目,正常情况下应该是上面的4种。
注意:只有支持上面的4种你才能硬解码,否则不支持这种方式!
3.解码代码
前提是上面的你处理好了,接下来就开始写解码代码了。
main.cpp
#include <iostream>
#ifdef __cplusplus
extern "C"
{
#endif
#