diff --git a/webpage/docs/configuration/capture.md b/webpage/docs/configuration/capture.md index 63949fb5..c0c95118 100644 --- a/webpage/docs/configuration/capture.md +++ b/webpage/docs/configuration/capture.md @@ -188,8 +188,9 @@ See documentation for [ximagesrc](https://gstreamer.freedesktop.org/documentatio hq: gst_pipeline: | ximagesrc display-name={display} show-pointer=true use-damage=false - ! videoconvert + ! videoconvert ! queue ! vp8enc + name=encoder target-bitrate=3072000 cpu-used=4 end-usage=cbr @@ -206,8 +207,9 @@ See documentation for [ximagesrc](https://gstreamer.freedesktop.org/documentatio lq: gst_pipeline: | ximagesrc display-name={display} show-pointer=true use-damage=false - ! videoconvert + ! videoconvert ! queue ! vp8enc + name=encoder target-bitrate=1024000 cpu-used=4 end-usage=cbr @@ -235,8 +237,9 @@ See documentation for [ximagesrc](https://gstreamer.freedesktop.org/documentatio main: gst_pipeline: | ximagesrc display-name={display} show-pointer=true use-damage=false - ! videoconvert + ! videoconvert ! queue ! x264enc + name=encoder threads=4 bitrate=4096 key-int-max=15 @@ -247,6 +250,36 @@ See documentation for [ximagesrc](https://gstreamer.freedesktop.org/documentatio ! appsink name=appsink ``` + + + ```yaml title="config.yaml" + capture: + video: + codec: h264 + ids: [ main ] + pipelines: + main: + gst_pipeline: | + ximagesrc display-name={display} show-pointer=true use-damage=false + ! videoconvert ! queue + ! video/x-raw,format=NV12 + ! nvh264enc + name=encoder + preset=2 + gop-size=25 + spatial-aq=true + temporal-aq=true + bitrate=4096 + vbv-buffer-size=4096 + rc-mode=6 + ! h264parse config-interval=-1 + ! video/x-h264,stream-format=byte-stream + ! appsink name=appsink + ``` + + This configuration requires [Nvidia GPU](https://developer.nvidia.com/cuda-gpus) with [NVENC](https://developer.nvidia.com/nvidia-video-codec-sdk) support. + + diff --git a/webpage/docs/installation/examples.md b/webpage/docs/installation/examples.md index fca12b31..ee229cae 100644 --- a/webpage/docs/installation/examples.md +++ b/webpage/docs/installation/examples.md @@ -76,30 +76,11 @@ services: NEKO_WEBRTC_NAT1TO1: ``` -## Raspberry Pi {#raspberry-pi} - -```yaml title="config.yaml" -capture: - video: - codec: h264 - ids: [ main ] - pipelines: - main: - gst_pipeline: | - ximagesrc display-name=%s use-damage=0 show-pointer=true use-damage=false - ! video/x-raw,framerate=30/1 - ! videoconvert - ! queue - ! video/x-raw,framerate=30/1,format=NV12 - ! v4l2h264enc extra-controls="controls,h264_profile=1,video_bitrate=1250000;" - ! h264parse config-interval=3 - ! video/x-h264,stream-format=byte-stream,profile=constrained-baseline -``` +## Raspberry Pi GPU Acceleration {#raspberry-pi} ```yaml title="docker-compose.yaml" services: neko: - # see docs for more variants image: "ghcr.io/m1k1o/neko/chromium:latest" restart: "unless-stopped" # increase on rpi's with more then 1gb ram. @@ -110,12 +91,121 @@ services: # note: this is important since we need a GPU for hardware acceleration alternatively # mount the devices into the docker. privileged: true - volumes: - - "./config.yaml:/etc/neko/neko.yaml" environment: + NEKO_CAPTURE_VIDEO_PIPELINE: | + ximagesrc display-name={display} show-pointer=true use-damage=false + ! video/x-raw,framerate=25/1 + ! videoconvert ! queue + ! video/x-raw,format=NV12 + ! v4l2h264enc + name=encoder + extra-controls="controls,h264_profile=1,video_bitrate=1250000;" + ! h264parse config-interval=-1 + ! video/x-h264,stream-format=byte-stream + ! appsink name=appsink + NEKO_CAPTURE_VIDEO_CODEC: "h264" NEKO_DESKTOP_SCREEN: '1280x720@30' - NEKO_MEMBER_MULTIUSER_USER_PASSWORD: 'neko' - NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD: 'admin' + NEKO_MEMBER_MULTIUSER_USER_PASSWORD: neko + NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD: admin NEKO_WEBRTC_EPR: 52000-52100 NEKO_WEBRTC_ICELITE: 1 ``` + +## Nvidia GPU Acceleration {#nvidia} + +Neko supports hardware acceleration using Nvidia GPUs. To use this feature, you need to have the Nvidia Container Toolkit installed on your system. You can find the installation instructions [here](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html). + +This example shows how to accelerate video encoding and as well the browser rendering using the GPU. You can test if the GPU is used by running `nvidia-smi`, which should show the GPU usage of both the browser and neko. In the browser, you can run the [WebGL Aquarium Demo](https://webglsamples.org/aquarium/aquarium.html) to test the GPU usage. + +```yaml title="docker-compose.yaml" +services: + neko: + image: "ghcr.io/m1k1o/neko/nvidia-firefox:latest" + restart: "unless-stopped" + shm_size: "2gb" + ports: + - "8080:8080" + - "52000-52100:52000-52100/udp" + environment: + NEKO_CAPTURE_VIDEO_PIPELINE: | + ximagesrc display-name={display} show-pointer=true use-damage=false + ! video/x-raw,framerate=25/1 + ! videoconvert ! queue + ! video/x-raw,format=NV12 + ! nvh264enc + name=encoder + preset=2 + gop-size=25 + spatial-aq=true + temporal-aq=true + bitrate=4096 + vbv-buffer-size=4096 + rc-mode=6 + ! h264parse config-interval=-1 + ! video/x-h264,stream-format=byte-stream + ! appsink name=appsink + NEKO_CAPTURE_VIDEO_CODEC: "h264" + NEKO_DESKTOP_SCREEN: 1920x1080@30 + NEKO_MEMBER_MULTIUSER_USER_PASSWORD: neko + NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD: admin + NEKO_WEBRTC_EPR: 52000-52100 + NEKO_WEBRTC_ICELITE: 1 + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: 1 + capabilities: [gpu] +``` + +See available [Nvidia Docker Images](/docs/v3/installation/docker-images#nvidia). + +If you only want to accelerate the encoding, **not the browser rendering**, you can use the default image with additional environment variables: + +```yaml title="docker-compose.yaml" +services: + neko: + # highlight-next-line + image: "ghcr.io/m1k1o/neko/firefox:latest" + restart: "unless-stopped" + shm_size: "2gb" + ports: + - "8080:8080" + - "52000-52100:52000-52100/udp" + environment: + # highlight-start + NVIDIA_VISIBLE_DEVICES: all + NVIDIA_DRIVER_CAPABILITIES: all + # highlight-end + NEKO_CAPTURE_VIDEO_PIPELINE: | + ximagesrc display-name={display} show-pointer=true use-damage=false + ! video/x-raw,framerate=25/1 + ! videoconvert ! queue + ! video/x-raw,format=NV12 + ! nvh264enc + name=encoder + preset=2 + gop-size=25 + spatial-aq=true + temporal-aq=true + bitrate=4096 + vbv-buffer-size=4096 + rc-mode=6 + ! h264parse config-interval=-1 + ! video/x-h264,stream-format=byte-stream + ! appsink name=appsink + NEKO_CAPTURE_VIDEO_CODEC: "h264" + NEKO_DESKTOP_SCREEN: 1920x1080@30 + NEKO_MEMBER_MULTIUSER_USER_PASSWORD: neko + NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD: admin + NEKO_WEBRTC_EPR: 52000-52100 + NEKO_WEBRTC_ICELITE: 1 + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: 1 + capabilities: [gpu] +```