Dec 25, 2021

Introduction

image.png

Turtle 🐢 is the nickname of the project Mira Hub that I worked on during my internship at Baixing. It is essentially a video processing device that provides:

This tool is built based on a Nvidia Jetson Nano, made for processing movie shots filmed on set. Movie editors are usually on a busy schedule where they are travelling from one studio to another right after filming some shots. Thus having a tool where they could easily carry and process videos while they travel could come in really handy. In this blog, I will break down the components of Turtle, how I built them, and how it could be setted up on a new Jetson Nano.

Video Processing

The video processing software is mostly implemented in Python and shell scripts, where it is acting like a translational layer of communication between user inputs and Gstreamer commands.

I tried using FFmpeg but it seems like Nvidia GPU hardware acceleration is not supported for FFmpeg on Jetson Nanos.

The hardest part of building the software is figuring out the Gstreamer commands for muxing and video transcoding and come up with a dynamic user input mapping to them.

<aside> 🛠️

Tools I used for this component

</aside>

GStreamer: open source multimedia framework

NVIDIA Jetson Nano

As an example, here is the command I used for simply compressing the video into a lower resolution.

gst-launch-1.0 -e filesrc location=${src} ! qtdemux name=demux demux.video_0 ! \\
queue ! h264parse ! omxh264dec ! videorate ! "video/x-raw,framerate=24/1" ! \\
nvvidconv ! "video/x-raw(memory:NVMM), width=(int)854, height=(int)480, format=(string)I420" ! \\
omxh264enc bitrate=1000000 ! mp4mux name=mux ! filesink location=${result}

Embedded Programs

Another important part of Turtle is how it interacts with the users.

Display & UI

There is no interactive UI, but the Jetson Nano does come with INA219 screen on a battery panel. I modified the panel display with a Linux systemd service that outputs real time information to the screen as the user interface.

image.png

A lot of these metrics are based on polling real time system information like internet connection status, job status, free disk space, etc.

Input Detection and Uploading