I am trying to use hardware accelerated ffmpeg to encode videos with nvenc in a Docker container with cuda base image on Linux Distro. I see the nvenc unloaded without any error and encoding throws error.
I'd like to add the homebridge-camera-ffmpeg plugin to the docker which loads but fails when triggered by the IOS home.app. I imagine that the container cannot work with the standard synology ffmpeg package (unlike other packages like mosquitto), and that ffmpeg needs to be installed within the docker container. Running the Image. First, you need to be authenticated in order to pull the Docker image: docker login docker-private.packages.nuxeo.com -u -p. To pull the latest tag of the nuxeo/nuxeo image from the Docker registry and run a container from it, run: docker run -name nuxeo -p 8080:8080 docker-private.packages.nuxeo.
Actually the Issue is with libnvidia-encode.so, WSL2 architecture doesn’t need NVidia drivers to be on host(WSL Linux Distro), but to be downloaded on Windows only. These encoders doesn’t come with the WSL supported NVidia drivers. So I have to install them separately on WSL Linux Distro and inside my docker container(cuda based image with video processing enabled), it mounts the libnvidia-encode.so file to container which uses it for building ffmpeg. It does detect the encoders .so files but unloads it, may be due to some conflict, which I assume can be WSL-CUDA specific error, since it works fine on my Linux VM.
Install Ffmpeg In Docker Containers
You'll need to set up a development environment if you want to develop a new feature or component for Home Assistant. Read on to learn how to set up.
Developing with Visual Studio Code + devcontainer#
The easiest way to get started with development is to use Visual Studio Code with devcontainers. This approach will create a preconfigured development environment with all the tools you need. This approach is enabled for all Home Assistant repositories.
I like to think of it as a slimmed down virtual machine. The proper term for what it builds is a virtual container. We can install FFmpeg inside the virtual container and then anything inside this container will be able to access FFmpeg’s functionality. In this example, we’ll be adding a simple web server that’ll be making FFmpeg. Installing the FFMPEG library can help users record videos with Headless browsers. That's the reason it's reasonable for us to install it into the Docker Image as well. To make it easier, you can follow the steps below. Create a docker image file with this content.
- For Linux, macOS, or Windows (Pro/Enterprise/Education) use the current release version of Docker
- Windows Home requires WSL 2 and the current Edge version of Docker Desktop (see instructions here). This can also be used for Windows Pro/Enterprise/Education.
- Fork the Home Assistant core repository.
- Clone the repository to your computer. Windows users need to place their files within WSL file system to prevent performance degradation.
- Open the repository using Visual Studio code.
When you open this repository with Visual Studio code you are asked to 'Reopen in Container', this will start the build of the container.
The devcontainer comes with some useful tasks to help you with development, you can start these tasks by opening the command palette and select
Tasks: Run Task then select the task you want to run.
When a task is currently running (like
Preview for the docs), it can be restarted by opening the command palette and selecting
Tasks: Restart Running Task, then select the task you want to restart.
It is also possible to set up a more traditional development environment. See the section for your operating system. Make sure your Python version is 3.8 or later.
Developing on Linux#
Install the core dependencies.
Developing on Windows#
To develop on Windows, you will need to use the Linux subsystem (WSL). Follow the WSL installation instructions and install Ubuntu from the Windows Store. Once you're able to access Linux, follow the Linux instructions.
If you find that you cannot open the development instance via http://localhost:8123 when using WSL, instead, within a WSL terminal, find the
inet address of the
eth0 adaptor by running
ip addr show eth0. Then use this address, excluding the CIDR block, to access the development instance, i.e. if your
inet is listed as
172.20.37.6/20, use http://172.20.37.6:8123.
Freshly installed WSL distribution#
The first time a WSL distribution is started, and the default WSL user account is created, the Windows drives will still be mounted with all files owned by
root:root instead of owned by the default user, i.e. with
uid=0,gid=0 included in the mount options as shown by:
This will cause the
setup script to fail with an unrelated error if the local repository is on a Windows drive. To recover, WSL must be restarted after which the Windows drives will be mounted with all files owned by the default WSL user. This can be accomplished by simply restarting the computer, or by issuing the following command from a windows command prompt:
After WSL is restarted, the mount's uid and gid will match the default user.
Developing on macOS#
Install Homebrew, then use that to install the dependencies:
If you encounter build issues with
cryptography when running the
script/setup script below, check the cryptography documentation for installation instructions.
Install Ffmpeg In Docker Container Free
Setup Local Repository#
Visit the Home Assistant Core repository and click Fork.Once forked, setup your local copy of the source using the commands:
Install the requirements with a provided script named
This will create a virtual environment and install all necessary requirements. You're now set!
Each time you start a new terminal session, you will need to activate your virtual environment:
After that you can run Home Assistant like this:
The Home Assistant configuration is stored in the
config directory in your repository.