当前位置:网站首页> 开发 > 多媒体 > 浏览文章

如何在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应用程序中实现视频分辨率调整分享给您的朋友.

相关内容