Skip to main content

Oracle Cloud

This section covers deploying Live Transcoder on Oracle Cloud Infrastructure (OCI).

Launch host instance

We provide Live Transcoder as a Docker container downloadable from DockerHub. Therefore you need to have a host instance to run the Docker container on.

Live Transcoder needs an Nvidia GPU to work, so you need to use an instance with Nvidia GPU. In Oracle Cloud, we recommend GPU2 instance shapes with Nvidia Tesla P100 GPUs as they provide a good price/performance ratio, specifically the VM.GPU2.1 shape. We do not support Ada or Hopper architectures yet.

Select the region

We recommend selecting the region closest to you for the lowest latency. However, GPU instance prices and availability vary between regions, so you may check other regions as well.

Select the right instance size

  • We recommend you start with VM.GPU2.1 (12 OCPUs, single Nvidia Tesla P100) and change the instance shape if needed.
  • Generally, you'll need two OCPUs per 1080p h264 4:2:0 8bit stream and sixteen OCPUs per 1080p h264 4:2:2 10bit stream, but this may vary with the resolution/quality/codec used.
  • We strongly recommend you increase the instance size (vCPUs) if the overall CPU utilization exceeds 80%.
  • Our support can help you choose the right instance size.

GPU instance limit

  • Oracle Cloud limits how many GPU instances a user can run.

Check your current limits

  • You can check your current limit for your region on the Limits page. You need to specify the AD (availability domain) in Scope to see the GPU limits. Search for GPUs for GPU2 based VM and BM Instances (VM.GPU2.1, therefore GPU2). Your current quota is the Service Limit column.

  • The quota value says the maximum number of instances of this shape you can run in total.

Quota increase request

  • You can request the quota increase, but Oracle needs to apply your request.
  • These limits are applied per region and AD (availability domain), so you must request the quota increase in all regions/AD you plan to run Live Transcoder.
  • If you are unsure what value request, ask our support, they can help you choose the best value.
  • When your quota is increased, you can launch the host instance.

Firewall rules

By default, all network ports except SSH are closed for incoming traffic by the Oracle Cloud firewall feature called "Network Security Groups" and must be enabled manually to receive traffic. Live Transcoder needs these ports opened:

  • SSH (TCP port 22) - for SSH
  • HTTP (TCP port 80) - needed for access to web UI and HLS output
  • HTTPS (TCP port 443) - needed for secure access to web UI and HLS output
  • MPEG-TS over RTP/UDP/SRT (UDP ports) - add custom ports for your MPEG-TS streams
  • NDI (TCP&UDP) - needed for NDI to work, the easiest way is to open port range 5353-7999 for both TCP & UDP [NDI docs]
  • RTMP input (TCP port 1935) - needed for RTMP server to listen on this port

Create a new security group

Network Security Groups belong to VCN (Virtual Cloud Network) level. You can create a new one there. You'll attach the security group to your instance later during the creation of the instance.

We recommend naming the security group live-transcoder-group. You can reuse it later (or modify it) for another Live Transcoder instance.

Create the compute instance

Head to the Instances page and create a new instance.

Images and shapes

Use the Oracle Linux 8 image. Select your preferred GPU shape.

Networking

In Advanced Options, enable the use of Network Security Groups and select the one you've previously created.

SSH keys

  • a.k.a. SSH private key
  • It's used to ssh to the instance terminal.
  • Oracle cloud won't show you the key again.
  • Download it and keep it safe.

Boot volume (storage)

Live Transcoder itself needs 100GiB of storage.

If you plan to use HLS outputs heavily, increase the value by additional calculated storage.

warning

When using an instance with a smaller storage capacity, it is important to note that a significant portion of the free space is used for storing log messages in the journal. These log messages are crucial for diagnostics. Insufficient space for the journal can limit the ability to diagnose issues with the instance effectively.
To manage disk space efficiently, ensure you set the correct size for SystemKeepFree= and RuntimeKeepFree= in /etc/systemd/journald.conf.

Create it!

Prepare host OS

SSH to the host OS

You can find the instance's public IP address in the list of your instances.

Oracle Linux's default user is opc, use the following command to ssh to your instance (to the host OS). On Linux and macOS, you'll first need to limit the key file permissions using the chmod command.

chmod 400 path/to/your-private-key.pem
ssh -i path/to/your-private-key.pem opc@INSTANCE_IP

Disable firewalld

Oracle cloud instances are protected by the Network Security Groups (the cloud firewall feature), so you can stop and disable the in-OS firewall.

sudo systemctl disable firewalld --now

Update the OS

This takes several minutes.

sudo dnf update -y

Disable nouveau driver

nouveau, the open-source driver for Nvidia GPUs is usually pre-loaded. It must be disabled to install Nvidia's own driver.

sudo modprobe -r nouveau

Prevent loading of the nouveau kernel module at boot.

echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist.conf

Install Nvidia driver

Prerequisites

sudo dnf --enablerepo=ol8_developer_EPEL -y install dkms
sudo dnf -y config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo

Install the driver

sudo dnf module -y install nvidia-driver:515-dkms
sudo modprobe nvidia

Check Nvidia driver works

The following command should print a meaningful output.

nvidia-smi

Install Docker CE

Installation

Follow the Setting up Docker on CentOS 7/8 chapter from the official Nvidia docs (Centos 8 variant)

Use docker command without sudo

This allows running the docker command as a non-root user.

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

Install NVIDIA Container Toolkit

Follow the Setting up NVIDIA Container Toolkit chapter from the official Nvidia docs (Centos 8 variant). You need to use the following command for setting up the Nvidia Container toolkit repository instead of the official one (Oracle Linux 8 isn't supported by their command).

curl -s -L https://nvidia.github.io/libnvidia-container/centos8/libnvidia-container.repo | sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo

docker-compose installation

We use the docker-compose tool for making it easier to launch our Docker container. Use the following command to install the docker-compose tool.

sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Next, check that the docker-compose tool is successfully installed. The following command should return meaningful output.

docker-compose version

Disable mDNS on the host

The mDNS service mustn't be active in the host OS for NDI discovery to work. If present, this command removes it from the host OS:

sudo yum list installed avahi
sudo yum remove avahi

Increase max UDP kernel buffer size

To receive and send streams with overall stream bitrate of 21mbps+, Live Transcoder needs to increase the UDP kernel buffer size. However, the default maximum size is too low so it needs to be increased.

SYSCTL_CONF="/etc/sysctl.d/10-udp-buffer-size.conf"
sudo sh -c "echo '#kernel send a receive windows buffer sizes' > $SYSCTL_CONF"
sudo sh -c "echo 'net.core.rmem_max=262144000' >> $SYSCTL_CONF"
sudo sh -c "echo 'net.core.wmem_max=262144000' >> $SYSCTL_CONF"
sudo sh -c "echo 'net.core.rmem_default=262144000' >> $SYSCTL_CONF"
sudo sh -c "echo 'net.core.wmem_default=262144000' >> $SYSCTL_CONF"

Now load the updated config file.

sudo sysctl -p $SYSCTL_CONF

Increase txqueuelen for network interfaces

To stream out high-bitrate codecs (e.g., JPEG2000 or JPEG-XS), also txqueuelen parameter should be increased for the respective network interface(s). Below, we set the parameter for all available Ethernet network interfaces (by using KERNEL=="e*"):

sudo bash -c 'cat > /etc/udev/rules.d/80-txqueuelen.rules' << EOF
SUBSYSTEM=="net", ACTION=="add|change", KERNEL=="e*", ATTR{tx_queue_len}="10000"
EOF

To apply the changes immediately, run:

sudo udevadm control --reload-rules && sudo udevadm trigger