高质量视频压缩:为基于 Intel® Atom™ 的 Android* 平台集成 H.265/HEVC 解决方案






4.83/5 (4投票s)
本文介绍了 Strongene 的 H.265/HEVC 解决方案在基于 Intel Atom 处理器(代号为 Bay Trail)的 Android 平板电脑上的应用。
摘要
根据国际数据公司 (IDC) 的数据,2012 年全球总数据量达到 2.7 Zettabytes [1],比 2011 年增长了 48%。其中 90% 是视频。视频应用消耗了总互联网流量的 66%,并且这个数字还在快速增长。终端用户希望观看高质量的视频,但对于在线视频提供商来说,购买网络带宽和存储设备的成本每年都在不断增加。视频内容提供商如何应对海量数据源及其不断增长的存储需求带来的挑战?是否有可能以更小的带宽实现高质量视频?解决这些挑战的方法在于利用一种称为高效率视频编码 (H.265/HEVC) 的视频核心压缩技术。
像 FFmpeg [2] 这样的开源社区正在开发 H.265/HEVC 解码器,但其性能尚未达到商业应用的水平。视频编解码器核心技术提供商 Strongene Ltd. [3] 已经开发了先进的 H.265/HEVC 编码器/解码器解决方案,包括针对基于 Intel® Atom™ 处理器 Android 平台的优化 H.265/HEVC 编码器/解码器库和演示代码。本文介绍了 Strongene 的 H.265/HEVC 解决方案在基于 Intel Atom 处理器(代号为 Bay Trail)的 Android 平板电脑上的应用。
Strongene 的 H.265/HEVC 解决方案
为了评估一个好的视频标准,我们通常使用效率和兼容性标准。下表显示了过去 20 年视频标准的演进
H.265/HEVC 是 H.264/AVC(高级视频编码)的后继编解码器,两者均由 ISO/IEC 动态图像专家组 [4] 和 ITU-T 视频编码专家组 (VCEG) [5] 联合开发。新编解码器的主要目标是提供比 H.264 高 50% 的压缩效率,并支持高达 8192 x 4320 的分辨率。
如图 1 所示,从 MPEG-2 到 H.264/AVC 演进了 9 年,因此从 H.264/AVC 标准转向 H.265/HEVC 标准预计会遇到更多挑战。H.265/HEVC 在技术概念和实际产品质量之间仍然存在差距。然而,H.265/HEVC 在平衡效率和兼容性要求方面做得很好,这构成了下一代视频标准的基石。
Strongene 的 H.265/HEVC 解决方案使用 YASM [6] **汇编编译器、Intel® C++ 编译器** [7]、**Intel® 流式 SIMD 扩展 (Intel® SSE) [8] 和 Intel® 线程构建块 (Intel® TBB) [9] 进行了优化,并使用 OpenGL* [10] 进行渲染。通过将解码后的 YUV420 数据直接上传到 GPU,完成 YUV 数据到 RGB 数据的转码,并将 RGB 数据渲染到 LCD。这降低了 CPU 的工作负载并提高了性能。数据流如下图所示
在基于 Intel Atom 处理器的平板电脑(代号为 Bay Trail)上,经过 Intel® 图形性能分析器 (Intel® GPA) [11] 工具的测试,在播放 1080p HEVC 视频时,优化的 H.265/HEVC 解码器刷新率可达 90 FPS(每秒帧数)。如果我们设置 Bay Trail 平板电脑在播放 1080p 视频时刷新率为 24 FPS,CPU 工作负载将低于 25%。因此,**Strongene 的 H.265/HEVC 解决方案达到了商业应用**能力。
Strongene 的 H.265/HEVC 解决方案的 API 分析
Strongene 的 H.265/HEVC 解决方案的 API 可以轻松地直接使用,或集成到 FFmpeg 开源项目中。Strongene 为 H.265/HEVC 解码器定义了五个函数和一个结构,如下所示
结构
lenthevcdec_ctx;
描述: 解码器的上下文,用于标识不同的解码器。
函数
1. Unit32_t lenthevcdec_version(void);
描述: 获取当前库的 API 版本。
2. lenthevcdec_ctx lenthevcdec_create(int threads, int comoatibility, void* reserved);
描述: 使用指定参数创建解码器。
示例
lenthevcdec_ctx ctx;
ctx = lenthevcdec_create(2, 0x7fffffff, NULL);
if ( NULL == ctx ) {
fprintf(stderr, "call lenthevcdec_create failed!n");
exit(1);}
3. Void lenthevcdec_destroy(lenthevcdec_ctx ctx);
描述: 关闭解码器并释放所有资源。
4. Void lenthevcdec_flush(lenthevcdec_ctx ctx);
描述: 刷新解码器并清除缓冲区。
5. int LENTAPI lenthevcdec_decode_frame( lenthevcdec_ctx ctx, const void* bs, intbs_len, int64_tpts, int* got_frame, int* width, int* height, intline_stride[3], void* pixels[3], int64_t* got_pts);
描述: 解码一帧。将一帧的比特流输入解码器,如果解码器已解码一帧,则获取该帧的像素数据。
示例
int32_t got_frame, width, height, stride[3], ret, i;
uint8_t* pixels[3];
int64_tpts, got_pts;
for ( i = 0; i <au_count; i++ ) {
pts = i * 40;
got_frame = 0;
ret = lenthevcdec_decode_frame(ctx, au_buf + au_pos[i], au_pos[i + 1] -
au_pos[i], pts,&got_frame, &width, &height, stride, (void**)pixels,
&got_pts);
if ( ret < 0 ) {
fprintf(stderr,
"calllenthevcdec_decode_frame failed! ret=%dn", ret);
exit(1);
}
if ( got_frame> 0 ) {
printf("decode frame, %dx%d, pts is %" PRId64 "n",
width, height, got_pts);
/* got frame, do something ... */
}
}
如何集成 Strongene 的 H.265/HEVC 解决方案
开发人员在开发 HEVC 视频播放器时可以轻松集成这五个函数。文档和示例代码可在 Strongene 的下载网站 [12] 上获取。
开发人员可以直接调用 Strongene 的 H.265/HEVC API 来开发他们的视频播放器,或者他们可以合并 Strongene 的 H.265/HEVC 补丁到 FFmpeg 中,然后使用合并后的 FFmpeg API 来开发他们的视频播放器。接下来的段落将分别介绍这两种方法。
直接使用 Strongene 的 API 开发视频播放器
在 Strongene 网站上,开发人员可以下载
- 示例代码
testdec.c/lenthevcdec.h
- 解码器:
liblenthevcdec.so
- 文档:
lenthevcdec_en.pdf, Makefile
将示例代码复制到 Ubuntu* 构建机器上的独立文件夹中
wangsy@ubuntu:~/Desktop cp testdec.c Makefille ~/hevc/src wangsy@ubuntu:~/Desktop cp lenthevcdec.h ~/hevc/include wangsy@ubuntu:~/Desktop cp liblenthevcdec.so ~/hevc/lib/Android_x86
使用“export”命令设置 ANDROID_NDK_HOME
环境变量
export ANDROID_NDK_HOME= $ ANDROID_NDK_HOME :/~/android-ndk-r9c
然后运行“make”命令。
然后构建示例代码并获取输出文件 testdec。将输出文件和解码器库复制到根 Android 设备下的 /data/hevc_test 目录中。
使用“export”命令设置 LD_LIBRARY_PATH
环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/hevc_test
然后您就可以直接在 Android 设备上运行演示了。
使用 H.265/HEVC 补丁 for FFmpeg 开发视频播放器
事实上,大多数开发人员将使用开源 FFmpeg 来开发他们的视频播放器。Strongene 的 网站也提供了 FFmpeg 的补丁,可以从以下地址下载:lentoid_ffmpeg2.0_patch_2014_01_23_new_encoder_interface.patch
要合并此补丁,您还应该下载并解压 FFmpeg 2.0.4 版本 [13]。然后添加补丁
wangsy@ubuntu:~/ffmpeg-2.0.4 patch –p1 < ./lentoid_ffmpeg2.0_patch_2014_01_23_new_encoder_interface.patch
将下载的 **头文件** 和库代码复制到 **~/ffmpeg-2.0.4/thirdparty**
cp lenthevcdec.h lenthevcenc.h liblenthevcdec.so liblenthevcenc.so ~/ffmpeg-2.0.4/thirdparty
将以下配置文件复制到 ~/ffmpeg-2.0.4 并添加“执行”权限
wangsy@ubuntu: cp build_x86.sh ~/ffmpeg-2.0.4 wangsy@ubuntu: sudo chmod a+x ~/ffmpeg-2.0.4/build_x86.sh
运行配置文件“build_x86.sh”(内嵌在上面),然后运行“**make**”和“**make install**”命令。现在应该可以成功构建集成了 Strongene 的 H.265/HEVC 补丁的 FFmpeg。输出的库将在 **~/FFmpeg2.0.4/android/x86/lib** 目录下。您可以在您的视频播放器中使用这些输出库。
摘要
H.265/HEVC 标准在移动市场上的普及度越来越高。在线视频提供商、移动互联网用户以及广播/电视运营商都将是这场新的视频革命的受益者,用户也不例外。为了实现本文所述的成果,Strongene 的 H.265/HEVC 解决方案已针对基于 Intel® Atom™ 处理器的 Android 平台进行了全面优化,因此请毫不犹豫地采用他们的解决方案来开发 HEVC 播放器。
相关文章
- 在基于 Intel® Atom™ 处理器的平台上优化 H.265/HEVC 解码器:http://software.intel.com/en-us/articles/optimizing-h265hevc-decoder-on-intel-atom-processor-based-platforms
- 面向 Intel® 架构平台的实时端到端 H.265/HEVC 解决方案:https://software.intel.com/en-us/android/articles/real-time-end-to-end-h265hevc-solution-for-intel-architecture-based-platforms
参考文献
[1] 国际数据公司 (IDC)。“2012 年十大预测/IDC 预测。”IDC 网站:http://cdn.idc.com/research/Predictions12/Main/downloads/IDCTOP10Predictions2012.pdf
[2] FFmpeg:https://ffmpeg.net.cn/index.html
[3] Strongene Ltd.:http://xhevc.com/en/about/about-shijun.jsp
[4] ISO/IEC 动态图像专家组 (MPEG):http://mpeg.chiariglione.org/
[5] ITU-T 视频编码专家组 (VCEG):http://www.itu.int/en/ITU-T/studygroups/com16/video/Pages/default.aspx
[6] Yasm 模块化汇编器项目:http://yasm.tortall.net/
[7] Intel® C++ 编译器 (Intel® ICC):https://software.intel.com/en-us/c-compilers
[8] Intel® 流式 SIMD 扩展 (Intel® SSE):https://software.intel.com/en-us/articles/performance-tools-for-software-developers-intel-compiler-options-for-sse-generation-and-processor-specific-optimizations.
[9] Intel® 线程构建块 (Intel® TBB):https://software.intel.com/sites/default/files/m/d/4/1/d/8/tutorial.pdf
[10] OpenGL:http://www.opengl.org/
[11] Intel® 图形性能分析器 (Intel® GPA):https://software.intel.com/en-us/articles/gpa-faq
[12] Strongene Ltd. 下载:http://www.strongene.com/en/downloads/downloadCenter.jsp
[13] FFmpeg 下载:https://ffmpeg.net.cn/olddownload.html
关于作者
王松岳是 Intel 软件与解决方案事业部 (SSG) 开发者关系部 Intel® Atom™ 处理器移动赋能团队的高级应用工程师。王松岳负责 Intel Atom 处理器上的 Android 应用赋能。他专注于 Bay Trail 平台上多媒体性能的优化,与中国地区最受欢迎的在线视频提供商紧密合作,为 x86 平台的 Android 实现 H.265/HEVC 编码器和解码器解决方案以及 Intel® 无线显示差异化功能。
[1]性能测试中使用的软件和工作负载可能已针对仅在 Intel 微处理器上进行性能优化。性能测试(如 SYSmark* 和 MobileMark*)是使用特定的计算机系统、组件、软件、操作和功能测量的。任何这些因素的更改都可能导致结果有所不同。您应该参考其他信息和性能测试,以帮助您全面评估您打算购买的产品,包括该产品与其他产品结合使用时的性能。
配置:Intel® Atom™ 处理器 Bay Trail 平板电脑 FFRD8,配备 2GB RAM 和 Android 4.4,解码帧率。更多信息请访问 http://www.intel.com/performance