代码之家  ›  专栏  ›  技术社区  ›  Paul Gregoire

Java屏幕视频编码器

  •  4
  • Paul Gregoire  · 技术社区  · 14 年前


    http://www.zeropointnine.com/blog/assets_code/SimpleFlvWriter.as.txt

    4 回复  |  直到 14 年前
        1
  •  8
  •   Community CDub    7 年前

    我相信 Xuggle

    下面是将桌面截图编码为flv(mp4)的示例代码片段:

     final Robot robot = new Robot();
     final Toolkit toolkit = Toolkit.getDefaultToolkit();
     final Rectangle screenBounds = new Rectangle(toolkit.getScreenSize());
    
     // First, let's make a IMediaWriter to write the file.
     final IMediaWriter writer = ToolFactory.makeWriter("output.mp4");
    
     // We tell it we're going to add one video stream, with id 0,
     // at position 0, and that it will have a fixed frame rate of
     // FRAME_RATE.
     writer.addVideoStream(0, 0,
         FRAME_RATE,
         screenBounds.width, screenBounds.height);
    
     // Now, we're going to loop
     long startTime = System.nanoTime();
     for (int index = 0; index < SECONDS_TO_RUN_FOR*FRAME_RATE.getDouble(); index++)
     {
       // take the screen shot
       BufferedImage screen = robot.createScreenCapture(screenBounds);
    
       // convert to the right image type
       BufferedImage bgrScreen = convertToType(screen,
           BufferedImage.TYPE_3BYTE_BGR);
    
       // encode the image to stream #0
       writer.encodeVideo(0,bgrScreen,
           System.nanoTime()-startTime, TimeUnit.NANOSECONDS);
        System.out.println("encoded image: " +index);
    
       // sleep for framerate milliseconds
       Thread.sleep((long) (1000 / FRAME_RATE.getDouble()));
     }
     // Finally we tell the writer to close and write the trailer if
     // needed
     writer.close();
    

    此代码来自 tutorial 在Xuggle网站上。

    更先进的编码,也在Xuggle网站上 here

    "IContainerFormat flv" 对于示例代码的其他位。

    而且,已经有一个 very similar question


    更新: 本机java实现

    ScreenVideoEncoder.java

        2
  •  2
  •   Ben    13 年前

    Werner Randelshofer在他的博客上发布了一个纯java屏幕录制器,并很友好地发布了源代码: http://www.randelshofer.ch/blog/2011/05/pure-java-screen-recorder/ 它看起来做你想做的事。

        3
  •  0
  •   Art Clarke    14 年前

        4
  •  0
  •   iirekm    14 年前

    我不知道你是否发现有什么好的东西是用纯Java编写的,没有使用本机代码。视频编码是一项非常耗时的任务,所以它通常是用“快速”的本地代码编写的,用C语言甚至汇编语言编写。视频编码通常使用特殊的CPU和GPU指令来提高速度—这一切都是Java无法提供的,因此用Java编写视频编码器是没有意义的。 如果您需要高可移植性(例如32位Windows、64位Windows、32位Linux、64位Linux),只需为这四种平台编译本机库并嵌入jar。 如果您只需要编写未压缩的视频,可以用Java轻松地完成,而且速度与本机代码一样快。拿着这个SimpleFlvWriter.as文件你将它发布并重写到Java中-这应该不是一项艰巨的任务。