如何在Android应用程序中实现视频分辨率调整[页7]
来源:
时间: 2023-08-23
阅读:
scssprivate void encodeVideo(String outputVideoPath, int targetWidth, int targetHeight) {
try {
MediaCodec encoder = MediaCodec.createEncoderByType("video/avc");
MediaFormat format = MediaFormat.createVideoFormat("video/avc", targetWidth, targetHeight);
format.setInteger(MediaFormat.KEY_BIT_RATE, 2000000);
format.setInteger(MediaFormat.KEY_FRAME_RATE, 30);
format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Flexible);
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
encoder.start();
MediaMuxer muxer = new MediaMuxer(outputVideoPath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
int videoTrackIndex = muxer.addTrack(format);
muxer.start();
ByteBuffer[] inputBuffers = encoder.getInputBuffers();
ByteBuffer[] outputBuffers = encoder.getOutputBuffers();
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
long startTimeUs = -1;
boolean sawOutputEnd = false;
while (!sawOutputEnd) {
int inputIndex = encoder.dequeueInputBuffer(10000);
if (inputIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputIndex];
inputBuffer.clear();
// 在这里进行视频分辨率调整
adjustVideoResolution(inputBuffer, targetWidth, targetHeight);
long presentationTimeUs = (System.nanoTime() - startTimeUs) / 1000;
if (presentationTimeUs >= 0) {
encoder.queueInputBuffer(inputIndex, 0, inputBuffer.limit(), presentationTimeUs, 0);
}
}
int outputIndex = encoder.dequeueOutputBuffer(bufferInfo, 10000);
if (outputIndex == MediaCodec.INFO_TRY_AGAIN_LATER) {
continue;
} else if (outputIndex == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
format = encoder.getOutputFormat();
videoTrackIndex = muxer.addTrack(format);
muxer.start();
} else if (outputIndex >= 0) {
ByteBuffer outputBuffer = outputBuffers[outputIndex];
if ((bufferInfo.flags & MediaCodec.BUFFER_FLAG_CODEC_CONFIG) != 0) {
bufferInfo.size = 0;
感谢您的阅读,您可以将本文如何在Android应用程序中实现视频分辨率调整分享给您的朋友.