diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css
index 329e989e..0851fe3e 100644
--- a/docs/.vitepress/theme/style.css
+++ b/docs/.vitepress/theme/style.css
@@ -118,6 +118,34 @@
}
}
+/**
+ * Component: Home features
+ * -------------------------------------------------------------------------- */
+
+.VPFeature .icon {
+ color: var(--vp-c-brand-1);
+ background-color: var(--vp-c-brand-soft);
+}
+
+.VPFeature .icon svg {
+ width: 24px;
+ height: 24px;
+}
+
+.VPFeature.link {
+ transition: border-color 0.25s, transform 0.25s;
+}
+
+.VPFeature.link:hover {
+ transform: translateY(-2px);
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .VPFeature.link:hover {
+ transform: none;
+ }
+}
+
/**
* Component: Custom Block
* -------------------------------------------------------------------------- */
diff --git a/docs/index.md b/docs/index.md
index 68740180..168fdb07 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -19,32 +19,67 @@ hero:
src: /logo.png
alt: webrtc-java
+# Icons from Lucide (https://lucide.dev, ISC license). Keep the number of features a multiple
+# of three, so that the default theme lays them out in full rows of three.
features:
- - title: Cross-platform
- details: Use the same Java API across Windows, macOS, and Linux with prebuilt native bindings. Ideal for desktop apps and server‑side media services.
- - title: Native performance
- details: Thin JNI layer with minimal overhead, delivering near-native performance with minimal context switching between Java and native code.
- - title: Audio and video streaming
- details: Audio and video capture from cameras and microphones devices, with support for custom media sources for flexible streaming solutions.
- - title: Media File Playback
- details: Send video and audio files over a peer connection. The optional media module decodes with FFmpeg in native code and paces playback in real time, keeping audio and video in sync.
- - title: Call Recording
- details: Record what a peer connection sends or receives into MKV, WebM or MP4 files. Encoded frames go into the file as they are, without re-encoding, so recording costs next to no CPU and keeps the exact quality of the call.
- - title: End-to-End Encryption
- details: Encoded transforms let Java code read, change or drop every encoded frame between encoder and network, like insertable streams in the browser; the building block for end-to-end encryption, frame metadata and stream analysis.
- - title: Send Pre-encoded Media
- details: Encoded frame injectors take the place of a sender's track and send frames that are already encoded, such as an IP camera's H.264 stream or a recording, with no encoding in WebRTC.
- - title: Hardware Video Codecs
- details: Encode and decode H.264, H.265, VP9 and AV1 on the GPU through NVENC and NVDEC, Media Foundation, VA-API and VideoToolbox. A stream the hardware cannot take falls back to software without dropping the call.
- - title: Custom Video Codecs
- details: Plug video encoders and decoders written in Java into WebRTC, next to the built-in VP8, VP9, AV1 and H.264, to bring in a codec of your own or a hardware encoder from another library.
- - title: Screen Sharing
- details: Share application windows or the full desktop with minimal setup; integrate screen capture streams like any other media stream.
- - title: Video Processing
- details: Put a video processor between a camera or desktop source and its tracks to change, replace or drop each frame before it is sent, for background blur, overlays, mirroring or hiding part of the screen.
- - title: Data Channels
- details: Reliable and unordered/ordered SCTP data channels for arbitrary messaging, file transfer, and app signaling.
- - title: Statistics API for monitoring
- details: Access WebRTC stats (bitrate, packet loss, jitter, RTT, frame rate, CPU) to monitor and optimize media quality.
+ - icon:
+ title: Cross-platform, Native Speed
+ details: One Java API on Windows, macOS and Linux, with prebuilt native libraries. A thin JNI layer keeps the overhead between Java and native code minimal.
+ link: /guide/introduction
+ linkText: Introduction
+ - icon:
+ title: Audio and Video Streaming
+ details: Capture audio and video from microphones and cameras, or feed your own media sources into a call.
+ link: /guide/media/media-devices
+ linkText: Media devices
+ - icon:
+ title: Screen Sharing
+ details: Share application windows or the full desktop with minimal setup, and send them like any other video stream.
+ link: /guide/video/desktop-capture
+ linkText: Desktop capture
+ - icon:
+ title: Data Channels
+ details: Reliable or unreliable, ordered or unordered SCTP data channels for messaging, file transfer and app signaling.
+ link: /guide/data/data-channels
+ linkText: Data channels
+ - icon:
+ title: Hardware Video Codecs
+ details: Encode and decode H.264, H.265, VP9 and AV1 on the GPU through NVENC and NVDEC, Media Foundation, VA-API and VideoToolbox, with fallback to software.
+ link: /guide/advanced/video-codecs#hardware-encoding
+ linkText: Hardware codecs
+ - icon:
+ title: Custom Video Codecs
+ details: Plug video encoders and decoders written in Java into WebRTC, to bring in a codec of your own or a hardware encoder from another library.
+ link: /guide/advanced/video-codecs#adding-a-codec
+ linkText: Video codecs
+ - icon:
+ title: Video Processing
+ details: Change, replace or drop each camera or desktop frame before it is sent, for background blur, overlays, mirroring or hiding part of the screen.
+ link: /guide/video/camera-capture#changing-frames-before-they-are-sent
+ linkText: Processing frames
+ - icon:
+ title: End-to-End Encryption
+ details: Encoded transforms let Java code read, change or drop every encoded frame, like insertable streams in the browser, for encryption, metadata and analysis.
+ link: /guide/advanced/encoded-transforms
+ linkText: Encoded transforms
+ - icon:
+ title: Send Pre-encoded Media
+ details: Send frames that are already encoded, such as an IP camera's H.264 stream or a recording, without encoding them again in WebRTC.
+ link: /guide/advanced/encoded-transforms#injecting-encoded-frames
+ linkText: Injecting frames
+ - icon:
+ title: Media File Playback
+ details: Play video and audio files or RTSP streams into a peer connection. The optional media module decodes with FFmpeg and keeps audio and video in sync.
+ link: /guide/media/media-files
+ linkText: Media files
+ - icon:
+ title: Call Recording
+ details: Record what a peer connection sends or receives into MKV, WebM or MP4 files, without re-encoding, at next to no CPU cost and in the exact quality of the call.
+ link: /guide/media/media-recording
+ linkText: Recording
+ - icon:
+ title: Statistics and Monitoring
+ details: Read WebRTC stats such as bitrate, packet loss, jitter, round-trip time and frame rate to monitor and tune media quality.
+ link: /guide/monitoring/rtc-stats
+ linkText: Statistics
---
-