bytedeco / javacv

Java interface to OpenCV, FFmpeg, and more
Other
7.41k stars 1.57k forks source link

How can I fix it, please #2088

Closed SanBeHappy closed 6 months ago

SanBeHappy commented 10 months ago

W Error: [amediacodec @ 0xeb8c5aa0] android.media.MediaCodec$CodecException: Error 0x80001001 W Error: [h264_mediacodec @ 0xeb4814b0] MediaCodec configure failed, Generic error in an external library I onLastStrongRef automatically unlinking death recipients: android.media.IResourceManagerService W org.bytedeco.javacv.FFmpegFrameRecorder$Exception: avcodec_open2() error -542398533: Could not open video codec. (For more details, make sure FFmpegLogCallback.set() has been called.) W at org.bytedeco.javacv.FFmpegFrameRecorder.startUnsafe(FFmpegFrameRecorder.java:791) W at org.bytedeco.javacv.FFmpegFrameRecorder.start(FFmpegFrameRecorder.java:437) W at com.miao.recordandroid7demo.Util.createMp4(Util.java:41) W at com.miao.recordandroid7demo.MainActivity.lambda$onClick$1(MainActivity.java:211) W at com.miao.recordandroid7demo.MainActivity$$ExternalSyntheticLambda1.run(Unknown Source:2) W at java.lang.Thread.run(Thread.java:923)

SanBeHappy commented 10 months ago

This is my code:

public static void createMp4(String mp4SavePath, Map<Integer, File> imgMap, int width, int height, CompleteListener listener) throws FrameRecorder.Exception { FFmpegLogCallback.set(); FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(mp4SavePath, width, height); recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); recorder.setFrameRate(25); recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P); recorder.setFormat("mp4"); try { recorder.start(); // Java2DFrameConverter converter = new Java2DFrameConverter(); Log.d("test","imgMap.size() = " + imgMap.size()); for (int i = 0; i < imgMap.size(); i++) { if(imgMap.get(i) == null){ continue; } IplImage image = cvLoadImage(imgMap.get(i).getAbsolutePath());// OpenCVFrameConverter.ToMat converterToMat = new OpenCVFrameConverter.ToMat(); Frame frame = converterToMat.convert(image);

            for(int j = 0; j < 30; j++){
                recorder.record(frame);
            }

        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        recorder.stop();
        recorder.release();
        if(listener != null){
            listener.onComplete(mp4SavePath);
        }
    }
}
saudet commented 10 months ago

@tmm1 Any ideas?

saudet commented 6 months ago

Duplicate of #2046