Video decoding converts compressed data into a raw image with pixel-by-pixel color values.
Video encoding takes a raw image and converts it into a compressed format
Video transcoding converts from one compressed format to another, by first decoding then re-encoding
Transcoding is used primarily when watching away from home, to compress the video so it uses up less bandwidth
Video is transmitted using different codecs, which define how the pixel data is compressed. Common codecs include MPEG2, H264, and HEVC.
Each codec also has an associated resolution (like 480p, 720p, 1080p, etc), and a bitrate (2mbps, 4mbps, 8mbps). The resolution defines how many pixels are in the picture, and the bitrate is how much bandwidth or disk storage is used per second of video.
To watch a video, you have to decode using the codec to uncompress the data and turn it into a picture.
Transcoding is when you decode and then re-encode. For example, you may take a MPEG2 1080p 16mbps video stream and transcode it to a H264 720p 4mbps stream.
Channels and Channels DVR Server do not require transcoding, transcoding is disabled by default while you are at home.
However, when you’re away from home transcoding can be helpful because your data plan is usually limited and you don’t want to send large video files over the internet and use up all your data. In these cases, you can control the bitrate and resolution in the app and Channels DVR Server will transcode the videos in real-time to a smaller size and resolution to limit the bandwidth usage.
Software transcoding uses the CPU to decode and re-encode video. This is an expensive task. This will typically max out your CPU usage and limit the number of frames that can be encoded per second.
With video decoding and encoding becoming so popular with consumers, many manufacturers have started including dedicated video chips on their CPUs and GPUs that can perform transcoding much more quickly. This is known as Hardware accelerated transcoding. Support for hardware transcoding depends on your cpu and graphics card model as well as your operating system drivers.
Modern Intel CPUs include support for QuickSync, which offers hardware-accelerated video decoding, encoding and deinterlacing.
Channels DVR will attempt to use QuickSync support via Windows MediaFoundation APIs, and fallback to Intel Media SDK APIs for older CPU models.
Channels DVR accesses QuickSync functionality via VAAPI, which requires the
i915 kernel driver for Intel HD Graphics.
Docker containers can access QuickSync as long as you pass through
/dev/dri into your container.
This can be done via the
docker run --device /dev/dri:/dev/dri ... fancybits/channels-dvr:latest
or via your
channels-dvr: ... devices: /dev/dri:/dev/dri image: fancybits/channels-dvr:latest
QuickSync is supported via VAAPI on modern FreeBSD kernels. You will need to install the
Install the drm-kmod package
$ sudo pkg install drm-kmod
Add to your /etc/rc.conf.d/intel file:
Many Nvidia GPUs support NVENC APIs for hardware encoding.
Hardware transcoding support should be detected automatically as long as the latest Nvidia drivers are installed.
The official nvidia drivers must be installed. If your distribution uses the open-source nouveau driver, you will need to switch to the nvidia driver instead.
Nvidia does not provide official support for CUDA on FreeBSD, so hardware acceleration via NVENC is currently not available.
Hardware transcoding is available via the new AMF API.
Transcoder will be detected automatically as long as latest AMD drivers are installed.
Find the latest AMD software package for your GPU/CPU here: https://www.amd.com/en/support/
AMF support on Linux is still experimental, but should work on latest Ubuntu. Contact [email protected] for details.
Channels DVR server can run on some Android devices, like the Nvidia SHIELD. Hardware transcoding is enabled automatically using the Android MediaCodec APIs.
Hardware transcoding is available on the Raspberry Pi 4, via the V4L2 API.
Older models and 32-bit OS can also transcode via OMX, but it is generally slower and less reliable.
When the DVR software starts, it will probe different hardware drivers to see if it can find one that works.
Select Settings > Transcoder > Rescan Hardware to check again manually, or select View Debug Info to see the details and errors from each hardware transcoder probed.