From 43a4b407fff1c34a2b8dad01b002e7062f9ba62b Mon Sep 17 00:00:00 2001 From: aptalca Date: Wed, 26 Feb 2020 16:56:24 -0500 Subject: [PATCH] Add openmax support --- Dockerfile | 6 +++--- Dockerfile.aarch64 | 18 +++++++++++++++--- Dockerfile.armhf | 25 ++++++++++++++++++++++--- README.md | 15 +++++++++++++++ readme-vars.yml | 13 ++++++++++++- root/etc/cont-init.d/40-gid-video | 9 ++++++++- 6 files changed, 75 insertions(+), 11 deletions(-) diff --git a/Dockerfile b/Dockerfile index b530fdb..ace3de8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,10 +25,10 @@ RUN \ rpm2cpio emby.rpm \ | cpio -i --make-directories && \ mv -t \ - /app/emby/ \ + /app/emby/ \ /tmp/opt/emby-server/system/* \ /tmp/opt/emby-server/lib/samba/* \ - /tmp/opt/emby-server/lib/* \ + /tmp/opt/emby-server/lib/* \ /tmp/opt/emby-server/bin/ff* \ /tmp/opt/emby-server/etc @@ -50,4 +50,4 @@ COPY root/ / # ports and volumes EXPOSE 8096 8920 -VOLUME /config /transcode +VOLUME /config diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 101b524..f3e6f68 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -25,10 +25,10 @@ RUN \ rpm2cpio emby.rpm \ | cpio -i --make-directories && \ mv -t \ - /app/emby/ \ + /app/emby/ \ /tmp/opt/emby-server/system/* \ /tmp/opt/emby-server/lib/samba/* \ - /tmp/opt/emby-server/lib/* \ + /tmp/opt/emby-server/lib/* \ /tmp/opt/emby-server/bin/ff* \ /tmp/opt/emby-server/etc @@ -44,10 +44,22 @@ LABEL maintainer="thelamer" # add needed nvidia environment variables for https://github.com/NVIDIA/nvidia-docker ENV NVIDIA_DRIVER_CAPABILITIES="compute,video,utility" +RUN \ + echo "**** add emby deps ****" && \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + libomxil-bellagio0 \ + libomxil-bellagio-bin && \ + echo "**** cleanup ****" && \ + rm -rf \ + /tmp/* \ + /var/lib/apt/lists/* \ + /var/tmp/* + # add local files COPY --from=buildstage /app/emby /app/emby COPY root/ / # ports and volumes EXPOSE 8096 8920 -VOLUME /config /transcode +VOLUME /config diff --git a/Dockerfile.armhf b/Dockerfile.armhf index f0531e8..9e3856f 100644 --- a/Dockerfile.armhf +++ b/Dockerfile.armhf @@ -25,10 +25,10 @@ RUN \ rpm2cpio emby.rpm \ | cpio -i --make-directories && \ mv -t \ - /app/emby/ \ + /app/emby/ \ /tmp/opt/emby-server/system/* \ /tmp/opt/emby-server/lib/samba/* \ - /tmp/opt/emby-server/lib/* \ + /tmp/opt/emby-server/lib/* \ /tmp/opt/emby-server/bin/ff* \ /tmp/opt/emby-server/etc @@ -44,10 +44,29 @@ LABEL maintainer="thelamer" # add needed nvidia environment variables for https://github.com/NVIDIA/nvidia-docker ENV NVIDIA_DRIVER_CAPABILITIES="compute,video,utility" +RUN \ + echo "**** install packages ****" && \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + gnupg && \ + echo "**** add emby deps *****" && \ + curl -s https://keyserver.ubuntu.com/pks/lookup?op=get\&search=0x6587ffd6536b8826e88a62547876ae518cbcf2f2 | apt-key add - && \ + echo "deb http://ppa.launchpad.net/ubuntu-raspi2/ppa/ubuntu bionic main">> /etc/apt/sources.list.d/raspbins.list && \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + libomxil-bellagio0 \ + libomxil-bellagio-bin \ + libraspberrypi0 && \ + echo "**** cleanup ****" && \ + rm -rf \ + /tmp/* \ + /var/lib/apt/lists/* \ + /var/tmp/* + # add local files COPY --from=buildstage /app/emby /app/emby COPY root/ / # ports and volumes EXPOSE 8096 8920 -VOLUME /config /transcode +VOLUME /config diff --git a/README.md b/README.md index b0a4459..e2f4c16 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,9 @@ docker create \ -v /path/to/tvshows:/data/tvshows \ -v /path/to/movies:/data/movies \ -v /path/for/transcoding:/transcode `#optional` \ + -v /opt/vc/lib:/opt/vc/lib `#optional` \ --device /dev/dri:/dev/dri `#optional` \ + --device /dev/vchiq:/dev/vchiq `#optional` \ --restart unless-stopped \ linuxserver/emby ``` @@ -109,11 +111,13 @@ services: - /path/to/tvshows:/data/tvshows - /path/to/movies:/data/movies - /path/for/transcoding:/transcode #optional + - /opt/vc/lib:/opt/vc/lib #optional ports: - 8096:8096 - 8920:8920 #optional devices: - /dev/dri:/dev/dri #optional + - /dev/vchiq:/dev/vchiq #optional restart: unless-stopped ``` @@ -133,7 +137,9 @@ Container images are configured using parameters passed at runtime (such as thos | `-v /data/tvshows` | Media goes here. Add as many as needed e.g. `/data/movies`, `/data/tv`, etc. | | `-v /data/movies` | Media goes here. Add as many as needed e.g. `/data/movies`, `/data/tv`, etc. | | `-v /transcode` | Path for transcoding folder, *optional*. | +| `-v /opt/vc/lib` | Path for Raspberry Pi OpenMAX libs *optional*. | | `--device /dev/dri` | Only needed if you want to use your Intel GPU for hardware accelerated video encoding (vaapi). | +| `--device /dev/vchiq` | Only needed if you want to use your Raspberry Pi OpenMax video encoding (Bellagio). | ## Environment variables from files (Docker secrets) @@ -180,6 +186,14 @@ https://github.com/NVIDIA/nvidia-docker We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime `--runtime=nvidia` and add an environment variable `-e NVIDIA_VISIBLE_DEVICES=all` (can also be set to a specific gpu's UUID, this can be discovered by running `nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv` ). NVIDIA automatically mounts the GPU and drivers from your host into the emby docker. +### OpenMAX (Raspberry Pi) + +Hardware acceleration users for Raspberry Pi OpenMAX will need to mount their /dev/vchiq video device inside of the container and their system OpenMax libs by passing the following options when running or creating the container: +``` +--device=/dev/vchiq:/dev/vchiq +-v /opt/vc/lib:/opt/vc/lib +``` + ## Support Info @@ -246,6 +260,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64 ## Versions +* **26.02.20:** - Add openmax support on Raspberry Pi. * **15.02.20:** - Allow restarting emby from the gui (also allows for auto restarts after addon updates). * **02.10.19:** - Improve permission fixing for render and dvb devices. * **13.08.19:** - Add umask environment variable. diff --git a/readme-vars.yml b/readme-vars.yml index 2f69c52..20a20ad 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -40,9 +40,11 @@ opt_param_env_vars: opt_param_usage_include_vols: true opt_param_volumes: - { vol_path: "/transcode", vol_host_path: "/path/for/transcoding", desc: "Path for transcoding folder, *optional*." } + - { vol_path: "/opt/vc/lib", vol_host_path: "/opt/vc/lib", desc: "Path for Raspberry Pi OpenMAX libs *optional*." } opt_param_device_map: true opt_param_devices: -- { device_path: "/dev/dri", device_host_path: "/dev/dri", desc: "Only needed if you want to use your Intel GPU for hardware accelerated video encoding (vaapi)." } + - { device_path: "/dev/dri", device_host_path: "/dev/dri", desc: "Only needed if you want to use your Intel GPU for hardware accelerated video encoding (vaapi)." } + - { device_path: "/dev/vchiq", device_host_path: "/dev/vchiq", desc: "Only needed if you want to use your Raspberry Pi OpenMax video encoding (Bellagio)." } opt_param_usage_include_ports: true opt_param_ports: - { external_port: "8920", internal_port: "8920", port_desc: "Https webUI (you need to setup your own certificate)." } @@ -67,8 +69,17 @@ app_setup_block: | We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime `--runtime=nvidia` and add an environment variable `-e NVIDIA_VISIBLE_DEVICES=all` (can also be set to a specific gpu's UUID, this can be discovered by running `nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv` ). NVIDIA automatically mounts the GPU and drivers from your host into the emby docker. + ### OpenMAX (Raspberry Pi) + + Hardware acceleration users for Raspberry Pi OpenMAX will need to mount their /dev/vchiq video device inside of the container and their system OpenMax libs by passing the following options when running or creating the container: + ``` + --device=/dev/vchiq:/dev/vchiq + -v /opt/vc/lib:/opt/vc/lib + ``` + # changelog changelogs: + - { date: "26.02.20:", desc: "Add openmax support on Raspberry Pi." } - { date: "15.02.20:", desc: "Allow restarting emby from the gui (also allows for auto restarts after addon updates)." } - { date: "02.10.19:", desc: "Improve permission fixing for render and dvb devices." } - { date: "13.08.19:", desc: "Add umask environment variable." } diff --git a/root/etc/cont-init.d/40-gid-video b/root/etc/cont-init.d/40-gid-video index 8e0dec3..15e2d6d 100644 --- a/root/etc/cont-init.d/40-gid-video +++ b/root/etc/cont-init.d/40-gid-video @@ -1,6 +1,6 @@ #!/usr/bin/with-contenv bash -FILES=$(find /dev/dri /dev/dvb -type c -print 2>/dev/null) +FILES=$(find /dev/dri /dev/dvb /dev/vchiq -type c -print 2>/dev/null) for i in $FILES do @@ -24,3 +24,10 @@ done if [ -n "${FILES}" ] && [ ! -f "/groupadd" ]; then usermod -a -G root abc fi + +# openmax lib loading +if [ -e "/opt/vc/lib" ] && [ ! -e "/etc/ld.so.conf.d/00-vmcs.conf" ]; then + echo "[emby-init] Pi Libs detected loading" + echo "/opt/vc/lib" > "/etc/ld.so.conf.d/00-vmcs.conf" + ldconfig +fi