如何在原生Android上检测WebRTC支持的视频编解码器

时间:2018-03-20 15:24:48

标签: android webrtc

我们有一个使用WebRTC的原生Android应用,我们需要找出主机设备支持哪些视频编解码器。 (始终支持VP8,但H.264受具有兼容芯片组的设备的限制。)

我们的想法是创建一个商品并从SDP获得支持的视频编解码器。我们可以在Web应用程序中执行以下操作:

const pc = new RTCPeerConnection();

if (pc.addTransceiver) {
    pc.addTransceiver('video');
    pc.addTransceiver('audio');
}

pc.createOffer(...);

有没有办法在Android上做类似的事情?非常重要的是,我们不需要请求相机访问权来创建优惠。

2 个答案:

答案 0 :(得分:2)

创建一个VideoEncoderFactory对象,然后调用getSupportedCodecs()。这将返回可以使用的编解码器列表。确保首先创建PeerConnectionFactory。

PeerConnectionFactory.InitializationOptions initializationOptions =
            PeerConnectionFactory.InitializationOptions.builder(this)
                    .setEnableVideoHwAcceleration(true)
                    .createInitializationOptions();
PeerConnectionFactory.initialize(initializationOptions);

VideoEncoderFactory videoEncoderFactory = 
new DefaultVideoEncoderFactory(eglBase.getEglBaseContext()
            , true, true);

for (int i = 0; i < videoEncoderFactory.getSupportedCodecs().length; i++) {
    Log.d("Codecs", "Supported codecs: " + videoEncoderFactory.getSupportedCodecs()[i].name);
}

答案 1 :(得分:0)

我认为这就是你要找的东西:

private static void codecs() {
    MediaCodecInfo[] codecInfos = new MediaCodecList(MediaCodecList.ALL_CODECS).getCodecInfos();
    for(MediaCodecInfo codecInfo : codecInfos) {
        Log.i("Codec", codecInfo.getName());
        for(String supportedType : codecInfo.getSupportedTypes()){
            Log.i("Codec", supportedType);
        }
    }
}

您可以查看https://developer.android.com/reference/android/media/MediaCodecInfo.html

上的示例