【问题标题】:Java BufferedImages from .ts File.ts 文件中的 Java BufferedImages
【发布时间】:2018-01-26 12:55:25
【问题描述】:

如何从 Java 中的 .ts 文件中获取 BufferedImage(定义位置的帧)?如果可能,我不想使用任何 JNI / CLI Wrapper。

     System.out.println( JCodecUtil.detectFormat( file ) );
        Demuxer demuxer = JCodecUtil.createDemuxer( JCodecUtil.detectFormat( file ), file );
        for ( DemuxerTrack demuxerTrack : demuxer.getVideoTracks() ) {
            Packet packet;
            while ( ( packet = demuxerTrack.nextFrame() ) != null ) {
                System.out.println( "frame " + packet.getDuration() );
            }
        }

第一个 Snippet 的输出只是 MPEG_TS [ERROR] . (:0): Format MPEG_TS is not supported MPEG_TS [ERROR] . (:0): Format MPEG_TS is not supported

    for ( DemuxerTrack demuxerTrack : JCodecUtil.createM2TSDemuxer( file, TrackType.VIDEO ).v1.getTracks() ) {
        Packet packet;
        while ( ( packet = demuxerTrack.nextFrame() ) != null ) {
            System.out.println( "frame : " + ImageIO.read( new ByteArrayInputStream( packet.getData().array() ) ) );
        }
    }

在此代码段中,它只为每个帧输出 null。如何解决这个问题?

【问题讨论】:

  • 在最后一个sn-p中,packet.getData()里面是什么?如果是编码数据,你知道它有什么格式吗?
  • 这实际上是问题所在。我不知道格式,也不知道怎么读。

标签: java converter bufferedimage mpeg jcodec


【解决方案1】:
Picture tmp = Picture.create(1920, 1088, ColorSpace.YUV420);
VideoDecoder vd = JCodecUtil.createVideoDecoder(JCodecUtil.detectDecoder(data.duplicate()), data.duplicate());
Picture pic = vd.decodeFrame(data, tmp.getData());
BufferedImage buf = AWTUtil.toBufferedImage(pic);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2017-02-23
    • 2018-12-01
    相关资源
    最近更新 更多