* A preinstalled image is now available here -- https://github.com/JohnDGodwin/OpenIPC_Groundstations/releases/tag/OrangePi5Plus
***
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 cmake meson`
Set system local timezone - replace region and city with your usecase
`ln -sf /usr/share/zoneinfo// /etc/localtime`
set hostname
`sudo nano /etc/hostname`
***
Gsteamer setup with MPP
Download and install gstreamer
`sudo apt --no-install-recommends 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`
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 <yes` and replace it with `no`
then at the end of the file add:
no
***
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
***
Automatic transcoding of the mkv DVR to hevc mp4
If you wish to make an apple pie from scratch, you must first invent the universe -- Our gstreamer packages don't handle muxing of mp4 h265 video, and our apt-get ffmpeg package does not include rkmpp hardware acceleration.... so we're going to build ffmpeg with mpp support with the help of https://github.com/nyanmisaka/ffmpeg-rockchip
We can do this with 3 simple installation scripts.
First we build MPP from sources, as our current MPP package is older.
Second we build RGA from sources for the same reason.
Third we build ffmpeg with rkmpp and rkrga support.
`sudo nano buildMPP.sh`
mkdir -p ~/MPP && cd ~/MPP
git clone -b jellyfin-mpp --depth=1 https://github.com/nyanmisaka/mpp.git rkmpp
pushd rkmpp
mkdir rkmpp_build
pushd rkmpp_build
cmake \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_TEST=OFF \
..
make -j $(nproc)
sudo make install
`sudo nano buildRGA.sh`
mkdir -p ~/RGA && cd ~/RGA
git clone -b jellyfin-rga --depth=1 https://github.com/nyanmisaka/rk-mirrors.git rkrga
meson setup rkrga rkrga_build \
--prefix=/usr \
--libdir=lib \
--buildtype=release \
--default-library=shared \
-Dcpp_args=-fpermissive \
-Dlibdrm=false \
-Dlibrga_demo=false
meson configure rkrga_build
sudo ninja -C rkrga_build install
`sudo nano buildFFMPEG.sh`
mkdir -p ~/ffmpeg && cd ~/ffmpeg
git clone --depth=1 https://github.com/nyanmisaka/ffmpeg-rockchip.git ffmpeg
cd ffmpeg
./configure --prefix=/usr --enable-gpl --enable-version3 --enable-libdrm --enable-rkmpp --enable-rkrga
make -j $(nproc)
./ffmpeg -decoders | grep rkmpp
./ffmpeg -encoders | grep rkmpp
./ffmpeg -filters | grep rkrga
sudo make install
Make the scripts executable
`sudo chmod +x buildMPP.sh buildRGA.sh buildFFMPEG.sh`
And run them one at a time:
`./buildMPP.sh`
`./buildRGA.sh`
`./buildFFMPEG.sh`
Now we can use ffmpeg to hardware transcode the mkv video files to hevc mp4. We can have this automatically happen at the end of each recording by augmenting the dvr.sh script. Open the dvr.sh script in your /home/ubuntu/scripts directory, find the line `kill $RUNNING` and add the following two lines below it.
sleep 0.2
ffmpeg -hwaccel rkmpp -i record_${current_date}.mkv -c:v hevc_rkmpp record_${current_date}.mp4
The full script should look like this:
#!/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
sleep 0.2
ffmpeg -hwaccel rkmpp -i record_${current_date}.mkv -c:v hevc_rkmpp record_${current_date}.mp4
fi
sleep 0.2
fi
sleep 0.1
done
***