網頁

2021年12月29日 星期三

Install nvdec and nvh264enc as GStreamer plugins

$ sudo apt-get install gtk-doc-tools
$ git clone -b 1.14.5 https://github.com/GStreamer/gst-plugins-bad.git

$ unzip Video_Codec_SDK_11.1.5.zip
$ cp Video_Codec_SDK_11.1.5/Interface/nvEncodeAPI.h gst-plugins-bad/sys/nvenc/
$ cp Video_Codec_SDK_11.1.5/Interface/cuviddec.h gst-plugins-bad/sys/nvdec/
$ cp Video_Codec_SDK_11.1.5/Interface/nvcuvid.h gst-plugins-bad/sys/nvdec/

$ cd gst-plugins-bad/
$ ./autogen.sh --with-cuda-prefix="/usr/local/cuda"
$ cd sys/nvenc/
$ make
$ sudo cp .libs/libgstnvenc.so /usr/lib/x86_64-linux-gnu/gstreamer-1.0/
$ cd ../nvdec
$ make
$ sudo cp .libs/libgstnvdec.so /usr/lib/x86_64-linux-gnu/gstreamer-1.0/
$ gst-inspect-1.0 nvh264enc
$ gst-inspect-1.0 nvdec


2021年12月20日 星期一

Ubuntu 加入 RamDisk

$ sudo mkdir /mnt/ramdisk
$ sudo chmod 1777 /mnt/ramdisk
$ sudo vi /etc/fstab
tmpfs /mnt/ramdisk tmpfs rw,size=1G 0 0

$ sudo reboot

set frpc as service in Ubuntu

vi /etc/systemd/system/frpc.service
[Unit]
Description=frp client
Wants=network-online.target
After=network.target network-online.target

[Service]
ExecStart=/path_to/frpc -c /path_to/frpc.ini

[Install]
WantedBy=multi-user.target

$ sudo systemctl daemon-reload
$ sudo systemctl enable frpc
$ sudo systemctl start frpc
$ sudo systemctl status frpc
$ sudo systemctl staop frpc

2021年12月17日 星期五

GStreamer 使用 rstp

URI="rtsp://user:password@192.168.1.123:554/cam/realmonitor?channel=1&subtype=0"

使用 playbin
$ gst-launch-1.0 -v playbin uri=$URI
$ gst-launch-1.0 -v playbin uri=$URI uridecodebin0::source::latency=3000::video-sink=autovideosink

使用 uridecodebin
$ gst-launch-1.0 uridecodebin uri=$URI name=d d. ! nvvideoconvert ! nveglglessink
$ gst-launch-1.0 uridecodebin uri=$URI name=d d. ! nvvideoconvert ! nveglglessink d. ! queue ! audioconvert ! audioresample ! autoaudiosink

使用 decodebin
$ gst-launch-1.0 rtspsrc location=$URI ! application/x-rtp, media=video ! decodebin ! nvvideoconvert ! nveglglessink
$ gst-launch-1.0 rtspsrc location=$URI ! application/x-rtp, media=video ! decodebin name=d d. ! queue ! nvvideoconvert ! nveglglessink d. ! queue ! audioconvert ! audioresample ! autoaudiosink

自行編寫
$ gst-launch-1.0 rtspsrc location=$URI ! application/x-rtp, media=video ! queue ! rtph265depay ! h265parse ! nvv4l2decoder ! nvvideoconvert ! nveglglessink
$ gst-launch-1.0 rtspsrc location=$URI name=d d. ! application/x-rtp, media=video ! queue ! rtph265depay ! h265parse ! nvv4l2decoder ! nvvideoconvert ! nveglglessink d. ! queue ! application/x-rtp, media=audio ! rtppcmadepay ! alawdec ! autoaudiosink

存檔
$ gst-launch-1.0 -e rtspsrc location=$URI ! application/x-rtp, media=video ! queue ! rtph265depay ! h265parse ! matroskamux ! filesink location=aa.mkv
存檔並顯示
$ gst-launch-1.0 -e rtspsrc location=$URI ! application/x-rtp, media=video ! queue ! rtph265depay ! h265parse ! tee name=t  t. ! queue ! avdec_h265 ! videoconvert ! autovideosink t. ! queue ! matroskamux ! filesink location=aa.mkv
存檔並顯示(因使用 nvv4l2decoder,所以要在 h265parse 前 tee)
$ gst-launch-1.0 -e rtspsrc location=$URI ! application/x-rtp, media=video ! queue ! rtph265depay ! tee name=t  t. ! queue ! h265parse ! nvv4l2decoder ! nvvideoconvert ! nveglglessink t. ! queue ! h265parse ! matroskamux ! filesink location=aa.mkv

常用
nveglglessink nvoverlaysink autovideosink xvimagesink fakesink
nvvideoconvert videoconvert
nvv4l2decoder avdec_h265

Jetson 使用 nveglglessink 前要加 nvegltransform

gst-inspect-1.0

2021年12月16日 星期四

Ubuntu 安裝 DeepStream

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install python3-pip
$ cd /usr/bin
$ sudo ln -s python3 python

一般顯卡參考 dGPU Setup for Ubuntu 段落
依據文件要求安裝 NVIDIA driver 470.63.01
但是據上次安裝經驗不要使用 NVIDIA-Linux-x86_64-470.63.01.run
$ ubuntu-drivers devices
$ sudo apt-get install nvidia-driver-470
$ sudo reboot

依據文件說明安裝 CUDA Toolkit 11.4 Update 1
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
$ sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"
$ sudo apt-get update
$ sudo apt-get -y install cuda

依據文件安裝 TensorRT 8.0.1
$ echo "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 /" | sudo tee /etc/apt/sources.list.d/cuda-repo.list
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
$ sudo apt-key add 7fa2af80.pub
$ sudo apt-get update
依據鏈結下載 TensorRT 8.0.1 GA for Ubuntu 18.04 and CUDA 11.3 DEB
$ sudo dpkg -i nv-tensorrt-repo-ubuntu1804-cuda11.3-trt8.0.1.6-ga-20210626_1-1_amd64.deb
$ sudo apt-key add /var/nv-tensorrt-repo-ubuntu1804-cuda11.3-trt8.0.1.6-ga-20210626/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install -y libnvinfer8=8.0.1-1+cuda11.3 
$ sudo apt-get install -y libnvinfer-plugin8=8.0.1-1+cuda11.3 
$ sudo apt-get install -y libnvparsers8=8.0.1-1+cuda11.3 
$ sudo apt-get install -y libnvonnxparsers8=8.0.1-1+cuda11.3 
$ sudo apt-get install -y libnvinfer-bin=8.0.1-1+cuda11.3 
$ sudo apt-get install -y libnvinfer-dev=8.0.1-1+cuda11.3 
$ sudo apt-get install -y libnvinfer-plugin-dev=8.0.1-1+cuda11.3 
$ sudo apt-get install -y libnvparsers-dev=8.0.1-1+cuda11.3 
$ sudo apt-get install -y libnvonnxparsers-dev=8.0.1-1+cuda11.3 
$ sudo apt-get install -y libnvinfer-samples=8.0.1-1+cuda11.3 
$ sudo apt-get install -y libnvinfer-doc=8.0.1-1+cuda11.3

安裝 librdkafka
$ git clone https://github.com/edenhill/librdkafka.git
$ cd librdkafka/
$ git reset --hard 7101c2310341ab3f4675fc565f64f0967e135a6a
$ .configure
$ make
$ sudo make install
$ sudo mkdir -p /opt/nvidia/deepstream/deepstream-6.0/lib
$ sudo cp /usr/local/lib/librdkafka* /opt/nvidia/deepstream/deepstream-6.0/lib

$ sudo apt-get install ./deepstream-6.0_6.0.0-1_amd64.deb
$ rm ${HOME}/.cache/gstreamer-1.0/registry.x86_64.bin
$ cd /opt/nvidia/deepstream/deepstream-6.0/samples/configs/deepstream-app/
$ deepstream-app -c source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt

安裝 Docker
$ sudo apt-get update
$ sudo apt-get install -y ca-certificates
$ sudo apt-get install -y curl
$ sudo apt-get install -y gnupg
$ sudo apt-get install -y lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo \
$   "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$   $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ sudo docker run hello-world
$ sudo docker docker image list
$ sudo docker image rm hello-world

安裝 Nvidia Container Toolkit
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
   && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
   && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ curl -s -L https://nvidia.github.io/nvidia-container-runtime/experimental/$distribution/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2
$ sudo systemctl restart docker
$ sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi

在 Docker 內,執行 deepstream-app
參考 Docker Containers 下載 docker image
$ docker pull nvcr.io/nvidia/deepstream:6.0-samples
參考 Nvidia NGC DeepStream 執行程式
$ xhost +
$ sudo docker run --gpus '"'device=0'"' -it --rm -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -w /opt/nvidia/deepstream/deepstream-6.0 nvcr.io/nvidia/deepstream:6.0-samples
# cd samples/configs/deepstream-app
# deepstream-app -c source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt



Ubuntu 安裝 TeamViewer

到官方網站下載 Ubuntu 安裝 deb

$ sudo apt install gdebi-core
$ sudo gdebi teamviewer_15.25.5_amd64.deb
$ teamviewer

2021年12月15日 星期三

Ubuntu 不接螢幕,使用遠端桌面

$ sudo apt-get install xserver-xorg-video-dummy-hwe-18.04
$ sudo vi /usr/share/X11/xorg.conf.d/xorg.conf
Section "Device"    Identifier  "Configured Video Device"
    Driver      "dummy"
    VideoRam 256000
EndSection
 
 
Section "Monitor"
    Identifier  "Configured Monitor"
    HorizSync 5.0 - 1000.0
    VertRefresh 5.0 - 200.0
    ModeLine "1920x1080" 148.50 1920 2448 2492 2640 1080 1084 1089 1125 +Hsync +Vsync
EndSection
 
 
Section "Screen"
    Identifier  "Default Screen"
    Monitor     "Configured Monitor"
    Device      "Configured Video Device"
    DefaultDepth 24
    SubSection "Display"
    Depth 24
    Modes "1920x1080"
    EndSubSection
EndSection


因為要 login 才能有桌面,所以
start/settings/Details/Users
Automatic Login: ON

DeepStream 因為沒接實體螢幕
sink 不能使用 EglSink,只能使用 FakeSink or File


Ubuntu 安裝時出現錯誤

因為 nvidia 顯卡驅動問題出現
nouveau DRM: failed to create kernel channel, -22
等錯誤

進 GRUB menu 介面時,移到 Install Ubuntu,按 e 進入編輯環境
游標移到 linux 行,將行尾的 --- 改成 nomodeset
按 F10 開機

正常安裝後,系統顯示拔走 usb,按 Enter
按 Esc(or Shift),進入 GRUB menu
(若按太多下,會進入 grub>,輸入 normal,按 Enter 後馬上按 Esc,回到 GRUB menu)
移到 Ubuntu,按 e 進入編輯環境
尋找 quiet splash 後面加入 nomodeset
按 F10 開機

2021年12月13日 星期一

python onvif

https://github.com/quatanium/python-onvif
只適用 python2
https://github.com/FalkTannhaeuser/python-onvif-zeep
才能在 python3 使用