媒體轉碼器

從 Android 10 (API 級別 29) 以上版本開始,MediaCodecInfo 中提供的方法可揭露編解碼器的更多資訊:

isSoftwareOnly()
如果編解碼僅在軟體中執行,則傳回 true。軟體編碼器無法保證轉譯效能。
isHardwareAccelerated()
如果轉碼器透過硬體加速,則傳回 true。
isVendor()
如果裝置供應商提供轉碼器,則傳回 true,Android 平台提供 false 時則傳回 false。
isAlias()
MediaCodecList 可能會包含使用替代編碼器名稱/別名 (alias) 的相同基礎編碼器的其他項目。如果這個項目中的編解碼是其他編解碼的別名,這個方法會傳回 true。

此外,MediaCodec.getCanonicalName() 會針對透過別名建立的編解碼,傳回基礎編解碼名稱。

成效重點

效能點代表轉碼器以特定高度、寬度和畫面更新率算繪影片的能力。舉例來說,UHD_60 效能點代表以每秒 60 張影格呈現的超高畫質影片 (3840x2160 像素)。

MediaCodecInfo.VideoCapabilities.getSupportedPerformancePoints() 方法會傳回編解碼器可轉譯或擷取的 PerformancePoint 項目清單。

您可以呼叫 PerformancePoint.covers(PerformancePoint),檢查特定 PerformancePoint 是否涵蓋另一個 PerformancePoint。舉例來說,UHD_60.covers(UHD_50) 會傳回 true。

系統會為所有硬體加速轉碼器提供效能點清單。如果轉碼器連最低標準的效能點都達不到,這份清單可能會是空白。

請注意,如果裝置已升級至 Android 10 (API 級別 29) 以上版本,但未更新供應商映像檔,則不會有效能點資料,因為這類資料來自供應商 HAL。在這種情況下,getSupportedPerformancePoints() 會傳回空值。