5.7 KiB
Download Ubuntu Server ISO and flash to device -- https://github.com/Joshua-Riek/ubuntu-rockchip
sudo apt update
sudo apt upgrade
Go ahead and pull some packages we will need, too.
sudo apt install dkms python3-all-dev fakeroot network-manager
Gsteamer setup with MPP
Download and install gstreamer
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5
Download and install rockchip mpp, rga, and gstreamer plugin from an included custom PPA, for hardware accelerated decoding.
sudo apt install gstreamer1.0-rockchip1 librga-dev librga2 librockchip-mpp-dev librockchip-mpp1 librockchip-vpu0 libv4l-rkmpp rockchip-multimedia-config libgl4es libgl4es-dev libdri2to3
test with:
gst-inspect-1.0 | grep 265
gst-inspect-1.0 | grep mpp
rtl8812au drivers installation
enter the following line-by-line
sudo bash -c "cat > /etc/modprobe.d/wfb.conf <<EOF
# blacklist stock module
blacklist 88XXau
blacklist 8812au
blacklist rtl8812au
blacklist rtl88x2bs
EOF"
git clone -b v5.2.20 https://github.com/svpcom/rtl8812au.git
cd rtl8812au/
sudo ./dkms-install.sh
reboot device
TODO: or figure out how to load the driver without a full reboot. Try "modprobe 88xxau"
WFB-ng installation
find wifi device name using iwconfig and substitute it for $WLAN in the script install
git clone -b stable https://github.com/svpcom/wfb-ng.git
cd wfb-ng
sudo ./scripts/install_gs.sh $WLAN
after install:
sudo systemctl enable wifibroadcast
then
sudo nano /etc/wifibroadcast.cfg
change the channel to match the vtx
change the region from 'BO' to '00'
Copy drone.key from the wfb-ng directory to the vtx's /etc directory
example using scp, replace x.x.x.x with the camera's ip address
scp drone.key root@x.x.x.x:/etc
Make sure gs.key was automatically put in /etc on the VRX side
ls /etc/gs.key
reboot device again
test the connection:
on the groundstation run
sudo systemctl enable wifibroadcast@gs
sudo systemctl start wifibroadcast@gs
wfb-cli gs
Plug in the camera and watch the packets come in, xlost should stay near zero while xrecv should go up
graphical environment for gstreamer playback
sudo apt install xorg
sudo apt install --no-install-recommends lightdm-gtk-greeter lightdm openbox
Then edit
sudo nano /etc/lightdm/lightdm.conf
insert:
[Seat:*]
autologin-user=ubuntu
xserver-command = X -nocursor
TODO: At this point, reboot and you will have to login with a keyboard at least once, but after it will auto login the ubuntu user to an openbox session with no cursor
let's set the desktop wallpaper and write some startup scripts
sudo apt install libimlib2-dev libx11-dev libxinerama-dev pkg-config make
git clone https://github.com/himdel/hsetroot.git
cd hsetroot
make
sudo make install
Save your desired background image to /home/ubuntu/desktop.png
a script to set the display resolution to 1280x720
sudo nano /home/ubuntu/setdisplay.sh
insert:
#/bin/bash
export DISPLAY=:0
if [[ $(xrandr | awk '/HDMI-1/ {print $2}') == "connected" ]]; then
xrandr --output HDMI-1 --mode 1280x720
fi
if [[ $(xrandr | awk '/HDMI-2/ {print $2}') == "connected" ]]; then
xrandr --output HDMI-2 --mode 1280x720
fi
exit 0
a script to start/stop the video stream and save DVR to the ~/Videos directory
note: This script relies on a push button connected between pin 5 and GND. You will have to install one for this to work.
Make Videos directory
sudo mkdir /home/ubuntu/Videos
Make the script
sudo nano /home/ubuntu/dvr.sh
insert:
#!/bin/bash
export DISPLAY=:0
xset s off -dpms
GPIO_PIN=5
RUNNING=0
gpio mode $GPIO_PIN up
cd /home/ubuntu/Videos
while true; do
if [ $(gpio read $GPIO_PIN) -eq 0 ]; then
if [ $RUNNING -eq 0 ]; then
current_date=$(date +'%m-%d-%Y_%H-%M-%S')
gst-launch-1.0 -e \
udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H265' ! \
rtph265depay ! \
h265parse ! \
tee name=t ! \
queue ! \
mppvideodec ! \
videoconvert ! \
autovideosink sync=false t. ! \
queue ! \
matroskamux ! \
filesink location=record_${current_date}.mkv &
RUNNING=$!
else
kill $RUNNING
RUNNING=0
fi
sleep 0.2
fi
sleep 0.1
done
Make the scripts executable with chmod +x.
Finally:
sudo nano /etc/xdg/openbox/autostart
add:
bash /home/ubuntu/setdisplay.sh
hsetroot -cover /home/ubuntu/desktop.png &
sudo /home/ubuntu/dvr.sh &
Pulling the DVR over IP -- a basic media server using nginx
sudo apt install nginx-light
give permissions up the file tree to our video directory
sudo chmod o+x /home /home/ubuntu /home/ubuntu/Videos
backup the default loading page and replace it with our own
sudo mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.old
sudo nano /etc/nginx/sites-available/default
Add the following, but replace x.x.x.x with your system's network IP address:
server {
listen 8080;
listen [::]:8080;
server_name x.x.x.x;
root /home/ubuntu/Videos;
autoindex on;
}
restart nginx to initate the changes
sudo systemctl restart nginx
Your DVR is now available for download at x.x.x.x:8080 in a browser