/*
* 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.EnumSet.of;
import java.io.IOException;
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;
// Unlike to FFmpegVideoRecorder, this examples encodes the recorded video in realtime.
// cdp4j uses Cisco's openh264 encoder and IHMC Java Video Codecs library.
//
// openh264 : https://github.com/cisco/openh264
// JNI binding: https://github.com/ihmcrobotics/ihmc-video-codecs
//
@Example
public class VideoRecorderRealtimeExample {
public static void main(String[] args) {
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));
VideoRecorder recorder = session.createRealtimeVideoRecoder(
VideoRecorderOptions.builder()
.videoFileName("out.mp4") // default file extension is webm, don't forget to change the file extension
.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);
}
}
}
}
}