Search This Blog

7/23/16

高品質影片壓縮:針對以 Intel® Atom™ 為基礎的 Android* 平台整合 H.265/HEVC 解決方案

高品質影片壓縮:針對以 Intel® Atom™ 為基礎的 Android* 平台整合 H.265/HEVC 解決方案

摘要

根據 International Data 公司調查結果,2012 年全球資料總量達到 2.7 ZB [1],比 2011 年增加了 48%,其中有 90% 是影片。影片應用程式佔用 66% 的網際網路資料總流量,且這項比例正快速增加。使用者希望觀看高品質影片,但對線上影片供應商而言,採購網路頻寬及儲存裝置的成本每年都在增加。影片內容供應商要如何因應大型資料來源的挑戰,以及持續增加的儲存需求?是否能用更小的頻寬實現高品質影片?名為高效率影片編碼 (H.265/HEVC) 的影片核心壓縮技術,可解決以上的挑戰。
像是 FFmpeg [2] 等開放原始碼社群,正在開發 H.265/HEVC 解碼器,但效能尚未達到商用功能水準。視駿 (Strongene Ltd.) [3] 是一家影片編解碼器核心技術商,已經開發出進階 H.265/HEVC 編碼器 / 解碼器解決方案,包括最佳化的 H.265/HEVC 編碼器 / 解碼器程式庫及展示程式碼,適用於以 Intel® Atom™ 處理器為基礎的 Android 平台。本文將使用 Intel Atom 處理器 Android 平板電腦 (代號 Bay Trail),介紹視駿 H.265/HEVC 解決方案。


視駿 H.265/HEVC 解決方案

評估影片標準時,通常使用效率和相容性標準。下圖顯示過去 20 年來的影片標準發展:


圖 1:影片標準歷史
H.265/HEVC 是 H.264/AVC (進階影片編碼) 的下一代編解碼器,兩者均由 ISO/IEC Moving Picture Experts Group [4] 及 ITU-T Video Coding Experts Group (VCEG) [5] 共同開發。新編解碼器的主要目標,是提供比 H.264 高出 50% 的壓縮效率,並支援最高 8192 x 4320 的解析度。
如圖 1 所示,從 MPEG-2 發展到 H.264/AVC 花了九年時間,因此在由 H.264/AVC 標準發展為 H.265/HEVC 標準的過程中,預期將遭遇更多挑戰。就 H.265/HEVC 而言,技術概念和產品實際品質之間仍然存在差距。不過 H.265/HEVC 在效率和相容性需求之間有效取得平衡,將影片標準推進到下個階段。

視駿 H.265/HEVC 解決方案使用 YASM [6] 組譯器、Intel® C++ 編譯器[7]、Intel® 串流 SIMD 延伸 (Intel® SSE) [8] 及 Intel® Threading Building Blocks (Intel® TBB) [9] 進行最佳化,並搭配OpenGL* [10] 用於渲染。這項解決方案直接將解碼的 YUV420 資料上傳至 GPU,完成 YUV 資料至 RGB 資料的編解碼作業,將 RGB 資料渲染至 LCD。這樣可減少 CPU 的工作負荷,提升效能。下圖顯示資料串流:


圖 2:渲染方法比較
在採用 Intel Atom 處理器的平板電腦 (代號 Bay Trail),使用 Intel® Graphics Performance Analyzers (Intel® GPA) [11] 工具完成分析後,播放 1080p HEVC 影片時,最佳化的 H.265/HEVC 解碼器重新整理頻率可達 90 FPS (每秒畫面更新慮)。如果播放 1080p 影片時,在 Bay Trail 平板電腦將重新整理頻率設定為 24 FPS,CPU 工作負荷就會低於 25%。因此視駿 H.265/HEVC 解決方案可以達到商用功能水準。

視駿 H.265/HEVC 解決方案的 API 分析

視駿 H.265/HEVC 解決方案 API 易於使用,可直接搭配或整合至 FFmpeg 開放原始碼之中。視駿針對 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);
說明:排清 (flush) 解碼器,清除緩衝區。

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=%d\n", ret);
exit(1);
}
if ( got_frame> 0 ) {
printf("decode frame, %dx%d, pts is %" PRId64 "\n", 
width, height, got_pts);
/* got frame, do something ... */
}
}


如何整合視駿 H.265/HEVC 解決方案

開發人員在開發 HEVC 影片播放器時,可輕鬆整合這五個函式。從視駿的網站 [12] 可以下載文件和範例程式碼。
開發人員可直接呼叫視駿 H.265/HEVC API 開發影片播放器,或是合併視駿 H.265/HEVC FFmpeg 修補程式,然後使用合併的 FFmpeg API 來開發影片播放器。下一段將分別介紹這兩種方法。


直接使用視駿 API 來開發影片播放器

開發人員可於視駿網站下載:
  • 範例程式碼 testdec.c/lenthevcdec.h
  • decoder: liblenthevcdec.so
  • documents: lenthevcdec_en.pdf, the 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。將輸出檔案及解碼器程式庫複製到 /data/hevc_test 之下的根 Android 裝置。
使用「export」指令設定 LD_LIBRARY_PATH 環境:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/hevc_test
之後您就可在 Android 裝置直接執行示範。


使用 FFmpeg 的 H.265/HEVC 修補程式開發影片播放器

事實上,大部分開發人員會使用開放原始碼 FFmpeg 開發影片播放器。視駿網站也提供 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
將下載的 headfile 及程式庫程式碼複製到 ~/ffmpeg-2.0.4/thirdparty
cp lenthevcdec.h lenthevcenc.h liblenthevcdec.so liblenthevcenc.so ~/ffmpeg-2.0.4/thirdparty
將下列設定檔案複製到 ~/ffmpeg-2.0.4,並新增「run」權限:
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」指令。現在應可成功合併 FFmpeg 及視駿 H.265/HEVC 修補程式。輸出的程式庫將位在~/FFmpeg2.0.4/android/x86/lib。您可以在影片播放器使用這些輸出程式庫。


結論

H.265/HEVC 標準在行動市場上日漸風行,這項新影片革命讓線上影片供應商、行動網際網路使用者、廣播 / 電視業者和用戶從中受益。為了達成文中介紹的成果,視駿 H.265/HEVC 解決方案已針對 Intel® Atom™ 處理器 Android 平台充分最佳化,所以快利用這款解決方案開發 HEVC 播放器吧!


相關文章

參考資料

[1] International Data Corporation (IDC). "Top 10 Prediction/IDC Predictions 2012: Competing for 2020." (2012 年十大預測 / IDC 預測:為 2020 年競爭) IDC 網站:http://cdn.idc.com/research/Predictions12/Main/downloads/IDCTOP10Predictions2012.pdf
[2] FFmpeg: http://www.ffmpeg.org/index.html
[3] 視駿 (Strongene Ltd.)http://xhevc.com/en/about/about-shijun.jsp
[4] ISO/IEC Moving Picture Experts Group (MPEG): http://mpeg.chiariglione.org/
[5] ITU-T Video Coding Experts Group (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): http://software.intel.com/zh-cn/c-compilers
[8] Intel® 串流 SIMD 延伸 (Intel® SSE):http://software.intel.com/zh-cn/articles/performance-tools-for-software-developers-intel-compiler-options-for-sse-generation-and-processor-specific-optimizations.
[9] Intel® Threading Building Blocks (Intel® TBB): /sites/default/files/m/d/4/1/d/8/tutorial.pdf
[10] OpenGL: http://www.opengl.org/
[11] Intel® Graphics Performance Analyzers (Intel® GPA): http://software.intel.com/zh-cn/articles/gpa-faq
[12] 視駿 (Strongene Ltd.) 下載:http://www.strongene.com/en/downloads/downloadCenter.jsp
[13] FFmpeg 下載:http://www.ffmpeg.org/olddownload.html


關於作者

Songyue Wang 是資深應用程式工程師,服務於 Intel 軟體與解決方案事業部 (SSG) 開發者關係部的 Intel® Atom™ 處理器行動功能 (Intel® Atom™ Processor Client Enabling) 團隊。Songyue 負責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

No comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...