前进和重绘 MPEG2 帧时遇到问题.正在处理2 GSVideo1.0 OSX10.8.5.



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

我无法让 GSVideo 跳转(整数帧)或跳跃(浮动时间)实际重绘下一帧。 当我在下面的示例程序中反复按 RIGHT 以推进帧时,显示的图像会在帧之间来回切换。 由于以下示例适用于 *.mov,但不适用于 *.mpg 视频,我想问一下 MPEG2 视频中的 gstreamer 前进帧是否存在任何已知问题。或者也许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: 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();
正如

V.K.指出的那样,寻找通常是不准确的。

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

此外,如果您找到一种更准确的搜索方式,正如您在上一篇文章中所建议的那样,我可以将其包含在视频库中。

相关内容

  • 没有找到相关文章

最新更新