From b2f60d36a5a1e55031e380b92dda2c8a8130e0fe Mon Sep 17 00:00:00 2001 From: m1k1o Date: Thu, 1 Apr 2021 21:07:28 +0200 Subject: [PATCH] add arm video pipeline to container. --- .m1k1o/arm-base/Dockerfile | 4 ++++ README.md | 29 +++++++++++++++++++---------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/.m1k1o/arm-base/Dockerfile b/.m1k1o/arm-base/Dockerfile index 35ac00b..58f50df 100644 --- a/.m1k1o/arm-base/Dockerfile +++ b/.m1k1o/arm-base/Dockerfile @@ -117,6 +117,10 @@ ENV NEKO_PASSWORD=neko ENV NEKO_PASSWORD_ADMIN=admin ENV NEKO_BIND=:8080 +# +# custom arm values -> video pipeline with GPU encoding +ENV NEKO_VIDEO='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=0,video_bitrate=1250000;" ! h264parse config-interval=3 ! video/x-h264,profile=baseline,stream-format=byte-stream' + # # copy static files from previous stages COPY --from=server /src/bin/neko /usr/bin/neko diff --git a/README.md b/README.md index 60b47dd..ab96d16 100644 --- a/README.md +++ b/README.md @@ -75,9 +75,9 @@ Use following docker images: - `m1k1o/neko:base` - for custom base. For ARM-based devices (like Raspberry Pi, with GPU hardware acceleration): -- `m1k1o/neko:arm-base` - for custom arm based. - `m1k1o/neko:arm-firefox` - for Firefox. - `m1k1o/neko:arm-chromium` - for Chromium. +- `m1k1o/neko:arm-base` - for custom arm based. Networking: - If you want to use n.eko in **external** network, you can omit `NEKO_NAT1TO1`. It will automatically get your Public IP. @@ -129,7 +129,7 @@ services: NEKO_NAT1TO1: ``` -## Chromium Ungoogled +## Chromium ```yaml version: "3.4" @@ -175,30 +175,39 @@ services: NEKO_NAT1TO1: ``` +## Raspberry Pi + +Note! Since this pipeline is using H264, that enables GPU HW acceleration for Raspberry Pi, you are only able to connect from browsers supporting H264 for WebRTC. At the time of implementing, [Firefox does not support this](https://developer.mozilla.org/en-US/docs/Web/Media/Formats/WebRTC_codecs#supported-foot-1). + ```yaml version: "3.4" services: neko: image: "m1k1o/neko:arm-chromium" restart: "unless-stopped" - # increase on rpi's with more then 1gb ram + # increase on rpi's with more then 1gb ram. shm_size: "520mb" ports: - "8084:8080" - "52000-52100:52000-52100/udp" - # this is important since we need a GPU for hardware acceleration alternatively mount the devices into the docker + # this is important since we need a GPU for hardware acceleration alternatively mount the devices into the docker. privileged: true environment: NEKO_SCREEN: '1280x720@30' NEKO_PASSWORD: 'neko' NEKO_PASSWORD_ADMIN: 'admin' NEKO_EPR: 52000-52100 - NEKO_VP8: 'false' - NEKO_VP9: 'false' - NEKO_H264: 'true' - # Change target bitrate and framerate on this parameter - NEKO_VIDEO: ' 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=0,video_bitrate=1250000;" ! h264parse config-interval=3 ! video/x-h264,profile=baseline,stream-format=byte-stream ' - NEKO_MAX_FPS: 0 + NEKO_H264: 1 + # optional: Change target bitrate and framerate on this parameter. + NEKO_VIDEO: | + 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=0,video_bitrate=1250000;" + ! h264parse config-interval=3 + ! video/x-h264,profile=baseline,stream-format=byte-stream ``` ## Mobile support