How to change MediaCodec encoding bitrate on the f

2019-02-20 00:06发布

问题:

I want to change the encoding bitrate including H264 and AAC by Android MediaCodec dynamically , according to the current network.

How to update the encoding bitrate in Android MediaCodec dynamically ?

PS: I found PARAMETER_KEY_VIDEO_BITRATE and setParameters is available on API 19

PARAMETER_KEY_VIDEO_BITRATE

Change a video encoder's target bitrate on the fly. The value is an Integer object containing the new bitrate in bps.

Constant Value: "video-bitrate"

setParameters

Communicate additional parameter changes to the component instance.

Throws IllegalStateException if in the Uninitialized state.

Is there any way to do it under API 19 ?

回答1:

Stopping the Codec, setting the parameters and restarting it worked for me.



回答2:

Your format needs to support adaptive bitrate. Eg. I was able to set the bitrate using the following. Make sure you're in api 19 or above though.I was encoding the H264 frames into an FLV container.

Bundle bitrate = new Bundle(); bitrate.putInt(MediaCodec.PARAMETER_KEY_VIDEO_BITRATE, targetBitrate); mEncoder.setParameters(bitrate);