meidasoup优先h264 baseline,让Android和ios优先利用硬件编解码
解决webrtc android sdk不支持华为麒麟手机h264硬件编码的bug
- 原因: webrtc android 硬件编码 google只承认高通和三星的264硬件编码。 如图
- 华为海思麒麟芯片的h264硬件编码器名称:OMX.hisi.video.encoder.avc
- 解决办法:
private boolean isHardwareSupportedInCurrentSdkH264(MediaCodecInfo info) { // First, H264 hardware might perform poorly on this model. if (H264_HW_EXCEPTION_MODELS.contains(Build.MODEL)) { return false; } String name = info.getName(); // QCOM H264 encoder is supported in KITKAT or later. return (name.startsWith(QCOM_PREFIX) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) // Exynos H264 encoder is supported in LOLLIPOP or later. || (name.startsWith(EXYNOS_PREFIX) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) // Huawei hisi H264 encoder || (name.startsWith("OMX.hisi.")); }
- 建议直接return true就得了,否则mtk ,rk等等芯片都得加。
就因为ios和mac只支持h264的硬编硬解,就只能选择h264。
支持全部5种profile。 其中kProfileBaseline优先:减少计算量和延迟。profile-level-id的计算方式如图:
profile | code | level | code | profile-level-id |
---|---|---|---|---|
kProfileBaseline | 4200 | kLevel3_1(31) | 1f | 42001f |
kProfileConstrainedBaseline | 42e0 | kLevel3_1(31) | 1f | 42e01f |
kProfileMain | 4d00 | kLevel3_1(31) | 1f | 4d001f |
kProfileHigh | 6400 | kLevel4_1(41) | 29 | 640029 |
kProfileConstrainedHigh | 640c | kLevel4_1(41) | 29 | 640c29 |
仅支持2两打包模式,”1”这种分片模式优先。RFC文档
{
kind : 'video',
mimeType : 'video/h264',
clockRate : 90000,
parameters :
{
'profile-level-id' : '42e01f', //5个可选值
'packetization-mode' : 1, //两可选值
'level-asymmetry-allowed' : 1,
'x-google-start-bitrate' : 1000
}
}
return {
CreateH264Format(H264Profile::kProfileBaseline, H264Level::kLevel3_1,"1"),
CreateH264Format(H264Profile::kProfileBaseline, H264Level::kLevel3_1,"0"),
CreateH264Format(H264Profile::kProfileConstrainedBaseline,H264Level::kLevel3_1, "1"),
CreateH264Format(H264Profile::kProfileConstrainedBaseline,H264Level::kLevel3_1, "0"),
CreateH264Format(H264Profile::kProfileMain,H264Level::kLevel3_1, "1"),
CreateH264Format(H264Profile::kProfileMain,H264Level::kLevel3_1, "0"),
CreateH264Format(H264Profile::kProfileHigh,H264Level::kLevel4_1, "1"),
CreateH264Format(H264Profile::kProfileHigh,H264Level::kLevel4_1, "0"),
CreateH264Format(H264Profile::kProfileConstrainedHigh,H264Level::kLevel4_1, "1"),
CreateH264Format(H264Profile::kProfileConstrainedHigh,H264Level::kLevel4_1, "0") };
}
### (四)各端h264编码的实现
### 参考