Я пытаюсь выбрать кадры (видео и метаданные) из файлов MPEG, MPEG-TS и MPEG-PS и живых потоков (потоки сети/UDP/RTP). Я изучал использование JCODEC для этого и начал с попытки использовать классы FrameGrab / FrameGrab8Bit и столкнулся с ошибкой, что эти форматы «временно не поддерживаются». Я попытался вернуться к некоторым коммитам, чтобы посмотреть, могу ли я просто использовать более старый код, но похоже, что оба этих файла имеют эти форматы, «временно не поддерживаемые» с 2013/2015 года соответственно.
Затем я попытался подключить все обратно к классу FrameGrab8Bit, вставив приведенный ниже код...
public static FrameGrab8Bit createFrameGrab8Bit(SeekableByteChannel in) throws IOException, JCodecException {
...
SeekableDemuxerTrack videoTrack = null;
...
case MPEG_PS:
MPSDemuxer psd = new MPSDemuxer(in);
List tracks = psd.getVideoTracks();
videoTrack = (SeekableDemuxerTrack)tracks.get(0);
break;
case MPEG_TS:
in.setPosition(0);
MTSDemuxer tsd = new MTSDemuxer(in);
ReadableByteChannel program = tsd.getProgram(481);
MPSDemuxer ptsd = new MPSDemuxer(program);
List<MPEGDemuxerTrack> tstracks = ptsd.getVideoTracks();
MPEGDemuxerTrack muxtrack = tstracks.get(0);
videoTrack = (SeekableDemuxerTrack)tstracks.get(0);
break;
...
но я столкнулся с ошибкой утверждения заголовка пакета в классе MTSDemuxer.java в функции parsePacket:
public static MTSPacket parsePacket(ByteBuffer buffer) {
int marker = buffer.get() & 0xff;
int marker = by & 0xff;
Assert.assertEquals(0x47, marker);
...
Я обнаружил, что когда я сбрасываю позицию доступного для поиска байтового канала (то есть: in.setPosition(0)
), код проходит утверждение, но затем терпит неудачу в videoTrack = (SeekableDemuxerTrack)tstracks.get(0)
(tstracks.get(0)
не может быть преобразован в SeekableDemuxerTrack)
Я трачу свое время? Поддерживаются ли эти форматы где-то в библиотеке, и я просто не могу их найти?
Кроме того, после просмотра кода и создания быстрых тестовых приложений кажется, что все, что вы получаете от демультиплексоров, — это видеокадры. Нет ли способа получить кадры метаданных, связанные с видеокадрами?
Для справки я использую тестовые файлы из: http://samples.ffmpeg.org/MPEG2/mpegts-klv/