有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法前进和重画MPEG2帧。。。正在处理2 GSVideo1。0 OSX10。8.5

我的项目使用Eclipse在OSX 10.8.5上处理核心jar和GSVideo库

我无法让GSVideo jump(int frame)或jump(float time)实际重画下一帧。在下面的示例程序中,当我反复按向右键以推进帧时,显示的图像在帧之间来回切换。因为下面的例子适用于*。莫夫,但不是*。mpg视频我想问一下,在MPEG2视频中,gstreamer推进帧是否存在任何已知问题。或者java gstreamer或GSVideo出了什么问题

我正在处理MPEG2格式的视频。。只要播放和暂停MPEG2就没有问题。好像是那部电影。跳转(frameNum或time)函数不起作用。我已经开始寻找一个使用playbin2的seek方法的帧步进示例

这是关于我想跳的视频的信息

流0:type:CODEC_type_视频;编解码器:编解码器_ID _mpeg2视频;持续时间: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: Play mpeg2

非常感谢SO社区对我的帮助

更新: 为了解决MPEG2压缩问题(下面由v.k.描述),我正在尝试创建一个gstreamer管道,使用GSVideo管道或java gstreamer对mp4进行动态转码。下面的命令在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) 个答案

  1. # 1 楼答案

    正如v.k.所指出的,寻找通常是不准确的

    需要注意的一点是,gsvideo的开发已经基本停止。它的主要元素在Processing 2.0中被移植到内置的视频库中。我在内置视频中做了一些工作,试图改进搜索,库| video | Movie中的示例帧显示了如何(尝试)通过指示时间值跳转到特定帧。也许这对你有帮助

    此外,如果你能找到一种更准确的方法来进行搜索,就像你在上一篇文章中建议的那样,我可以将其包含在视频库中