Repository metrics
- Stars
- (6,985 stars)
- PR merge metrics
- (No merged PRs in 30d)
Description
I have an issue where the audio gets out of sync with the video farther into the video. I have tried many different things to try and fix it and I am at a loss. Anyone that can help I would appreciate it
JAVA- java version "1.8.0_25" Java(TM) SE Runtime Environment (build 1.8.0_25-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
FFMPEG- ffmpeg version 2.4.1 Copyright (c) 2000-2014 the FFmpeg developers built on Sep 23 2014 08:09:44 with llvm-gcc 4.2.1 (LLVM build 2336.11.00)
Here is the error I get at the end of the process:
[h264 @ 0x7ff6c4236000] error while decoding MB 25 31, bytestream -18
[h264 @ 0x7ff6c4236000] Cannot use next picture in error concealment
[h264 @ 0x7ff6c4236000] concealing 1144 DC, 1144 AC, 1144 MV errors in P frame
Here is the code use: As you can see I have tried many different things, moved things around, played with diff settings, etc.
The command line ffmpeg example is: command line uses the following switches without any issue at all.
"-i", url,
"-bsf:a", "aac_adtstoasc",
"-vcodec", "copy",
"-c", "copy",
HLS is the HTTP Address
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(HLS);
grabber.start();
//grabber.setTimestamp((1 * 60 + 30) * 1000000);
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(output, grabber.getAudioChannels());
recorder.setFrameRate(grabber.getFrameRate());
recorder.setFormat("mp4");
recorder.setImageHeight(grabber.getImageHeight());
recorder.setImageWidth(grabber.getImageWidth());
recorder.setSampleRate(grabber.getSampleRate());
recorder.setVideoBitrate(grabber.getVideoBitrate());
//recorder.setInterleaved(false);
recorder.setVideoCodec(AV_CODEC_ID_H264);
//recorder.setVideoCodecName("x264");
recorder.setAudioCodec(grabber.getAudioCodec());
recorder.setAudioBitrate(grabber.getAudioBitrate());
recorder.setAudioChannels(grabber.getAudioChannels());
/*
command line
"-i", url,
"-bsf:a", "aac_adtstoasc",
"-vcodec", "copy",
"-c", "copy"
*/
// recorder.setAudioOption("async", "50");
//av_bitstream_filter_init("aac_adtstoasc");
recorder.setVideoOption("preset", "ultrafast");
recorder.setVideoOption("c", "copy");
recorder.setVideoCodecName("H.264");
recorder.setAudioCodecName("copy");
recorder.setAudioOption("bsf:a", "aac_adtstoasc");
recorder.setAudioOption("desync", "10");
//recorder.setVideoOption("skip_frame", "nokey");
//recorder.setVideoOption("qpmax", "51");
//recorder.setVideoOption("qpmin", "10");
recorder.setVideoOption("audio-sync", "");
//recorder.setVideoOption("bframes", "16");
//recorder.setVideoOption("keyint_min", "25");
//recorder.setVideoOption("keyint", "25");
//-skip_frame -nokey
// org.bytedeco.javacpp.avformat.
//recorder.setAudioQuality();
// recorder.setInterleaved(false);
//recorder.setAudioCodec(org.bytedeco.javacpp.avcodec.AV_CODEC_ID_AAC );//aac_adtstoasc
// recorder.setPixelFormat(avutil.);
recorder.setVideoOption("threads", "1");
recorder.start();
recorder.setPixelFormat(grabber.getPixelFormat());
recorder.setTimestamp(grabber.getTimestamp());
Frame frame;
int allFrames = grabber.getLengthInFrames();
float percentage = 0;
float lastpercentage = 1;
System.out.println("Total frames to process " + grabber.getLengthInFrames());
//recorder.setFrameRate();
System.out.println("Start Frame = " + grabber.getFrameNumber());
while ((frame = grabber.grab()) != null) {
recorder.record(frame);
// Testing
recorder.setSampleRate(grabber.getSampleRate());
recorder.setVideoBitrate(grabber.getVideoBitrate());
recorder.setAudioBitrate(grabber.getAudioBitrate());
recorder.setAudioChannels(grabber.getAudioChannels());
recorder.setFrameRate(grabber.getFrameRate());
// End Testing
percentage = ((float) grabber.getFrameNumber() * 100) / allFrames;
if (!String.format("%.0f%%", percentage).equals(String.format("%.0f%%", lastpercentage))) {
System.out.println("Percentage Complete " + String.format("%.0f%%", percentage) + "\r");
lastpercentage = percentage;
}
}
recorder.stop();
recorder.release();
grabber.stop();
grabber.release();