Кто-нибудь знает о бесплатном кодировщике видео Java для ScreenVideo (v1 или v2)? Я знаю, что у ffmpeg есть версия C ++, а Ли Феларка написал ее на AS3; но мне бы очень хотелось иметь такой на Java.
AS3: http://www.zeropointnine.com/blog/assets_code/SimpleFlvWriter.as.txt
ScreenVideo кодировщик в Java
Ответы (4)
Я считаю, что библиотека 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.
Вернер Рандельшофер разместил в своем блоге программу записи с экрана на чистом языке Java и любезно опубликовал источник: http://www.randelshofer.ch/blog/2011/05/pure-java-screen-recorder/ Похоже, вы делаете то, что хотите.
Я считаю, что BigBlueButton реализовал один, но я не знаю, открыли ли они его исходный код. Проверить там.
Я не знаю, найдете ли вы что-нибудь хорошее, написанное на чистой Java без использования нативного кода. Кодирование видео - очень трудоемкая задача, поэтому обычно оно пишется с помощью «быстрого» нативного кода на таких языках, как C или даже Assembler. При кодировании видео часто используются специальные инструкции ЦП и ГП для повышения скорости - все это недоступно в Java, поэтому нет смысла писать на Java кодировщики видео для промышленного использования. На вашем месте я бы просто взял какое-нибудь нативное решение и встроил его с помощью JNI, JNA или Swig (популярные соединители Java-to-native). Если вам нужна высокая переносимость (например, 32-битная Windows, 64-битная Windows, 32-битная Linux, 64-битная Linux), просто скомпилируйте эту собственную библиотеку для этих четырех платформ и вставьте в свои JAR-файлы. Если вам просто нужно написать несжатое видео, это легко сделать на Java, и это будет так же быстро, как собственный код. Просто возьмите этот SimpleFlvWriter.as, который вы разместили, и перепишите его на Java - это не должно быть сложной задачей.