bytedeco/javacv

JVM crash when set FFmpegFrameGrabber's image mode to RAW

開放

#2,351 建立於 2025年9月6日

 (0 則留言) (0 個反應) (0 位負責人)Java (1,583 個分叉)batch import
help wantedquestion

倉庫指標

星標
 (6,985 顆星)
PR 合併指標
 (30 天內沒有已合併 PR)

描述

I set FFmpegFrameGrabber image mode to raw to avoid recorder call sws_scale when input video's pixel format is yuv420. When i execute code below, the jvm crashed when calling avcodec_send_frame in recordImage function of class FFmpegFrameRecorder. Is there something wrong with my code or is it a limitation of javacv?

        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(src);
        grabber.setImageMode(FrameGrabber.ImageMode.RAW);
        grabber.start();

        FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(dst, grabber.getImageWidth(), grabber.getImageHeight()
            , grabber.getAudioChannels());

        recorder.setFormat("hls");
        recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
        recorder.setFrameRate(grabber.getFrameRate());
        recorder.setPixelFormat(AV_PIX_FMT_YUV420P); 
        recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);
        recorder.setSampleFormat(avutil.AV_SAMPLE_FMT_FLTP);
        recorder.setSampleRate(grabber.getSampleRate());

        recorder.setVideoOption("crf", "24");
        recorder.setVideoOption("preset", "veryfast"); 

        recorder.setOption("hls_list_size", "0");
        recorder.setOption("hls_time", "15");
        recorder.setOption("hls_playlist_type", "vod");

        recorder.start();

        try {
            Frame frame;

            while ((frame = grabber.grab()) != null) {
                if (frame.type == Frame.Type.VIDEO || frame.type == Frame.Type.AUDIO) {
                    recorder.record(frame);
                }
            }

            System.out.println(System.currentTimeMillis() - begin);
        } finally {
            grabber.close();

            recorder.close();
        }

hs_err_pid63236.log

貢獻者指南