Repository files navigation

This tutorial is now DEPRECATED

DEPRECATED and unmaintained, don't use this tutorial

Go to belabox.net for the current installation instructions

Intro

You should consider joining the Discord if you want to use BELABOX. We have a lot of other relevant information there and you can also get help if you're running into problems.

Check out my Twitch channel for sample VODs streamed using BELABOX. If you're using BELABOX, please consider sponsoring the ongoing development.

Setting up BELABOX on a Jetson Nano

These instructions were written for L4T 32.4.4 (Based on Ubuntu 18.4 LTS) and last tested on Dec 20th, 2020. Consider this a temporary guide to setting up BELABOX while a more convenient solution is being developed.

Step -1

You'll need another Internet-connected machine to serve as the ingest for your srtla-bonded stream. This can be a low cost VPS or a Linux computer (even a low power RPi) at home. Follow the receiver instructions in the srtla readme for setting it up.

Step 1

Set up a micro SD card with L4T following the instructions from NVIDIA for Jetson Nano 4GB or for Jetson Nano 2GB. Note that you can do the initial setup either using a monitor, mouse & keyboard or in headless mode using the USB serial console. For the rest of the tutorial we'll assume that the system was set up correctly and that you have SSH access to the Jetson Nano via the Ethernet network.

Step 2

Updating the system packages (this may take a while):

sudo apt-get update
sudo apt-get dist-upgrade

Step 3

Installing the required dependencies:

sudo apt-get install nano build-essential git tcl libssl1.0-dev nodejs npm usb-modeswitch libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

Step 4

Add the google DNS servers so you have some resolvers accessible through any Internet-connected interfaces, as opposed to the servers accessible through a single mobile operator that you may be getting from DHCP:

printf "\nnameserver 8.8.8.8\nnameserver 8.8.4.4\n" | sudo tee -a /etc/resolvconf/resolv.conf.d/head

Let's set up source routing for any wired modems. This uses a dhclient hook, which will execute for dhcp entries in /etc/network/interfaces or if called manually, but not for NetworkManager-managed devices. /etc/network/interfaces takes over configuring the ethX and usbX network interfaces from NetworkManager

sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/dhclient-source-routing -O /etc/dhcp/dhclient-exit-hooks.d/dhclient-source-routing
sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/interfaces -O /etc/network/interfaces
printf "100 usb0\n101 usb1\n102 usb2\n103 usb3\n104 usb4\n" | sudo tee -a /etc/iproute2/rt_tables
printf "110 eth0\n111 eth1\n112 eth2\n113 eth3\n114 eth4\n" | sudo tee -a /etc/iproute2/rt_tables

Also set up source routing for WiFi with NetworkManager:

sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/nm-source-routing -O /etc/NetworkManager/dispatcher.d/nm-source-routing
sudo chmod 755 /etc/NetworkManager/dispatcher.d/nm-source-routing
printf "120 wlan0\n121 wlan1\n122 wlan2\n123 wlan3\n124 wlan4\n" | sudo tee -a /etc/iproute2/rt_tables

If you have a WiFi adapter fitted, you can connect to a WiFi network with sudo nmcli device wifi connect <AP NAME> password <WPA password> after rebooting.

We use the /etc/network/interfaces configuration because it seems more reliable than Networkmanager at always bringing up all the interfaces. It also brings up all the modems even when they use the same MAC address (which is the case for several Huawei models), unlike NetworkManager.

Step 5

Disable the virtual Ethernet interface as it will cause naming conflicts if you use modems that get enumerated as usbX devices.

sudo systemctl disable nv-l4t-usb-device-mode.service
sudo reboot

Step 6

Installing (the BELABOX fork of) SRT:

cd
git clone https://github.com/BELABOX/srt.git
cd srt
./configure --prefix=/usr/local
make -j4
sudo make install
sudo ldconfig

Step 7

Building belacoder:

cd
git clone https://github.com/BELABOX/belacoder.git
cd belacoder
make

Step 8

Building srtla:

cd
git clone https://github.com/BELABOX/srtla.git
cd srtla
make

Step 9

Setting up belaUI:

cd
git clone https://github.com/BELABOX/belaUI.git
cd belaUI
git checkout ws_nodejs

Install the Node.js dependencies:

npm install

Edit setup.json with the paths to the belacoder and srtla directories.

You can start the web interface to test it with:

sudo nodejs belaUI.js

At this point BELABOX is ready to use, assuming that you have a capture card / other v4l2 input connected. Open http://address_of_the_jetson in a web browser. It will first ask you to set a password for access.

See the belacoder readme for information about the available pipelines you can select in the Encoder settings menu of the web interface. Configure the srtla settings with the data for your ingest configured at Step -1.

After setting up and confirming that everything is working correctly, you can install belaUI as a system service that starts automatically at boot by running:

sudo ./install_service.sh

Next steps

For practical use, you should configure belaUI to be automatically started at boot and use a phone to control it.

If you become a recurring github sponsor, you'll get a BELABOX cloud remote account allowing you to manage your encoder from any Internet-connected device via cloud.belabox.net. Otherwise you'll need a direct LAN connection to your encoder to access belaUI. Depending on your modem setup, you could make belaUI accessible either through a modem that has both USB (for the Jetson) and WiFI (for the phone) interfaces, or by enabling the hotspot feature on the phone and connecting the Jetson to it as per step 4, or by setting up a Wifi access point on the Jetson Nano - outside the scope of this tutorial.

Receiving the stream

Regardless of how many connections are available, BELABOX always streams via srtla. To receive this stream, you have several options, including:

  1. Become a github sponsor, support the BELABOX project and receive access to our hosted srtla/SRT relay service with servers in the US and France.
  2. Follow the srtla readme to set up a basic relay using srt-live-transmit or another SRT server configured with the equivalent options.
  3. Use a third party docker image configured to receive srtla, such as this one. Note that we can make no guarantees about third party packages being maintained to support future revisions of the srtla software.

Ending notes

If you're not confident following any of the instructions, please wait until we're able to distribute BELABOX in a more convenient format.

Once you're set up, check out the bitrate guide.

This tutorial is now DEPRECATED

DEPRECATED and unmaintained, don't use this tutorial

Go to belabox.net for the current installation instructions

About

No description, website, or topics provided.

Resources

Stars

64 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

This tutorial is now DEPRECATED

DEPRECATED and unmaintained, don't use this tutorial

Go to belabox.net for the current installation instructions

Intro

You should consider joining the Discord if you want to use BELABOX. We have a lot of other relevant information there and you can also get help if you're running into problems.

Check out my Twitch channel for sample VODs streamed using BELABOX. If you're using BELABOX, please consider sponsoring the ongoing development.

Setting up BELABOX on a Jetson Nano

These instructions were written for L4T 32.4.4 (Based on Ubuntu 18.4 LTS) and last tested on Dec 20th, 2020. Consider this a temporary guide to setting up BELABOX while a more convenient solution is being developed.

Step -1

You'll need another Internet-connected machine to serve as the ingest for your srtla-bonded stream. This can be a low cost VPS or a Linux computer (even a low power RPi) at home. Follow the receiver instructions in the srtla readme for setting it up.

Step 1

Set up a micro SD card with L4T following the instructions from NVIDIA for Jetson Nano 4GB or for Jetson Nano 2GB. Note that you can do the initial setup either using a monitor, mouse & keyboard or in headless mode using the USB serial console. For the rest of the tutorial we'll assume that the system was set up correctly and that you have SSH access to the Jetson Nano via the Ethernet network.

Step 2

Updating the system packages (this may take a while):

sudo apt-get update
sudo apt-get dist-upgrade

Step 3

Installing the required dependencies:

sudo apt-get install nano build-essential git tcl libssl1.0-dev nodejs npm usb-modeswitch libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

Step 4

Add the google DNS servers so you have some resolvers accessible through any Internet-connected interfaces, as opposed to the servers accessible through a single mobile operator that you may be getting from DHCP:

printf "\nnameserver 8.8.8.8\nnameserver 8.8.4.4\n" | sudo tee -a /etc/resolvconf/resolv.conf.d/head

Let's set up source routing for any wired modems. This uses a dhclient hook, which will execute for dhcp entries in /etc/network/interfaces or if called manually, but not for NetworkManager-managed devices. /etc/network/interfaces takes over configuring the ethX and usbX network interfaces from NetworkManager

sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/dhclient-source-routing -O /etc/dhcp/dhclient-exit-hooks.d/dhclient-source-routing
sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/interfaces -O /etc/network/interfaces
printf "100 usb0\n101 usb1\n102 usb2\n103 usb3\n104 usb4\n" | sudo tee -a /etc/iproute2/rt_tables
printf "110 eth0\n111 eth1\n112 eth2\n113 eth3\n114 eth4\n" | sudo tee -a /etc/iproute2/rt_tables

Also set up source routing for WiFi with NetworkManager:

sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/nm-source-routing -O /etc/NetworkManager/dispatcher.d/nm-source-routing
sudo chmod 755 /etc/NetworkManager/dispatcher.d/nm-source-routing
printf "120 wlan0\n121 wlan1\n122 wlan2\n123 wlan3\n124 wlan4\n" | sudo tee -a /etc/iproute2/rt_tables

If you have a WiFi adapter fitted, you can connect to a WiFi network with sudo nmcli device wifi connect <AP NAME> password <WPA password> after rebooting.

We use the /etc/network/interfaces configuration because it seems more reliable than Networkmanager at always bringing up all the interfaces. It also brings up all the modems even when they use the same MAC address (which is the case for several Huawei models), unlike NetworkManager.

Step 5

Disable the virtual Ethernet interface as it will cause naming conflicts if you use modems that get enumerated as usbX devices.

sudo systemctl disable nv-l4t-usb-device-mode.service
sudo reboot

Step 6

Installing (the BELABOX fork of) SRT:

cd
git clone https://github.com/BELABOX/srt.git
cd srt
./configure --prefix=/usr/local
make -j4
sudo make install
sudo ldconfig

Step 7

Building belacoder:

cd
git clone https://github.com/BELABOX/belacoder.git
cd belacoder
make

Step 8

Building srtla:

cd
git clone https://github.com/BELABOX/srtla.git
cd srtla
make

Step 9

Setting up belaUI:

cd
git clone https://github.com/BELABOX/belaUI.git
cd belaUI
git checkout ws_nodejs

Install the Node.js dependencies:

npm install

Edit setup.json with the paths to the belacoder and srtla directories.

You can start the web interface to test it with:

sudo nodejs belaUI.js

At this point BELABOX is ready to use, assuming that you have a capture card / other v4l2 input connected. Open http://address_of_the_jetson in a web browser. It will first ask you to set a password for access.

See the belacoder readme for information about the available pipelines you can select in the Encoder settings menu of the web interface. Configure the srtla settings with the data for your ingest configured at Step -1.

After setting up and confirming that everything is working correctly, you can install belaUI as a system service that starts automatically at boot by running:

sudo ./install_service.sh

Next steps

For practical use, you should configure belaUI to be automatically started at boot and use a phone to control it.

If you become a recurring github sponsor, you'll get a BELABOX cloud remote account allowing you to manage your encoder from any Internet-connected device via cloud.belabox.net. Otherwise you'll need a direct LAN connection to your encoder to access belaUI. Depending on your modem setup, you could make belaUI accessible either through a modem that has both USB (for the Jetson) and WiFI (for the phone) interfaces, or by enabling the hotspot feature on the phone and connecting the Jetson to it as per step 4, or by setting up a Wifi access point on the Jetson Nano - outside the scope of this tutorial.

Receiving the stream

Regardless of how many connections are available, BELABOX always streams via srtla. To receive this stream, you have several options, including:

  1. Become a github sponsor, support the BELABOX project and receive access to our hosted srtla/SRT relay service with servers in the US and France.
  2. Follow the srtla readme to set up a basic relay using srt-live-transmit or another SRT server configured with the equivalent options.
  3. Use a third party docker image configured to receive srtla, such as this one. Note that we can make no guarantees about third party packages being maintained to support future revisions of the srtla software.

Ending notes

If you're not confident following any of the instructions, please wait until we're able to distribute BELABOX in a more convenient format.

Once you're set up, check out the bitrate guide.

This tutorial is now DEPRECATED

DEPRECATED and unmaintained, don't use this tutorial

Go to belabox.net for the current installation instructions

About

No description, website, or topics provided.

Resources

Stars

64 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

This tutorial is now DEPRECATED

DEPRECATED and unmaintained, don't use this tutorial

Go to belabox.net for the current installation instructions

Intro

You should consider joining the Discord if you want to use BELABOX. We have a lot of other relevant information there and you can also get help if you're running into problems.

Check out my Twitch channel for sample VODs streamed using BELABOX. If you're using BELABOX, please consider sponsoring the ongoing development.

Setting up BELABOX on a Jetson Nano

These instructions were written for L4T 32.4.4 (Based on Ubuntu 18.4 LTS) and last tested on Dec 20th, 2020. Consider this a temporary guide to setting up BELABOX while a more convenient solution is being developed.

Step -1

You'll need another Internet-connected machine to serve as the ingest for your srtla-bonded stream. This can be a low cost VPS or a Linux computer (even a low power RPi) at home. Follow the receiver instructions in the srtla readme for setting it up.

Step 1

Set up a micro SD card with L4T following the instructions from NVIDIA for Jetson Nano 4GB or for Jetson Nano 2GB. Note that you can do the initial setup either using a monitor, mouse & keyboard or in headless mode using the USB serial console. For the rest of the tutorial we'll assume that the system was set up correctly and that you have SSH access to the Jetson Nano via the Ethernet network.

Step 2

Updating the system packages (this may take a while):

sudo apt-get update
sudo apt-get dist-upgrade

Step 3

Installing the required dependencies:

sudo apt-get install nano build-essential git tcl libssl1.0-dev nodejs npm usb-modeswitch libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

Step 4

Add the google DNS servers so you have some resolvers accessible through any Internet-connected interfaces, as opposed to the servers accessible through a single mobile operator that you may be getting from DHCP:

printf "\nnameserver 8.8.8.8\nnameserver 8.8.4.4\n" | sudo tee -a /etc/resolvconf/resolv.conf.d/head

Let's set up source routing for any wired modems. This uses a dhclient hook, which will execute for dhcp entries in /etc/network/interfaces or if called manually, but not for NetworkManager-managed devices. /etc/network/interfaces takes over configuring the ethX and usbX network interfaces from NetworkManager

sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/dhclient-source-routing -O /etc/dhcp/dhclient-exit-hooks.d/dhclient-source-routing
sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/interfaces -O /etc/network/interfaces
printf "100 usb0\n101 usb1\n102 usb2\n103 usb3\n104 usb4\n" | sudo tee -a /etc/iproute2/rt_tables
printf "110 eth0\n111 eth1\n112 eth2\n113 eth3\n114 eth4\n" | sudo tee -a /etc/iproute2/rt_tables

Also set up source routing for WiFi with NetworkManager:

sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/nm-source-routing -O /etc/NetworkManager/dispatcher.d/nm-source-routing
sudo chmod 755 /etc/NetworkManager/dispatcher.d/nm-source-routing
printf "120 wlan0\n121 wlan1\n122 wlan2\n123 wlan3\n124 wlan4\n" | sudo tee -a /etc/iproute2/rt_tables

If you have a WiFi adapter fitted, you can connect to a WiFi network with sudo nmcli device wifi connect <AP NAME> password <WPA password> after rebooting.

We use the /etc/network/interfaces configuration because it seems more reliable than Networkmanager at always bringing up all the interfaces. It also brings up all the modems even when they use the same MAC address (which is the case for several Huawei models), unlike NetworkManager.

Step 5

Disable the virtual Ethernet interface as it will cause naming conflicts if you use modems that get enumerated as usbX devices.

sudo systemctl disable nv-l4t-usb-device-mode.service
sudo reboot

Step 6

Installing (the BELABOX fork of) SRT:

cd
git clone https://github.com/BELABOX/srt.git
cd srt
./configure --prefix=/usr/local
make -j4
sudo make install
sudo ldconfig

Step 7

Building belacoder:

cd
git clone https://github.com/BELABOX/belacoder.git
cd belacoder
make

Step 8

Building srtla:

cd
git clone https://github.com/BELABOX/srtla.git
cd srtla
make

Step 9

Setting up belaUI:

cd
git clone https://github.com/BELABOX/belaUI.git
cd belaUI
git checkout ws_nodejs

Install the Node.js dependencies:

npm install

Edit setup.json with the paths to the belacoder and srtla directories.

You can start the web interface to test it with:

sudo nodejs belaUI.js

At this point BELABOX is ready to use, assuming that you have a capture card / other v4l2 input connected. Open http://address_of_the_jetson in a web browser. It will first ask you to set a password for access.

See the belacoder readme for information about the available pipelines you can select in the Encoder settings menu of the web interface. Configure the srtla settings with the data for your ingest configured at Step -1.

After setting up and confirming that everything is working correctly, you can install belaUI as a system service that starts automatically at boot by running:

sudo ./install_service.sh

Next steps

For practical use, you should configure belaUI to be automatically started at boot and use a phone to control it.

If you become a recurring github sponsor, you'll get a BELABOX cloud remote account allowing you to manage your encoder from any Internet-connected device via cloud.belabox.net. Otherwise you'll need a direct LAN connection to your encoder to access belaUI. Depending on your modem setup, you could make belaUI accessible either through a modem that has both USB (for the Jetson) and WiFI (for the phone) interfaces, or by enabling the hotspot feature on the phone and connecting the Jetson to it as per step 4, or by setting up a Wifi access point on the Jetson Nano - outside the scope of this tutorial.

Receiving the stream

Regardless of how many connections are available, BELABOX always streams via srtla. To receive this stream, you have several options, including:

  1. Become a github sponsor, support the BELABOX project and receive access to our hosted srtla/SRT relay service with servers in the US and France.
  2. Follow the srtla readme to set up a basic relay using srt-live-transmit or another SRT server configured with the equivalent options.
  3. Use a third party docker image configured to receive srtla, such as this one. Note that we can make no guarantees about third party packages being maintained to support future revisions of the srtla software.

Ending notes

If you're not confident following any of the instructions, please wait until we're able to distribute BELABOX in a more convenient format.

Once you're set up, check out the bitrate guide.

This tutorial is now DEPRECATED

DEPRECATED and unmaintained, don't use this tutorial

Go to belabox.net for the current installation instructions

About

No description, website, or topics provided.

Resources

Stars

64 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

This tutorial is now DEPRECATED

DEPRECATED and unmaintained, don't use this tutorial

Go to belabox.net for the current installation instructions

Intro

You should consider joining the Discord if you want to use BELABOX. We have a lot of other relevant information there and you can also get help if you're running into problems.

Check out my Twitch channel for sample VODs streamed using BELABOX. If you're using BELABOX, please consider sponsoring the ongoing development.

Setting up BELABOX on a Jetson Nano

These instructions were written for L4T 32.4.4 (Based on Ubuntu 18.4 LTS) and last tested on Dec 20th, 2020. Consider this a temporary guide to setting up BELABOX while a more convenient solution is being developed.

Step -1

You'll need another Internet-connected machine to serve as the ingest for your srtla-bonded stream. This can be a low cost VPS or a Linux computer (even a low power RPi) at home. Follow the receiver instructions in the srtla readme for setting it up.

Step 1

Set up a micro SD card with L4T following the instructions from NVIDIA for Jetson Nano 4GB or for Jetson Nano 2GB. Note that you can do the initial setup either using a monitor, mouse & keyboard or in headless mode using the USB serial console. For the rest of the tutorial we'll assume that the system was set up correctly and that you have SSH access to the Jetson Nano via the Ethernet network.

Step 2

Updating the system packages (this may take a while):

sudo apt-get update
sudo apt-get dist-upgrade

Step 3

Installing the required dependencies:

sudo apt-get install nano build-essential git tcl libssl1.0-dev nodejs npm usb-modeswitch libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

Step 4

Add the google DNS servers so you have some resolvers accessible through any Internet-connected interfaces, as opposed to the servers accessible through a single mobile operator that you may be getting from DHCP:

printf "\nnameserver 8.8.8.8\nnameserver 8.8.4.4\n" | sudo tee -a /etc/resolvconf/resolv.conf.d/head

Let's set up source routing for any wired modems. This uses a dhclient hook, which will execute for dhcp entries in /etc/network/interfaces or if called manually, but not for NetworkManager-managed devices. /etc/network/interfaces takes over configuring the ethX and usbX network interfaces from NetworkManager

sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/dhclient-source-routing -O /etc/dhcp/dhclient-exit-hooks.d/dhclient-source-routing
sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/interfaces -O /etc/network/interfaces
printf "100 usb0\n101 usb1\n102 usb2\n103 usb3\n104 usb4\n" | sudo tee -a /etc/iproute2/rt_tables
printf "110 eth0\n111 eth1\n112 eth2\n113 eth3\n114 eth4\n" | sudo tee -a /etc/iproute2/rt_tables

Also set up source routing for WiFi with NetworkManager:

sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/nm-source-routing -O /etc/NetworkManager/dispatcher.d/nm-source-routing
sudo chmod 755 /etc/NetworkManager/dispatcher.d/nm-source-routing
printf "120 wlan0\n121 wlan1\n122 wlan2\n123 wlan3\n124 wlan4\n" | sudo tee -a /etc/iproute2/rt_tables

If you have a WiFi adapter fitted, you can connect to a WiFi network with sudo nmcli device wifi connect <AP NAME> password <WPA password> after rebooting.

We use the /etc/network/interfaces configuration because it seems more reliable than Networkmanager at always bringing up all the interfaces. It also brings up all the modems even when they use the same MAC address (which is the case for several Huawei models), unlike NetworkManager.

Step 5

Disable the virtual Ethernet interface as it will cause naming conflicts if you use modems that get enumerated as usbX devices.

sudo systemctl disable nv-l4t-usb-device-mode.service
sudo reboot

Step 6

Installing (the BELABOX fork of) SRT:

cd
git clone https://github.com/BELABOX/srt.git
cd srt
./configure --prefix=/usr/local
make -j4
sudo make install
sudo ldconfig

Step 7

Building belacoder:

cd
git clone https://github.com/BELABOX/belacoder.git
cd belacoder
make

Step 8

Building srtla:

cd
git clone https://github.com/BELABOX/srtla.git
cd srtla
make

Step 9

Setting up belaUI:

cd
git clone https://github.com/BELABOX/belaUI.git
cd belaUI
git checkout ws_nodejs

Install the Node.js dependencies:

npm install

Edit setup.json with the paths to the belacoder and srtla directories.

You can start the web interface to test it with:

sudo nodejs belaUI.js

At this point BELABOX is ready to use, assuming that you have a capture card / other v4l2 input connected. Open http://address_of_the_jetson in a web browser. It will first ask you to set a password for access.

See the belacoder readme for information about the available pipelines you can select in the Encoder settings menu of the web interface. Configure the srtla settings with the data for your ingest configured at Step -1.

After setting up and confirming that everything is working correctly, you can install belaUI as a system service that starts automatically at boot by running:

sudo ./install_service.sh

Next steps

For practical use, you should configure belaUI to be automatically started at boot and use a phone to control it.

If you become a recurring github sponsor, you'll get a BELABOX cloud remote account allowing you to manage your encoder from any Internet-connected device via cloud.belabox.net. Otherwise you'll need a direct LAN connection to your encoder to access belaUI. Depending on your modem setup, you could make belaUI accessible either through a modem that has both USB (for the Jetson) and WiFI (for the phone) interfaces, or by enabling the hotspot feature on the phone and connecting the Jetson to it as per step 4, or by setting up a Wifi access point on the Jetson Nano - outside the scope of this tutorial.

Receiving the stream

Regardless of how many connections are available, BELABOX always streams via srtla. To receive this stream, you have several options, including:

  1. Become a github sponsor, support the BELABOX project and receive access to our hosted srtla/SRT relay service with servers in the US and France.
  2. Follow the srtla readme to set up a basic relay using srt-live-transmit or another SRT server configured with the equivalent options.
  3. Use a third party docker image configured to receive srtla, such as this one. Note that we can make no guarantees about third party packages being maintained to support future revisions of the srtla software.

Ending notes

If you're not confident following any of the instructions, please wait until we're able to distribute BELABOX in a more convenient format.

Once you're set up, check out the bitrate guide.

This tutorial is now DEPRECATED

DEPRECATED and unmaintained, don't use this tutorial

Go to belabox.net for the current installation instructions

About

No description, website, or topics provided.

Resources

Stars

64 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

This tutorial is now DEPRECATED

DEPRECATED and unmaintained, don't use this tutorial

Go to belabox.net for the current installation instructions

Intro

You should consider joining the Discord if you want to use BELABOX. We have a lot of other relevant information there and you can also get help if you're running into problems.

Check out my Twitch channel for sample VODs streamed using BELABOX. If you're using BELABOX, please consider sponsoring the ongoing development.

Setting up BELABOX on a Jetson Nano

These instructions were written for L4T 32.4.4 (Based on Ubuntu 18.4 LTS) and last tested on Dec 20th, 2020. Consider this a temporary guide to setting up BELABOX while a more convenient solution is being developed.

Step -1

You'll need another Internet-connected machine to serve as the ingest for your srtla-bonded stream. This can be a low cost VPS or a Linux computer (even a low power RPi) at home. Follow the receiver instructions in the srtla readme for setting it up.

Step 1

Set up a micro SD card with L4T following the instructions from NVIDIA for Jetson Nano 4GB or for Jetson Nano 2GB. Note that you can do the initial setup either using a monitor, mouse & keyboard or in headless mode using the USB serial console. For the rest of the tutorial we'll assume that the system was set up correctly and that you have SSH access to the Jetson Nano via the Ethernet network.

Step 2

Updating the system packages (this may take a while):

sudo apt-get update
sudo apt-get dist-upgrade

Step 3

Installing the required dependencies:

sudo apt-get install nano build-essential git tcl libssl1.0-dev nodejs npm usb-modeswitch libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

Step 4

Add the google DNS servers so you have some resolvers accessible through any Internet-connected interfaces, as opposed to the servers accessible through a single mobile operator that you may be getting from DHCP:

printf "\nnameserver 8.8.8.8\nnameserver 8.8.4.4\n" | sudo tee -a /etc/resolvconf/resolv.conf.d/head

Let's set up source routing for any wired modems. This uses a dhclient hook, which will execute for dhcp entries in /etc/network/interfaces or if called manually, but not for NetworkManager-managed devices. /etc/network/interfaces takes over configuring the ethX and usbX network interfaces from NetworkManager

sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/dhclient-source-routing -O /etc/dhcp/dhclient-exit-hooks.d/dhclient-source-routing
sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/interfaces -O /etc/network/interfaces
printf "100 usb0\n101 usb1\n102 usb2\n103 usb3\n104 usb4\n" | sudo tee -a /etc/iproute2/rt_tables
printf "110 eth0\n111 eth1\n112 eth2\n113 eth3\n114 eth4\n" | sudo tee -a /etc/iproute2/rt_tables

Also set up source routing for WiFi with NetworkManager:

sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/nm-source-routing -O /etc/NetworkManager/dispatcher.d/nm-source-routing
sudo chmod 755 /etc/NetworkManager/dispatcher.d/nm-source-routing
printf "120 wlan0\n121 wlan1\n122 wlan2\n123 wlan3\n124 wlan4\n" | sudo tee -a /etc/iproute2/rt_tables

If you have a WiFi adapter fitted, you can connect to a WiFi network with sudo nmcli device wifi connect <AP NAME> password <WPA password> after rebooting.

We use the /etc/network/interfaces configuration because it seems more reliable than Networkmanager at always bringing up all the interfaces. It also brings up all the modems even when they use the same MAC address (which is the case for several Huawei models), unlike NetworkManager.

Step 5

Disable the virtual Ethernet interface as it will cause naming conflicts if you use modems that get enumerated as usbX devices.

sudo systemctl disable nv-l4t-usb-device-mode.service
sudo reboot

Step 6

Installing (the BELABOX fork of) SRT:

cd
git clone https://github.com/BELABOX/srt.git
cd srt
./configure --prefix=/usr/local
make -j4
sudo make install
sudo ldconfig

Step 7

Building belacoder:

cd
git clone https://github.com/BELABOX/belacoder.git
cd belacoder
make

Step 8

Building srtla:

cd
git clone https://github.com/BELABOX/srtla.git
cd srtla
make

Step 9

Setting up belaUI:

cd
git clone https://github.com/BELABOX/belaUI.git
cd belaUI
git checkout ws_nodejs

Install the Node.js dependencies:

npm install

Edit setup.json with the paths to the belacoder and srtla directories.

You can start the web interface to test it with:

sudo nodejs belaUI.js

At this point BELABOX is ready to use, assuming that you have a capture card / other v4l2 input connected. Open http://address_of_the_jetson in a web browser. It will first ask you to set a password for access.

See the belacoder readme for information about the available pipelines you can select in the Encoder settings menu of the web interface. Configure the srtla settings with the data for your ingest configured at Step -1.

After setting up and confirming that everything is working correctly, you can install belaUI as a system service that starts automatically at boot by running:

sudo ./install_service.sh

Next steps

For practical use, you should configure belaUI to be automatically started at boot and use a phone to control it.

If you become a recurring github sponsor, you'll get a BELABOX cloud remote account allowing you to manage your encoder from any Internet-connected device via cloud.belabox.net. Otherwise you'll need a direct LAN connection to your encoder to access belaUI. Depending on your modem setup, you could make belaUI accessible either through a modem that has both USB (for the Jetson) and WiFI (for the phone) interfaces, or by enabling the hotspot feature on the phone and connecting the Jetson to it as per step 4, or by setting up a Wifi access point on the Jetson Nano - outside the scope of this tutorial.

Receiving the stream

Regardless of how many connections are available, BELABOX always streams via srtla. To receive this stream, you have several options, including:

  1. Become a github sponsor, support the BELABOX project and receive access to our hosted srtla/SRT relay service with servers in the US and France.
  2. Follow the srtla readme to set up a basic relay using srt-live-transmit or another SRT server configured with the equivalent options.
  3. Use a third party docker image configured to receive srtla, such as this one. Note that we can make no guarantees about third party packages being maintained to support future revisions of the srtla software.

Ending notes

If you're not confident following any of the instructions, please wait until we're able to distribute BELABOX in a more convenient format.

Once you're set up, check out the bitrate guide.

This tutorial is now DEPRECATED

DEPRECATED and unmaintained, don't use this tutorial

Go to belabox.net for the current installation instructions

About

No description, website, or topics provided.

Resources

Stars

64 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

This tutorial is now DEPRECATED

DEPRECATED and unmaintained, don't use this tutorial

Go to belabox.net for the current installation instructions

Intro

You should consider joining the Discord if you want to use BELABOX. We have a lot of other relevant information there and you can also get help if you're running into problems.

Check out my Twitch channel for sample VODs streamed using BELABOX. If you're using BELABOX, please consider sponsoring the ongoing development.

Setting up BELABOX on a Jetson Nano

These instructions were written for L4T 32.4.4 (Based on Ubuntu 18.4 LTS) and last tested on Dec 20th, 2020. Consider this a temporary guide to setting up BELABOX while a more convenient solution is being developed.

Step -1

You'll need another Internet-connected machine to serve as the ingest for your srtla-bonded stream. This can be a low cost VPS or a Linux computer (even a low power RPi) at home. Follow the receiver instructions in the srtla readme for setting it up.

Step 1

Set up a micro SD card with L4T following the instructions from NVIDIA for Jetson Nano 4GB or for Jetson Nano 2GB. Note that you can do the initial setup either using a monitor, mouse & keyboard or in headless mode using the USB serial console. For the rest of the tutorial we'll assume that the system was set up correctly and that you have SSH access to the Jetson Nano via the Ethernet network.

Step 2

Updating the system packages (this may take a while):

sudo apt-get update
sudo apt-get dist-upgrade

Step 3

Installing the required dependencies:

sudo apt-get install nano build-essential git tcl libssl1.0-dev nodejs npm usb-modeswitch libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

Step 4

Add the google DNS servers so you have some resolvers accessible through any Internet-connected interfaces, as opposed to the servers accessible through a single mobile operator that you may be getting from DHCP:

printf "\nnameserver 8.8.8.8\nnameserver 8.8.4.4\n" | sudo tee -a /etc/resolvconf/resolv.conf.d/head

Let's set up source routing for any wired modems. This uses a dhclient hook, which will execute for dhcp entries in /etc/network/interfaces or if called manually, but not for NetworkManager-managed devices. /etc/network/interfaces takes over configuring the ethX and usbX network interfaces from NetworkManager

sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/dhclient-source-routing -O /etc/dhcp/dhclient-exit-hooks.d/dhclient-source-routing
sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/interfaces -O /etc/network/interfaces
printf "100 usb0\n101 usb1\n102 usb2\n103 usb3\n104 usb4\n" | sudo tee -a /etc/iproute2/rt_tables
printf "110 eth0\n111 eth1\n112 eth2\n113 eth3\n114 eth4\n" | sudo tee -a /etc/iproute2/rt_tables

Also set up source routing for WiFi with NetworkManager:

sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/nm-source-routing -O /etc/NetworkManager/dispatcher.d/nm-source-routing
sudo chmod 755 /etc/NetworkManager/dispatcher.d/nm-source-routing
printf "120 wlan0\n121 wlan1\n122 wlan2\n123 wlan3\n124 wlan4\n" | sudo tee -a /etc/iproute2/rt_tables

If you have a WiFi adapter fitted, you can connect to a WiFi network with sudo nmcli device wifi connect <AP NAME> password <WPA password> after rebooting.

We use the /etc/network/interfaces configuration because it seems more reliable than Networkmanager at always bringing up all the interfaces. It also brings up all the modems even when they use the same MAC address (which is the case for several Huawei models), unlike NetworkManager.

Step 5

Disable the virtual Ethernet interface as it will cause naming conflicts if you use modems that get enumerated as usbX devices.

sudo systemctl disable nv-l4t-usb-device-mode.service
sudo reboot

Step 6

Installing (the BELABOX fork of) SRT:

cd
git clone https://github.com/BELABOX/srt.git
cd srt
./configure --prefix=/usr/local
make -j4
sudo make install
sudo ldconfig

Step 7

Building belacoder:

cd
git clone https://github.com/BELABOX/belacoder.git
cd belacoder
make

Step 8

Building srtla:

cd
git clone https://github.com/BELABOX/srtla.git
cd srtla
make

Step 9

Setting up belaUI:

cd
git clone https://github.com/BELABOX/belaUI.git
cd belaUI
git checkout ws_nodejs

Install the Node.js dependencies:

npm install

Edit setup.json with the paths to the belacoder and srtla directories.

You can start the web interface to test it with:

sudo nodejs belaUI.js

At this point BELABOX is ready to use, assuming that you have a capture card / other v4l2 input connected. Open http://address_of_the_jetson in a web browser. It will first ask you to set a password for access.

See the belacoder readme for information about the available pipelines you can select in the Encoder settings menu of the web interface. Configure the srtla settings with the data for your ingest configured at Step -1.

After setting up and confirming that everything is working correctly, you can install belaUI as a system service that starts automatically at boot by running:

sudo ./install_service.sh

Next steps

For practical use, you should configure belaUI to be automatically started at boot and use a phone to control it.

If you become a recurring github sponsor, you'll get a BELABOX cloud remote account allowing you to manage your encoder from any Internet-connected device via cloud.belabox.net. Otherwise you'll need a direct LAN connection to your encoder to access belaUI. Depending on your modem setup, you could make belaUI accessible either through a modem that has both USB (for the Jetson) and WiFI (for the phone) interfaces, or by enabling the hotspot feature on the phone and connecting the Jetson to it as per step 4, or by setting up a Wifi access point on the Jetson Nano - outside the scope of this tutorial.

Receiving the stream

Regardless of how many connections are available, BELABOX always streams via srtla. To receive this stream, you have several options, including:

  1. Become a github sponsor, support the BELABOX project and receive access to our hosted srtla/SRT relay service with servers in the US and France.
  2. Follow the srtla readme to set up a basic relay using srt-live-transmit or another SRT server configured with the equivalent options.
  3. Use a third party docker image configured to receive srtla, such as this one. Note that we can make no guarantees about third party packages being maintained to support future revisions of the srtla software.

Ending notes

If you're not confident following any of the instructions, please wait until we're able to distribute BELABOX in a more convenient format.

Once you're set up, check out the bitrate guide.

This tutorial is now DEPRECATED

DEPRECATED and unmaintained, don't use this tutorial

Go to belabox.net for the current installation instructions

About

No description, website, or topics provided.

Resources

Stars

64 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

This tutorial is now DEPRECATED

DEPRECATED and unmaintained, don't use this tutorial

Go to belabox.net for the current installation instructions

Intro

You should consider joining the Discord if you want to use BELABOX. We have a lot of other relevant information there and you can also get help if you're running into problems.

Check out my Twitch channel for sample VODs streamed using BELABOX. If you're using BELABOX, please consider sponsoring the ongoing development.

Setting up BELABOX on a Jetson Nano

These instructions were written for L4T 32.4.4 (Based on Ubuntu 18.4 LTS) and last tested on Dec 20th, 2020. Consider this a temporary guide to setting up BELABOX while a more convenient solution is being developed.

Step -1

You'll need another Internet-connected machine to serve as the ingest for your srtla-bonded stream. This can be a low cost VPS or a Linux computer (even a low power RPi) at home. Follow the receiver instructions in the srtla readme for setting it up.

Step 1

Set up a micro SD card with L4T following the instructions from NVIDIA for Jetson Nano 4GB or for Jetson Nano 2GB. Note that you can do the initial setup either using a monitor, mouse & keyboard or in headless mode using the USB serial console. For the rest of the tutorial we'll assume that the system was set up correctly and that you have SSH access to the Jetson Nano via the Ethernet network.

Step 2

Updating the system packages (this may take a while):

sudo apt-get update
sudo apt-get dist-upgrade

Step 3

Installing the required dependencies:

sudo apt-get install nano build-essential git tcl libssl1.0-dev nodejs npm usb-modeswitch libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

Step 4

Add the google DNS servers so you have some resolvers accessible through any Internet-connected interfaces, as opposed to the servers accessible through a single mobile operator that you may be getting from DHCP:

printf "\nnameserver 8.8.8.8\nnameserver 8.8.4.4\n" | sudo tee -a /etc/resolvconf/resolv.conf.d/head

Let's set up source routing for any wired modems. This uses a dhclient hook, which will execute for dhcp entries in /etc/network/interfaces or if called manually, but not for NetworkManager-managed devices. /etc/network/interfaces takes over configuring the ethX and usbX network interfaces from NetworkManager

sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/dhclient-source-routing -O /etc/dhcp/dhclient-exit-hooks.d/dhclient-source-routing
sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/interfaces -O /etc/network/interfaces
printf "100 usb0\n101 usb1\n102 usb2\n103 usb3\n104 usb4\n" | sudo tee -a /etc/iproute2/rt_tables
printf "110 eth0\n111 eth1\n112 eth2\n113 eth3\n114 eth4\n" | sudo tee -a /etc/iproute2/rt_tables

Also set up source routing for WiFi with NetworkManager:

sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/nm-source-routing -O /etc/NetworkManager/dispatcher.d/nm-source-routing
sudo chmod 755 /etc/NetworkManager/dispatcher.d/nm-source-routing
printf "120 wlan0\n121 wlan1\n122 wlan2\n123 wlan3\n124 wlan4\n" | sudo tee -a /etc/iproute2/rt_tables

If you have a WiFi adapter fitted, you can connect to a WiFi network with sudo nmcli device wifi connect <AP NAME> password <WPA password> after rebooting.

We use the /etc/network/interfaces configuration because it seems more reliable than Networkmanager at always bringing up all the interfaces. It also brings up all the modems even when they use the same MAC address (which is the case for several Huawei models), unlike NetworkManager.

Step 5

Disable the virtual Ethernet interface as it will cause naming conflicts if you use modems that get enumerated as usbX devices.

sudo systemctl disable nv-l4t-usb-device-mode.service
sudo reboot

Step 6

Installing (the BELABOX fork of) SRT:

cd
git clone https://github.com/BELABOX/srt.git
cd srt
./configure --prefix=/usr/local
make -j4
sudo make install
sudo ldconfig

Step 7

Building belacoder:

cd
git clone https://github.com/BELABOX/belacoder.git
cd belacoder
make

Step 8

Building srtla:

cd
git clone https://github.com/BELABOX/srtla.git
cd srtla
make

Step 9

Setting up belaUI:

cd
git clone https://github.com/BELABOX/belaUI.git
cd belaUI
git checkout ws_nodejs

Install the Node.js dependencies:

npm install

Edit setup.json with the paths to the belacoder and srtla directories.

You can start the web interface to test it with:

sudo nodejs belaUI.js

At this point BELABOX is ready to use, assuming that you have a capture card / other v4l2 input connected. Open http://address_of_the_jetson in a web browser. It will first ask you to set a password for access.

See the belacoder readme for information about the available pipelines you can select in the Encoder settings menu of the web interface. Configure the srtla settings with the data for your ingest configured at Step -1.

After setting up and confirming that everything is working correctly, you can install belaUI as a system service that starts automatically at boot by running:

sudo ./install_service.sh

Next steps

For practical use, you should configure belaUI to be automatically started at boot and use a phone to control it.

If you become a recurring github sponsor, you'll get a BELABOX cloud remote account allowing you to manage your encoder from any Internet-connected device via cloud.belabox.net. Otherwise you'll need a direct LAN connection to your encoder to access belaUI. Depending on your modem setup, you could make belaUI accessible either through a modem that has both USB (for the Jetson) and WiFI (for the phone) interfaces, or by enabling the hotspot feature on the phone and connecting the Jetson to it as per step 4, or by setting up a Wifi access point on the Jetson Nano - outside the scope of this tutorial.

Receiving the stream

Regardless of how many connections are available, BELABOX always streams via srtla. To receive this stream, you have several options, including:

  1. Become a github sponsor, support the BELABOX project and receive access to our hosted srtla/SRT relay service with servers in the US and France.
  2. Follow the srtla readme to set up a basic relay using srt-live-transmit or another SRT server configured with the equivalent options.
  3. Use a third party docker image configured to receive srtla, such as this one. Note that we can make no guarantees about third party packages being maintained to support future revisions of the srtla software.

Ending notes

If you're not confident following any of the instructions, please wait until we're able to distribute BELABOX in a more convenient format.

Once you're set up, check out the bitrate guide.

This tutorial is now DEPRECATED

DEPRECATED and unmaintained, don't use this tutorial

Go to belabox.net for the current installation instructions

About

No description, website, or topics provided.

Resources

Stars

64 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

This tutorial is now DEPRECATED

DEPRECATED and unmaintained, don't use this tutorial

Go to belabox.net for the current installation instructions

Intro

You should consider joining the Discord if you want to use BELABOX. We have a lot of other relevant information there and you can also get help if you're running into problems.

Check out my Twitch channel for sample VODs streamed using BELABOX. If you're using BELABOX, please consider sponsoring the ongoing development.

Setting up BELABOX on a Jetson Nano

These instructions were written for L4T 32.4.4 (Based on Ubuntu 18.4 LTS) and last tested on Dec 20th, 2020. Consider this a temporary guide to setting up BELABOX while a more convenient solution is being developed.

Step -1

You'll need another Internet-connected machine to serve as the ingest for your srtla-bonded stream. This can be a low cost VPS or a Linux computer (even a low power RPi) at home. Follow the receiver instructions in the srtla readme for setting it up.

Step 1

Set up a micro SD card with L4T following the instructions from NVIDIA for Jetson Nano 4GB or for Jetson Nano 2GB. Note that you can do the initial setup either using a monitor, mouse & keyboard or in headless mode using the USB serial console. For the rest of the tutorial we'll assume that the system was set up correctly and that you have SSH access to the Jetson Nano via the Ethernet network.

Step 2

Updating the system packages (this may take a while):

sudo apt-get update
sudo apt-get dist-upgrade

Step 3

Installing the required dependencies:

sudo apt-get install nano build-essential git tcl libssl1.0-dev nodejs npm usb-modeswitch libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

Step 4

Add the google DNS servers so you have some resolvers accessible through any Internet-connected interfaces, as opposed to the servers accessible through a single mobile operator that you may be getting from DHCP:

printf "\nnameserver 8.8.8.8\nnameserver 8.8.4.4\n" | sudo tee -a /etc/resolvconf/resolv.conf.d/head

Let's set up source routing for any wired modems. This uses a dhclient hook, which will execute for dhcp entries in /etc/network/interfaces or if called manually, but not for NetworkManager-managed devices. /etc/network/interfaces takes over configuring the ethX and usbX network interfaces from NetworkManager

sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/dhclient-source-routing -O /etc/dhcp/dhclient-exit-hooks.d/dhclient-source-routing
sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/interfaces -O /etc/network/interfaces
printf "100 usb0\n101 usb1\n102 usb2\n103 usb3\n104 usb4\n" | sudo tee -a /etc/iproute2/rt_tables
printf "110 eth0\n111 eth1\n112 eth2\n113 eth3\n114 eth4\n" | sudo tee -a /etc/iproute2/rt_tables

Also set up source routing for WiFi with NetworkManager:

sudo wget https://raw.githubusercontent.com/BELABOX/tutorial/main/nm-source-routing -O /etc/NetworkManager/dispatcher.d/nm-source-routing
sudo chmod 755 /etc/NetworkManager/dispatcher.d/nm-source-routing
printf "120 wlan0\n121 wlan1\n122 wlan2\n123 wlan3\n124 wlan4\n" | sudo tee -a /etc/iproute2/rt_tables

If you have a WiFi adapter fitted, you can connect to a WiFi network with sudo nmcli device wifi connect <AP NAME> password <WPA password> after rebooting.

We use the /etc/network/interfaces configuration because it seems more reliable than Networkmanager at always bringing up all the interfaces. It also brings up all the modems even when they use the same MAC address (which is the case for several Huawei models), unlike NetworkManager.

Step 5

Disable the virtual Ethernet interface as it will cause naming conflicts if you use modems that get enumerated as usbX devices.

sudo systemctl disable nv-l4t-usb-device-mode.service
sudo reboot

Step 6

Installing (the BELABOX fork of) SRT:

cd
git clone https://github.com/BELABOX/srt.git
cd srt
./configure --prefix=/usr/local
make -j4
sudo make install
sudo ldconfig

Step 7

Building belacoder:

cd
git clone https://github.com/BELABOX/belacoder.git
cd belacoder
make

Step 8

Building srtla:

cd
git clone https://github.com/BELABOX/srtla.git
cd srtla
make

Step 9

Setting up belaUI:

cd
git clone https://github.com/BELABOX/belaUI.git
cd belaUI
git checkout ws_nodejs

Install the Node.js dependencies:

npm install

Edit setup.json with the paths to the belacoder and srtla directories.

You can start the web interface to test it with:

sudo nodejs belaUI.js

At this point BELABOX is ready to use, assuming that you have a capture card / other v4l2 input connected. Open http://address_of_the_jetson in a web browser. It will first ask you to set a password for access.

See the belacoder readme for information about the available pipelines you can select in the Encoder settings menu of the web interface. Configure the srtla settings with the data for your ingest configured at Step -1.

After setting up and confirming that everything is working correctly, you can install belaUI as a system service that starts automatically at boot by running:

sudo ./install_service.sh

Next steps

For practical use, you should configure belaUI to be automatically started at boot and use a phone to control it.

If you become a recurring github sponsor, you'll get a BELABOX cloud remote account allowing you to manage your encoder from any Internet-connected device via cloud.belabox.net. Otherwise you'll need a direct LAN connection to your encoder to access belaUI. Depending on your modem setup, you could make belaUI accessible either through a modem that has both USB (for the Jetson) and WiFI (for the phone) interfaces, or by enabling the hotspot feature on the phone and connecting the Jetson to it as per step 4, or by setting up a Wifi access point on the Jetson Nano - outside the scope of this tutorial.

Receiving the stream

Regardless of how many connections are available, BELABOX always streams via srtla. To receive this stream, you have several options, including:

  1. Become a github sponsor, support the BELABOX project and receive access to our hosted srtla/SRT relay service with servers in the US and France.
  2. Follow the srtla readme to set up a basic relay using srt-live-transmit or another SRT server configured with the equivalent options.
  3. Use a third party docker image configured to receive srtla, such as this one. Note that we can make no guarantees about third party packages being maintained to support future revisions of the srtla software.

Ending notes

If you're not confident following any of the instructions, please wait until we're able to distribute BELABOX in a more convenient format.

Once you're set up, check out the bitrate guide.

This tutorial is now DEPRECATED

DEPRECATED and unmaintained, don't use this tutorial

Go to belabox.net for the current installation instructions

About

No description, website, or topics provided.

Resources

Stars

64 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages