i.MX RT10xx H264解码之情之所向OpenH264
各位看官,欢迎再再次来到加油站,今天小编继续为大家带来i.MX RT10xx视频软解码之情之所向OpenH264。
爱的初体验章节提到了FFMPEG,在多媒体处理方面有着无可撼动的江湖大佬地位,但是最后i.MX RT为什么又钟情OpenH264了呢?渣男?海王?不存在的!只是年少不知BSD license商用香!
OpenH264 是思科公司发布的一个开源的H.264 编码和解码器,它采用简化BSD许可证发布。
OpenH264:c++实现,需要操作系统,Profile只支持到baseline, level 5.2, 设计面向实时编码和解码视频的应用程序,例如WebRT。
虽然它不如FFMPEG功能强大又齐全,但是娇小可爱也不失为一种美。
下面跟着小编走入OpenH264,感受她的魅力。
OpenH264简约小巧,不需要FFMPEG那种稍显复杂的剪切,只需将“codec”文件夹下所有解码相关的函数提取出来。
移植需要操作系统的支持,而i.MX RT10xx官方SDK中自带Freertos的demo。
一:解码流程
工程解码流程和FFMPEG工程类似,但采用了双线程,读线程负责从microSD读取H264数据到块blk,并通过“消息队列”向解码线程发送数据块并解码。
二:内存占用
i.MX RT1060和i.MX RT1170上都移植了OpenH264的解码实现,内存占用情况如下:
从内存占用可以看到,FFmpeg中h264解码的code data明显较大,原因一是openh264编码本身就是经过剪裁的小型h264编解码器,比如仅支持baseline, slice级别的多线程,编码格式yuv420->h264,二是FFmpeg剪裁过程中仍有冗余。
三:性能分析
经过两组不同大小的视频帧测试结果如下:
表格里的数据是在i.MX RT1060板子上测试解码加显示的帧率,从结果看,OpenH264解码性能和ffmpeg有一定差距。
友情提示:恩智浦官网中最新版的SDK已经集成了OpenH264解码,位于“display_example”中,拿到代码的小伙伴可以个性化优化代码:如将优化等级开到最大,配置ITCM/DTCM大小。小编建议尽可能大的配置ITCM,并将”codec”代码中生成的”.o”放入其中。
四:结论
H264解码对CPU性能要求高,数据量大,对存储器性能大小有要求。
OpenH264:c++实现,需要操作系统,Profile只支持到baseline, level 5.2。
FFmpeg:剪裁灵活,功能强大,可裸机运行,license商用限制。
H264的视频解码在i.MX RT上的介绍暂时告一段落,我们有机会再见。
|