ARM技术论坛
直播中

ALSET

3年用户 269经验值
擅长:可编程逻辑,电源/新能源,嵌入式技术,处理器/DSP
私信 关注
[经验]

【触觉智能 Purple Pi开发板试用】C/C++开发环境构建与编译ffmpeg

转码输出的视频文件

【触觉智能 Purple Pi开发板试用】C/C++开发环境构建与编译ffmpeg
大信(QQ:8125036)

        在发烧友论坛上申请到一款Purple Pi开发板试用,它具有音视频解码的能力,这让我比较感兴趣,所以特地的测试一下他的音视频功能,它支持ffmpeg的移植,因此我尝试来编译和开发ffmpeg工具以及基于它的应用。以下是研究和测试的一些学习记录。
1.png

一、开发资料获取
       根据它的文档,找到Purple Pi开发板的官网,其在线开发文档里有详细的系统软件以及相关说明。地址为:
http://doc.industio.com/docs/ssd20x-system/page_0
      打开其网盘后,可以看到下载资料的文件结构,其中软件开发相关的资料在source目录下,只要把这个目录的内容下载下来就可以进行软件开发了。
IDO-SSD20X资料链接如下:
链接:https://pan.baidu.com/s/1f1cRFJxWwC-taGAS-nVnmQ
提取码:
n8pu
2.png
    文件比较大,通过百度网盘客户端在夜间下载经过一晚上的拉取,所有资料已经下载到本地硬盘上了。

二、开发环境配置

     开发主机环境是在ubuntu18.4上,笔者使用vmware虚机的方式,从之前安装备份好的ubuntu18.4镜像里,复制一个出来,启动vmware启动虚机就可以直接使用。
3.png
    在虚机上把上面下载文件的目录通过共享文件夹的方式,共享到Ubuntu系统里。
把百度云盘下载目录挂载到Ubuntu系统里,然后把下载的文件复制到工作目录里。然后在Ubuntu系统里进行文件解压和安装。
    注意文件体积都比较大,大概有3~4个G,所以虚拟机要留有足够的空间,避免复制,解压失败。
4.png
解压gcc-arm tool :
tar -zxfgcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf.tar.gz gcc-arm-8.2/
解压 SDK 到 purple_sdk 目录下
5.png
进入gcc-arm-toolchaiin 里看一下,编译工具文件组织结构如下:
6.png
查看一下交叉编译器的版本,如下:
7.png
再写一个简单的交叉编译环境设置脚本: env.sh 如下:
8.png
三、测试编译器和SDK安装正确
       在下载安装编译器和SDK完成之后,需要做个简单的测试。既然这款板子名字叫PurplePi, 那么就写一个计算π的算法代码,这里使用莱布尼茨无穷级数的算法来计算圆周率。用来测试编译器的编译和SDK的配置是否正确。计算圆周率π  的代码如下,也可以用这个代码在其它开发板上编译运行,比较运行时间差异,就可以得到不同硬件相对计算速度的一个定性的对比结果。
  1. #include
  2. #include

  3. int main(int argc, char *argv[])
  4. {
  5.    double pi;
  6.    long i;
  7.    long n=500000000; //迭代5亿次,开始可以小一点,避免运行等待时间太长
  8.    int flg=1;
  9.    
  10.    pi=0.0;

  11.    for(i=0;i
  12.    {
  13.      pi = pi+4.0*flg/((2*i+1));
  14.      flg = flg * -1;
  15.    }

  16.    printf("PI=%fn",pi);
  17.    return 0;
  18. }
      编辑完代码后,写一个简单的 makefile 文件,内容也很简单,就是编译上面的测试程序。
然后开始进行编译,并且检查编译输出的文件是否文ARM32 的执行文件,最后将文件使用scp 命令传输到开发板上.
9.png
再进入开发板上运行,运行大概10秒左右得到了运算结果:PI=3.141593, 感兴趣的同学可以对代码优化,提高计算精度和输出结果的长度 :-)
10.png
四、下载和编译ffmpeg源码工程
       验证开发板的编译环境正确后,开始进入目标工程的编译和测试。首先拉取ffmpeg源码,这里并没有拉取最新版本的ffmpeg, 应该是考虑到和板Linux系统适配的版本,拉取命令如下:
拉取的速度很快,拉取完后进入工程目录,查看内容如下:
11.png
      然后进入ffmpeg目录下,开始进行编译配置,在配置前,运行source ./env.sh 切换到开发板目标编译环境。
第一次接用默认的配置来执行,发现编译后缺少很多组件和库,因此需要根据要求我们自行修改 config_for_ssd20x.sh配置脚本,打开所需的组件配置开关,比如:开发设备调试信息支持,编码器支持,输入输出设备等支持等。最后configure配置脚本修改如下:
12.png
    再执行:
     ./ config_for_ssd20x.sh
    即可产生Makefile编译文件。在执行配置脚本时,会输出所有配置项,包括支持的格式,支持流协议,支持的过滤器,编解码器等。这些信息很重要,通过这些配置信息可以看到最后编译的ffmpeg支持了哪些模块组件,以后基于ffmpeg的开发也需要参考这些信息。因此这里记录了配置脚本执行的输出截图(输出比较长,这里分次拼图而成):
13.png
然后开始编译:
      make –j4
14.png
15.png
       整个编译大概需要15分钟,编译完成后是编译出了ffmpeg的静态库和动态库文件,有了这些库文件,就形成了ffmpeg的SDK,然后就可以编译ffmpeg的命令行和其它的ffplay, ffprob等应用工具。
      在说明文档中主要是编译 ffmplay和appsspayer,  因为目前暂时没有这个开发板MIPI屏的转接板,所以这里就直接跳过这个播放软件的编译,而去直接编译ffmpeg命令工具,进入fftools目录下,可以看到ffmpeg.c ,然后编写一个Makefile 文件,主要就是编译ffmpeg.c 和 链接ffmpeg 的一堆库文件,然后就可以执行编译,这个命令行也可以在ffmpeg编译配置时,选择自动编译出。这里为了验证ffmpeg库编译是否正确,因此采取的是分开单独编译ffmpeg命令行程序。
       可以检查编译生成的目标文件 ffmpeg 如下:
16.png
       然后把ffmpeg 与 动态库copy到开发板上,ffmpeg 复制到根目录下,动态库复制到开发板 /usr/lib 下,操作如下图命令:
17.png
       然后在转到开发板上运行 ffmpeg, 可以看到输出了ffmpeg的版本和License申明信息,以及各个库的版本信息,ffmpeg在PurplePi上成功的运行起来了!
18.png
五、在板上测试编译的ffmpeg软件
       把编译好的ffmpeg文件,以及依赖的动态库文件全部copy到目标开发板上,然后可以测试ffmpeg的命令了。因为暂时没有显示屏,所以这里主要测试测试了ffmpeg对视频文件转码,以及视频解码成为图片的命令:
把一个采集到的 yuv 摄像头数据文件,进行h264编码,生成test.264文件
./ffmpeg -s 640x480 -r 25 -pix_fmt yuv420p -f rawvideo -itest.yuv -c:v libx264 -preset slow -b:v 2M test.264
把h264编码数据文件解码成为 YUV420的数据文件
./ffmpeg -i test.264 -vsync 0 detest.yuv
把 h264数据文件加复用,转成mp4格式,次文件可以在PC上直接播放了
./ffmpeg -i output3.264 -vsync 0 output3.mp4
把mp4视频不重新编码,转成avi格式
./ffmpeg -i output3.MP4 -vcodec copy output.avi
从.mp4视频中0.001秒处截取一张图,转换为352x240大小的格式为jpg的图片:
./ffmpeg -i output3.MP4 -y -f image2 -t 0.001 -s 352x240 a.jpg
19.jpg

六、PurplePi上C/C++开发总结

       通过在Ubuntu上构建PurplePiC/C++开发环境,可知此开发板是一个标准的ARMv7的开发环境,没有什么特殊的配置和依赖。并且随开发板厂商给出了板上运行系统得所有源码,包括boot,kernel,rootfs 和一些常用的app软件,因为它是基于armLinux,所以意味着所有验证过的amr-linux上的软件都能够在板上运行,这使得系统的适用场景非常广泛而且提供了非常宽的系统裁剪的可能性,给开发应用者提供的任意发挥的空间。

      通过编译ffmpeg过程,可以看到非常顺利,简便。虽然系统的脚本里没有直接提供编译ffmpeg的代码,但根据在其它平台上编译的步骤,也可以跟容易的编写makefile文件,来编译自己的工程。
Ffmpeg是一个强大的音视频工具,也是一个音视频库,支持非常多的音视频处理和应用。通过ffmpeg在板上的运行,也体验到该开发板上运行音视频处理软件的性能。

更多回帖

发帖
×
20
完善资料,
赚取积分