Проблемы с продвижением и перерисовкой кадров MPEG2... Обработка2 GSVideo1.0 OSX10.8.5

Мой проект использует Ядро обработки ядра и библиотеку GSVideo на OSX 10.8.5 с использованием Eclipse.

Я не могу заставить GSVideo перейти (int frame) или перейти (float time), чтобы фактически перерисовать следующие кадры. Отображаемое изображение переключается назад и вперед между кадрами, когда я несколько раз нажимаю ПРАВО для перемещения кадра в примере программы ниже. Поскольку приведенный ниже пример работает с *.mov, но не с *.mpg видео, я хочу спросить, есть ли какие-либо известные проблемы с продвижением кадров gstreamer в видео MPEG2. Или, может быть, что-то не так с java-gstreamer или GSVideo?

Я работаю с видео в формате MPEG2. И нет проблем просто воспроизвести и приостановить MPEG2. Просто кажется, что функции movie.jump(frameNum или time) не работают. Я начал искать пример пошагового фрейма, используя метод поиска playbin2.

Вот информация о видео, которое я пытаюсь прыгнуть.

поток 0: тип: CODEC_TYPE_VIDEO; кодек: CODEC_ID_MPEG2VIDEO; продолжительность: 7717710; время начала: 433367; время: 1/90000; кодер tb: 1001/60000; ширина: 1920; высота: 1080; формат: YUV420P; частота кадров: 29,97;

Пример кода.

import processing.core.*;
import codeanticode.gsvideo.*;

public class FramesTest extends PApplet {

GSPlayer player;
GSMovie movie;
int newFrame = 0;
PFont font;

public void setup() {
  size(320, 240);
  background(0);
  //movie = new GSMovie(this, "station.mov");  // sample works
  movie = new GSMovie(this, "myMovie.mpg");  // mpg does not
  movie.play();
  movie.goToBeginning();
  movie.pause(); 
  textSize(24);
}

public void movieEvent(GSMovie movie) {
    System.out.println("movie"+ movie.frame());
    movie.read();    
}

public void draw() {
  image(movie, 0, 0, width, height);
  fill(240, 20, 30);

  text(movie.frame() + " / " + (movie.length() - 1), 10, 30);
}

public void keyPressed() {
  if (movie.isSeeking()) return;

  if (key == CODED) {
    if (keyCode == LEFT) {
      if (0 < newFrame) newFrame--; 
    } else if (keyCode == RIGHT) {
      if (newFrame < movie.length() - 1) newFrame++;
    }
  } 

  movie.play();
  movie.jump(newFrame); 
  movie.pause();  
  if (movie.available()){
      System.out.println(movie.frame());
      movie.read();
  }

  System.out.println(newFrame);
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    PApplet.main(new String[] { FramesTest.class.getName() }); //
     }

}

Пример кода был взят отсюда... http://gsvideo.sourceforge.net/examples/Movie/Frames/Frames.pde

Я искал в Интернете в течение нескольких дней, и эта попытка контакта с этим форумом также... https://sourceforge.net/projects/gsvideo/forums

Этот пост кажется похожим, но моя проблема не играет (это нормально). Я не могу перейти к конкретному кадру.... GStreamer: Воспроизвести mpeg2

Большое спасибо сообществу SO за любую помощь, которую я могу получить.

Обновление: Чтобы обойти проблему сжатия MPEG2 (описанную ниже, vk), я пытаюсь создать конвейер gstreamer для выполнения транскодирования на лету в mp4 с использованием либо GSVideo Pipeline, либо с помощью java-gstreamer. Команда ниже работает в Ubuntu.

gst-launch-0.10 filesrc location=myMpeg2Video.mpg ! mpegdemux name=demux demux.video_00 ! ffdec_mpeg2video ! queue ! x264enc ! ffdec_h264 ! xvimagesink

Но следующий конвейер GSVideo отображает пустое серое окно:(

pipeline = new GSPipeline(this, "filesrc location=file:/path/movie.mpg ! mpegdemux name=demux demux.video_00  ! ffdec_mpeg2video"); 
pipeline.play();

1 ответ

Решение

Как отметил В.К., поиск в целом не точен.

Важно отметить, что разработка на gsvideo в основном остановлена. Основные элементы были перенесены во встроенную библиотеку видео в Processing 2.0. Я проделал некоторую работу со встроенным видео, чтобы попытаться улучшить поиск, и пример "Кадры в библиотеках | видео | Фильм" показывает, как (чтобы попытаться) перейти к определенным кадрам, указав значение времени. Может быть, это поможет в вашем случае?

Также, если вы найдете более точный способ поиска, как вы предлагаете в своем последнем посте, я мог бы включить его в видеотеку.

Другие вопросы по тегам