#2358·javacv

使用 frag_keyframe+empty_moov 与 FFmpegFrameRecorder 后, MP4 文件在崩溃后仍无法播放

作者: djkdeveloper创建于 2025年9月26日更新于 2025年12月18日
标签help wantedquestion

目前我使用以下代码来将视频录制为 MP4 文件: String outputFile = outputDir + File.separator + "video_" + new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()) + ".mp4";

recorder = new FFmpegFrameRecorder(outputFile, width, height, audioChannels); recorder.setFormat("mp4"); recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC); recorder.setSampleRate(grabber.getSampleRate()); recorder.setFrameRate(grabber.getFrameRate() <= 0 || grabber.getFrameRate() > 120 ? 25 : grabber.getFrameRate()); recorder.setAudioChannels(audioChannels); recorder.start();

问题在于,如果在录制过程中服务崩溃,生成的 MP4 文件将无法播放。从我的研究中得知,这是因为 MP4 moov 原子被写入文件的末尾。如果进程崩溃,moov 原子将永远不会被写入,这会使文件损坏。

内容来源: bytedeco/javacv