/*
* https://webfolder.io/license.html
*/
package io.webfolder.cdp.video;
import static io.webfolder.cdp.JsonLibrary.Jackson;
import static io.webfolder.cdp.event.Events.PageScreencastFrame;
import static io.webfolder.cdp.logger.CdpLoggerType.Console;
import static io.webfolder.cdp.logger.CdpLogggerLevel.Info;
import static java.awt.Desktop.getDesktop;
import static java.awt.Desktop.isDesktopSupported;
import static java.util.Arrays.asList;
import static java.util.EnumSet.of;
import java.io.IOException;
import java.util.List;
import io.webfolder.cdp.Example;
import io.webfolder.cdp.Launcher;
import io.webfolder.cdp.Options;
import io.webfolder.cdp.session.Session;
import io.webfolder.cdp.session.SessionFactory;
import io.webfolder.cdp.session.VideoRecorder;
import io.webfolder.cdp.session.VideoRecorderOptions;
import io.webfolder.cdp.session.VideoRecorderResult;
//
// Record video and encode with vp8 encoder
//
// This example uses installed ffmpeg from host environment
// Make sure that ffmpeg exist in PATH environment variable
//
@Example
public class VideoRecorderExampleLibx264 {
public static void main(String[] args) {
System.out.println("Make sure that ffmpeg executable exist in PATH variable!");
Launcher launcher = new Launcher(Options.builder()
.loggerType(Console)
.consoleLoggerLevel(Info)
.jsonLibrary(Jackson)
.build());
try (SessionFactory factory = launcher.launch();
Session session = factory.create()) {
session.setRegisteredEventListeners(of(PageScreencastFrame));
// encoding parameters for libx264
List<String> libx264Args = asList(new String[] {
"-vcodec",
"libx264",
"-pix_fmt",
"yuv420p",
"-r",
"25",
"-an",
});
VideoRecorder recorder = session.createVideoRecoder(
VideoRecorderOptions.builder()
.ffmpegExecutable("ffmpeg") // use ffmpeg from env path
.videoFileName("video.mp4") // use mp4 extension
.ffmpegArgs(libx264Args)
.build()
);
recorder.start();
session
.navigate("https://webkit.org/blog-files/3d-transforms/poster-circle.html")
.waitDocumentReady()
.wait(5_000);
session.navigate("https://yahoo.com");
for (int i = 0; i < 50; i++) {
session.wait(100);
session.evaluate("window.scrollBy(0,10)");
}
recorder.stop();
VideoRecorderResult result = recorder.encode();
if (result.isSucceess() && isDesktopSupported()) {
try {
getDesktop().open(result.getVideoFile().toFile());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
}