ScreenVideo кодировщик в Java - PullRequest
       3

ScreenVideo кодировщик в Java

4 голосов
/ 06 сентября 2010

Кто-нибудь знает кодировщик видео Java для ScreenVideo (v1 или v2), который является бесплатным? Я знаю, что ffmpeg имеет версию на C ++, и Ли Феларка написал ее на AS3; но я действительно хотел бы иметь один на Яве.
AS3: http://www.zeropointnine.com/blog/assets_code/SimpleFlvWriter.as.txt

Ответы [ 4 ]

8 голосов
/ 01 октября 2010

Я полагаю, что библиотека Xuggle делает то, что вам нужно, хотя на самом деле это может быть оболочка для нативных библиотек, таких как ffmpeg.

Вот пример кода, кодирующего скриншоты рабочего стола на 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();

Этот код взят из этого учебника на веб-сайте Xuggle.

Более продвинутая кодировка, также на сайте Xuggle здесь .

Если вам нужна нативная оболочка, запустите веб-поиск для "IContainerFormat flv" для других битов примера кода.

Также уже существует очень похожий вопрос


Обновление: Собственная реализация Java

Извлечение ScreenVideoEncoder.java из проекта bigbluebutton на github.

2 голосов
/ 02 августа 2011

Вернер Рандельсхофер разместил в своем блоге чистый экранный видеорегистратор java и был любезен опубликовать источник: http://www.randelshofer.ch/blog/2011/05/pure-java-screen-recorder/ Похоже, делать то, что вы хотите.

0 голосов
/ 08 октября 2010

Не знаю, найдете ли вы что-нибудь хорошее, написанное на чистом Java, без использования нативного кода.Кодирование видео является очень трудоемкой задачей, поэтому обычно оно пишется в «быстром» нативном коде, на таких языках, как C или даже Assembler.При кодировании видео часто используются специальные инструкции процессора и графического процессора для повышения скорости - все это недоступно в Java, поэтому нет смысла писать видеокодеры для производственного использования в Java.Если бы я был тобой, я бы просто взял какое-то нативное решение и внедрил бы его с JNI, JNA или Swig (популярные коннекторы Java-to-native).Если вам нужна высокая мобильность (например, 32-битная Windows, 64-битная Windows, 32-битная Linux, 64-битная Linux), просто скомпилируйте эту собственную библиотеку для этих четырех платформ и вставьте в свои JAR-файлы.Если вам просто нужно написать несжатое видео, это может быть легко сделано на Java, и это будет так же быстро, как и нативный код.Просто возьмите этот SimpleFlvWriter.as, который вы опубликовали, и переписайте его на Java - это не должно быть трудной задачей.

0 голосов
/ 02 октября 2010

Я полагаю, что BigBlueButton реализовал один, но я не знаю, открыли ли они его.Проверьте там.

...