一、移動端OS角度硬解能力支援情況
Android
4.1.2以前: 不支援
4.1.2-5.0 Java側MediaCodec
5.0以上 Java側MediaCodec,C側nativeMediaCodec
IOS
8.0以前 不支援硬編硬解,僅軟編軟解
8.0及以後 支援硬編硬解VideoToolboxDecoder
二、開源庫角度
WebRTC
檢測是否支援硬解,如果支援,使用OpenGL建立SurfaceView,設定給硬解
VLC
4.3及以上使用MediaCodec硬解
[4.1-4.3) 檢測是否支援硬解
三、自研播放器&采集釋出硬編解政策選擇
【方案一】
【方案二】:僅判斷作業系統,OS<5.0使用ffmpeg軟解;OS>5.0使用ndkMediaCodec硬解碼
【方案三】:完美方案:先判斷作業系統版本:
小于4.1.2使用ffmpeg軟解;
[4.1.2,4.3)優先使用java層mediaCodec硬解,同時檢測硬解效果是否達标,如果不達标切換為軟解;
[4.3,5.0)使用java層mediaCodec硬解;
[5.0,+∞),使用C層的ndkMediaCodec硬解;
因為4.3版本以後,mediaCodec硬解能力作為平台相容性測試CTS(compatility test suit)必備基礎,是以4.3及以上無需再檢測硬解是否達标。
結論:鑒于目前軟解效果也不錯,是以我們使用方案二簡單處理,後期看效果再判斷是否啟動方案三優化。