Не удается запустить FFmpegFrameGrabber с потоком HLS

#java #javacv

#java #javacv

Вопрос:

Мне нужно использовать FFmpegFrameGrabber для преобразования прямой трансляции HTTP-трансляции в изображения и аудио-сегменты продолжительностью 10 секунд. Я всегда получаю grabbedimage null в следующем коде. Мне нужна помощь в использовании javacv для загрузки прямых трансляций.

 URL streamUrl = new URL("http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4");

URLConnection connection = streamUrl.openConnection();

InputStream is2 = connection.getInputStream();
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(is2);
Frame grabbedImage = null;
grabber.start();
grabber.setFrameRate(grabber.getFrameRate());

Java2DFrameConverter c = new Java2DFrameConverter();
while ((grabbedImage = grabber.grab()) != null) {
    ImageIO.write(c.convert(grabbedImage), "png",
            new File("/mnt/test/"   System.currentTimeMillis()   ".png"));
}
grabber.close();
  

Комментарии:

1. Поскольку вы только перекодируете, вероятно, проще использовать программу ffmpeg следующим образом: bytedeco.org/javacpp-presets/ffmpeg/apidocs/org/bytedeco/ffmpeg /…

2. Спасибо @SamuelAudet Приведенный вами пример относится к сохраненному видео на диске. Работает ли FFmpegFrameGrabber напрямую с потоком в реальном времени, таким как HLS? в настоящее время появляется ошибка типа «image == null!» со строкой ImageIO.write. Есть ли способ избежать этого?

3. Да, он также работает с URL-адресами HTTP и т. Д.