Intel DevKit construit le traitement vidéo RTMP et OpenVINO

Ici, nous allons vous présenter comment utiliser la carte de développement DevKit - Aix certifiée Intel® pour construire rapidement un serveur multimédia de streaming RTMP, et utiliser FFmpeg* pour réaliser la fonction de streaming vidéo. Étant donné que le backend de FFmpeg prend en charge l'autonomisation d'OpenVINO™, nous pouvons déployer des modèles d'IA pour mettre en œuvre le traitement par IA des flux vidéo basés sur le streaming vidéo. De plus, nous tirerons pleinement parti de la carte graphique intégrée (iGPU) portée par le CPU pour l'accélération du codec vidéo et le raisonnement de l'IA. Figure 1 : organigramme du projet de serveur de diffusion Intel®DevKit RTMP

Présentation du projet : lire et décoder le flux vidéo de la caméra, la vidéo locale ou la vidéo réseau via FFmpeg, appeler les fonctions de traitement vidéo contenues dans FFmpeg après le décodage, y compris le montage vidéo, l'épissage vidéo, le filigrane vidéo, etc., et peut prendre en charge la suite d'outils OpenVINO™ comme Le backend effectue le traitement AI sur la vidéo d'entrée. Étant donné que FFmpeg est compatible avec les bibliothèques de codecs logiciels et matériels, vous pouvez choisir le processeur ou la carte graphique intégrée (iGPU) pour accélérer le codec vidéo et d'autres fonctions. Enfin, la vidéo traitée est transmise au serveur de streaming RTMP (Simple Realtime Server) construit localement via FFmpeg. S'il se trouve dans le réseau local, le client peut directement extraire le flux vidéo à regarder en fonction de l'adresse IP. S'il se trouve sur le réseau public, le flux vidéo sera transmis au site Web de streaming vidéo public et diffusé via les nœuds du réseau public.

DevKit certifié Intel®——Introduction à la carte de développement Aix Figure 2 : Paramètres matériels de la carte Aix  Figure 3 : Prise de vue réelle de la carte Aix

La carte de développement DevKit—AIxBoard (AixBoard*) certifiée par Intel® est un matériel embarqué conçu pour prendre en charge les applications d'intelligence artificielle de pointe d'entrée de gamme. Elle peut répondre aux besoins des développeurs en matière d'apprentissage, de développement, de formation et d'autres scénarios d'application en matière d'intelligence artificielle. Exigences d'utilisation.

La carte de développement conçue sur la base de la plate-forme x86 peut prendre en charge Linux Ubuntu et la version complète du système d'exploitation Windows, ce qui est très pratique pour les développeurs pour développer des logiciels et du matériel, et essayer toutes les fonctions logicielles pouvant être appliquées à la plate-forme x86. La carte de développement est équipée d'un processeur Intel® Celeron® N5105 à 4 cœurs à 4 fils avec une fréquence turbo allant jusqu'à 2,9 GHz et d'une carte graphique intégrée Intel® UHD. La carte graphique intégrée fonctionne à une fréquence de 450 MHz à 800 MHz et contient des unités d'exécution 24. Le débit maximal prend en charge les images 4K60 et prend en charge la technologie Intel® Quick Sync Video pour convertir rapidement la vidéo des lecteurs multimédia portables, et fournit également des fonctions de partage en ligne, de montage vidéo et de production vidéo. Stockage eMMC 64 Go intégré et LPDDR4x 2933 MHz (4 Go/6 Go/8 Go), modules Bluetooth et Wi-Fi intégrés, prise en charge USB 3.0, sortie vidéo HDMI, interface audio 3,5 mm, port Ethernet 1000 Mbps. L'interface de la carte est riche et divers modules de capteurs peuvent également être étendus.

De plus, son interface est compatible avec la carte porteuse Jetson Nano, et le GPIO est compatible avec le Raspberry Pi, ce qui permet de maximiser la réutilisation des ressources écologiques comme le Raspberry Pi et le Jetson Nano, qu'il s'agisse de reconnaissance d'objet caméra, d'impression 3D, ou contrôle d'interpolation en temps réel CNC.Peut fonctionner de manière stable. Il peut être utilisé comme moteur informatique de pointe pour la vérification et le développement de produits d'intelligence artificielle ; il peut également être utilisé comme noyau de contrôle de domaine pour le développement de produits robotiques.

L'architecture x86 d'Intel® DevKit peut prendre en charge un système Windows complet et peut obtenir directement le support logiciel le plus puissant tel que Visual Studio, OpenVINO™, OpenCV sans optimisation particulière, l'écologie de développement la plus mature et des millions de projets open source. la créativité donne plus de pouvoir. Que vous soyez un fanatique du bricolage, un concepteur d'interaction ou un expert en robotique, vous pouvez jouer avec la carte de développement pour un développement créatif.

Protocole de messagerie en temps réel (RTMP)

Présentation du RTMP

Le nom complet du protocole de messagerie en temps réel est le protocole de messagerie en temps réel (RTMP). En termes simples, un protocole de streaming est un ensemble de règles de transmission de fichiers multimédia entre deux systèmes de communication, qui définit la manière dont les fichiers vidéo seront décomposés en petits paquets de données et l'ordre dans lequel ils sont transmis sur Internet. RTMP est un protocole multimédia de diffusion relativement courant. RTMP a été développé par Macromedia pour la diffusion en continu sur des lecteurs Flash, mais lorsque Flash a commencé à être progressivement supprimé et que les protocoles basés sur HTTP sont devenus la nouvelle norme pour la diffusion en continu sur des appareils de lecture, RTMP Le champ d'application de la diffusion en continu protocoles médiatiques se rétrécit progressivement. Mais cela n'affecte en rien l'utilisation de RTMP, et il a toujours un grand avantage dans le streaming vidéo en direct de bout en bout !

RTMP utilise le port exclusif 1935, basé sur le protocole TCP, et réalise les caractéristiques de faible retard sans mise en mémoire tampon, et la connexion de protocole est stable. Lorsque l'utilisateur regarde la vidéo, si le réseau est déconnecté, l'utilisateur peut continuer à jouer en fonction du dernier point de déconnexion après la reconnexion. La flexibilité d'intégration de RTMP est très forte.Il peut non seulement intégrer du texte, de la vidéo et de l'audio, mais également prendre en charge les flux audio MP3 et AAC, les flux vidéo MP4, FLV et F4V.

Cependant, RTMP présente également certaines lacunes, telles que la non-prise en charge de la vidéo haute résolution et VP9, ​​AV1 et d'autres méthodes de compression vidéo, comme iOS, Android, la plupart des lecteurs intégrés et certains navigateurs n'acceptent plus la diffusion en direct RTMP, certains réseaux bloquent par défaut Les ports RTMP, qui nécessitent des modifications spéciales du pare-feu pour autoriser les réseaux bloqués. Figure 4 : Framework de streaming vidéo basé sur RTMP

Pour la transmission de streaming vidéo push-pull basée sur le protocole RTMP, nous avons besoin d'un serveur de streaming vidéo relais pour distribuer le flux RTMP, afin que d'une part, il puisse assurer la stabilité du streaming, et d'autre part, il soit pratique pour l'administrateur pour superviser et gérer le flux vidéo.

Serveur en temps réel simple (SRS)

SRS* est un serveur de streaming vidéo en temps réel simple et efficace, prenant en charge des protocoles tels que RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181. Les systèmes pris en charge incluent Linux/Windows/macOS et l'architecture de la puce inclut X86_64/ARMv7/AARCH64/M1/RISCV/LOONGARCH/MIPS. Vous pouvez l'utiliser pour implémenter le streaming vidéo et prendre en charge les événements de rappel http (rappel HTTP) et peut également enregistrer des fichiers de streaming vidéo. Prend en charge le déploiement localisé et est facile à utiliser. Adresse open source : https://github.com/ossrs/srs

En compilant et en installant un tel serveur de streaming open source, nous pouvons réduire les coûts de développement, réaliser un déploiement rapide du serveur de streaming et pousser la vidéo.

FFmpeg intègre le moteur d'inférence OpenVINO™

Présentation de FFmpeg

FFmpeg n'est pas seulement un outil d'encodage et de décodage audio et vidéo, mais également un ensemble de kits de développement d'encodage audio et vidéo.En tant que kit de développement d'encodage, il fournit aux développeurs des interfaces d'appel riches pour le traitement audio et vidéo. FFmpeg fournit l'encapsulation et la décapsulation d'une variété de formats multimédias, y compris une variété d'encodages audio et vidéo, le streaming multimédia d'une variété de protocoles, une variété de conversion de format coloré, une variété de conversion de taux d'échantillonnage, une variété de conversion de taux de code, etc. ; le framework FFmpeg fournit une variété de modules de plug-in, y compris des plug-ins pour l'empaquetage et la décapsulation, des plug-ins pour l'encodage et le décodage, etc.

La composition de base du framework FFmpeg comprend des bibliothèques de modules telles que AVFormat, AVCodec, AVFilter, AVDevice et AVUtil. Le schéma de structure est le suivant : Figure 5 : Schéma d'architecture logicielle FFmpeg

FFmpeg intègre la boîte à outils OpenVINO™

OpenVINO ™ est un ensemble de framework d'apprentissage en profondeur publié par Intel, qui prend en charge plusieurs formats de fichiers de modèle, notamment Tensorflow , Caffe , ONNX , MXNet , Kaldi et Torch *, etc., et prend également en charge divers matériels Intel, notamment CPU, GPU, FPGA, Movidius™ Neural Compute Stick, etc. Étant donné que FFmpeg nécessite que la bibliothèque appelée fournisse une API C, OpenVINO™ vient d'ajouter une telle interface dans la version 2020. De plus, le backend OpenVINO™ peut fournir plus de support de format de modèle que le backend TensorFlow, et peut prendre en charge plus de matériel sous-jacent de meilleure qualité. Ainsi, la communauté FFmpeg a adopté le moteur d'inférence d'OpenVINO™ en tant que nouveau backend d'apprentissage en profondeur. Figure 6 : Schéma de l'architecture interne d'AVFilter

Dans AVFilter, nous intégrerons le moteur d'inférence d'OpenVINO™ en tant que backend de l'interface DNN. Actuellement, il n'y a pas de filtre pour l'analyse d'image basé sur des modèles d'apprentissage en profondeur dans FFmpeg, seulement un filtre général pour le traitement d'image, à savoir dnn_processing, nous utilisons donc dnn_processing comme exemple de démonstration :

dnn_processing=dnn_backend=openvino:model=<YOUR PATH OF espcn.xml>

Étant donné que FFmpeg ne dispose pas de la bibliothèque de support backend OpenVINO™ dans les options de compilation par défaut, dans cet exemple, les développeurs doivent recompiler FFmpeg et intégrer libopenvino dans la bibliothèque intégrée de FFmpeg. Je tiens également à remercier M. Guo Yejun d'avoir intégré l'interface C d'OpenVINO dans la bibliothèque d'activation de FFmpeg, afin que FFmpeg prenne officiellement en charge l'appel de la bibliothèque libopenvino.so et l'accès au moteur OpenVINO pour le raisonnement du modèle. Adresse open source : https://github.com/mattcurf/ffmpeg_openvino

Flux de projet

mise en place du système d'exploitation

Le système d'exploitation Linux installé dans le manuel d'exploitation officiel de Xzsteam (https://www.xzsteam.com/docs/ ) est Ubuntu 20.04.Afin de faciliter le fonctionnement et la démonstration, nous avons choisi d'utiliser le système d'exploitation Ubuntu 20.04 avec une interface graphique pour démonstration.

Si la pression d'encodage et de décodage est trop élevée, vous pouvez également choisir un système Linux en version serveur sans interface graphique pour construire un serveur de streaming. Si vous utilisez d'autres versions système de Linux, ce processus est uniquement à titre de référence.

Construire un serveur de streaming RTMP

Étapes de construction :

1. Obtenez le code source du serveur srs.

git clone https://github.com/ossrs/srs
cd srs/trunk

2. Installez les dépendances et compilez le code source srs.

sudo apt install -y automake tclsh
./configure && make

3. Modifiez le fichier de configuration srs.

Enregistrez le contenu suivant dans un fichier, tel que conf/rtmp.conf, vous pouvez modifier le fichier conf selon vos propres besoins, et spécifier ce fichier de configuration au démarrage du serveur (le dossier conf de srs contient ce fichier).

# conf/rtmp.conf 
listen              1935;
max_connections     1000;
vhost __defaultVhost__ {
}

4. Démarrez le serveur srs

./objs/srs -c conf/rtmp.conf

5. Démarrez l'encodeur de streaming :

Utilisez la commande FFMPEG pour envoyer une vidéo au serveur :

for((;;)); do \
./objs/ffmpeg/bin/ffmpeg -re -i <your mp4/flv…> 
-vcodec copy -acodec copy \
-f flv -y rtmp://<YOUR SERVER IP>/live/livestream; \
sleep 1; \
done

6. Regardez le flux RTMP.

L'adresse du flux RTMP est : rtmp:///live/livestream

Si le système n'a pas de lecteur VLC, utilisez la commande suivante pour installer le lecteur VLC :

sudo apt-get install vlc

Utilisez le lecteur VLC pour saisir l'adresse du flux RTMP afin de regarder le flux vidéo.

Installez FFmpeg et compilez la boîte à outils OpenVINO™

1. Installer les dépendances logicielles

apt-get install -y -q --no-install-recommends \
      apt-utils \
      build-essential \
      ca-certificates \
      cmake \
      cpio \
      curl \
      git \
      gnupg-agent \
      libdrm-dev \
      libpciaccess-dev \
      libva-dev \
      libx11-dev \
      libsdl2-2.0 \
      libsdl2-dev \
      libx11-xcb-dev \
      libxcb-dri3-dev \
      libxcb-present-dev \
      lsb-release \
      nasm \
      pkg-config \
      software-properties-common \
      wget \
      xorg-dev \
      xutils-dev \
      clang \
      libfdk-aac-dev \
      libspeex-dev \
      libx264-dev \
      libx265-dev \
      libnuma-dev \
      libopencore-amrnb-dev \
      libopencore-amrwb-dev\
      yasm

2. Installez OpenCL et VAAPI

curl -L https://repositories.intel.com/graphics/intel-graphics.key | sudo apt-key add - && \
   apt-add-repository 'deb [arch=amd64] https://repositories.intel.com/graphics/ubuntu focal main' && \
   apt-get update && \
   sudo apt-get install -y -q --no-install-recommends \
     clinfo \
     intel-opencl-icd \
     intel-media-va-driver-non-free 

3. Installez la boîte à outils OpenVINO™

curl -L https://registrationcenter-download.intel.com/akdlm/irc_nas/18319/l_openvino_toolkit_p_2021.4.752.tgz | tar xzf -
#解压缩tgz包 并安装OpenVINO
cd l_openvino_toolkit_p_2021.4.752
sudo ./install.sh

#设置环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/openvino_2021/inference_engine/lib/intel64:/opt/intel/openvino_2021/inference_engine/external/tbb/lib:/opt/intel/openvino_2021/deployment_tools/ngraph/lib

4. Téléchargez, compilez et installez FFmpeg tout en activant OpenVINO

 git clone https://git.ffmpeg.org/ffmpeg.git
   cd ffmpeg 
   ./configure \
            --cpu=native \
            --extra-cflags=-I/opt/intel/openvino_2021/inference_engine/include/ \
            --extra-ldflags=-L/opt/intel/openvino_2021/inference_engine/lib/intel64 \
            --extra-libs=-lpthread \
            --disable-cuda-llvm \
            --prefix=/usr \
            --enable-static \
            --disable-shared \
            --enable-pic  \
            --disable-doc \
            --disable-manpages  \
            --enable-libopenvino \
            --enable-vaapi \
            --enable-libx264 \
            --enable-libx265 \
            --enable-ffplay \
            --enable-ffprobe \
            --enable-gpl \
            --enable-nonfree \
            --enable-libxcb && \
   make -j $(nproc) && \
   sudo make install

#清理build文件,添加VA变量
   rm -rf /build && \
   echo 'LIBVA_DRIVER_NAME=iHD' >>sudo /etc/environment && \
   sudo ldconfig

Exécutez le serveur de diffusion

Exécuter le serveur de diffusion RTMP

./objs/srs -c conf/rtmp.conf
  • Utilisez FFmpeg pour pousser le flux d'écran en temps réel de la caméra USB

for((;;)); do \
       ffmpeg -f video4linux2 -i "/dev/video0" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://<YOUR server IP>/live/livestream;\
       sleep 1; \
   done

Figure 7 : Poussée de streaming vidéo de la caméra

  • Poussez la vidéo après l'avoir traitée via FFmpeg

for((;;)); do \
       ffmpeg -re -i <YOUR MP4 FILES> \
       -vcodec copy -acodec copy \
       -f flv -y rtmp:// <YOUR SERVER IP>/live/livestream; \
       sleep 1; \
   done

Illustration 8 : Diffusion de vidéo MP4

  • Épissage vidéo multicanal, en prenant comme exemple l'épissage vidéo 4 canaux :

for((;;)); do \
       ffmpeg -re -i <video1> -i <video2> \
       -i <video3> -i <video4> \
       -filter_complex "[0:v]pad=iw*2:ih*2[a];[a][1:v]overlay=w*1[b];[b][2:v]overlay=0:h[c];[c][3:v]overlay=w:h" \
        \
       -f flv -ar 44100 -y rtmp://<YOUR SERVER IP> /live/livestream; \
       sleep 1; \
   done

 

Figure 9 : Pousser et épisser 4 vidéos MP4

  • ajouter un filigrane à la vidéo

for((;;)); do \
       ffmpeg -i <YOUR MP4 FILES> -i <YOUR LOGO> -filter_complex overlay \
       -f flv -ar 44100 -y rtmp://<YOUR SERVER IP>/live/livestream; \
       sleep 1; \
   done

 Figure 10 : diffuser une vidéo et ajouter un filigrane

  • Traiter la vidéo avec l'IA

Utilisez la boîte à outils OpenVINO™ comme backend pour effectuer une super-résolution AI sur la vidéo d'entrée, téléchargez le modèle IR requis et testez la vidéo. Le modèle d'IA utilise le modèle de super-résolution vidéo Efficient Sub-Pixel Convolutional Neural Network (ESPCN).Pour plus d'informations sur le modèle, veuillez consulter : https://arxiv.org/abs/1609.05158

wget https://raw.githubusercontent.com/guoyejun/dnn_processing/master/models/espcn.xml
wget https://raw.githubusercontent.com/guoyejun/dnn_processing/master/models/espcn.bin
wget https://raw.githubusercontent.com/guoyejun/dnn_processing/master/models/480p.mp4

La vidéo d'entrée est une vidéo mp4 au format 480p, et le codec est placé dans la carte graphique intégrée en utilisant VAAPI, et le codec vidéo est accéléré en utilisant VAAPI dans la carte graphique intégrée. Tout d'abord, le décodage dur doit être téléchargé dans le cache pour le traitement, et le modèle ESPCN qui utilise le raisonnement OpenVINO est lu via "dnn_processing". L'entrée/sortie détermine la couche d'entrée et la couche de sortie du modèle. Le paramètre peut définir l'appareil qui exécute le raisonnement du modèle. Ici, nous le définissons sur "GPU", ce qui signifie qu'il faut utiliser la carte graphique intégrée pour l'inférence du modèle. Vous pouvez également le définir sur "CPU". Une fois que les vfilters fonctionnent, hwupload emballera et enfin, poussez la vidéo terminée en super-résolution :

for((;;)); do \
          ffmpeg -y -loglevel warning -hide_banner -stats -benchmark -hwaccel vaapi -hwaccel_output_format vaapi -i <YOUR PATH OF 480p.mp4> -vf hwdownload,format=yuv420p,dnn_processing=dnn_backend=openvino:model=<YOUR PATH OF espcn.xml>:input=x:output=espcn/prediction:options=device=GPU,format=nv12,hwupload -c:v h264_vaapi  \
       -f flv -ar 44100 -y rtmp://<YOUR SERVER IP>/live/livestream; \
       sleep 1; \
   done

Figure 11 : La super-résolution vidéo 480P devient le flux push 960P et l'utilisation de la carte graphique intégrée/la fréquence d'images par seconde

En tant que logiciel de traitement vidéo open source, FFmpeg dispose d'une variété de réseaux d'outils logiciels compatibles avec le backend.Vous pouvez explorer l'accès à divers backends de traitement vidéo, outils d'accélération logicielle et matérielle et programmes personnalisés. whaosoft  aiot  http://143ai.com

Vous pouvez également utiliser FFmpeg, la suite d'outils OpenVINO™ et la carte de développement Aix pour réaliser des applications ou des inventions plus créatives en fonction de vos besoins ou intérêts. Si vous avez déjà une bonne idée ou un plan de développement, vous pouvez postuler pour la carte de développement Aix pour des expériences gratuites en remplissant la description du plan de développement. kits (https://mp.weixin.qq.com/s/pHp7lwqEsK9x8rqWhWir_A)

3.5 Diffusion en direct sur Internet

Pour le streaming vidéo sur le réseau public, prenez Douyu*.com comme exemple : le webcasting est un domaine très populaire en ce moment. Pour les utilisateurs ordinaires, ils utiliseront le logiciel compagnon de streaming en direct fourni par le site de streaming en direct pour le streaming en direct, comme illustré dans la figure ci-dessous : Figure 12 : Interface compagnon de diffusion en direct de Douyu

Sur la base de la mise en place du serveur RTMP, nous pouvons pousser le flux vidéo de la caméra en direct ou la vidéo stockée sur le serveur via le flux push du serveur. Avec le support de FFmpeg et OpenVINO™, nous pouvons également éditer le flux vidéo à pousser, doter le raisonnement de l'IA et d'autres capacités, et pousser la vidéo traitée en direct. Les logiciels de diffusion en direct fournissent généralement un accès aux ressources Internet, ce qui est pratique pour l'hôte pour extraire directement les flux.

réseau local:

Grâce à l'IP LAN, le flux vidéo traité peut être transmis au client sur l'intranet.

4 Résumé

DevKit certifié Intel®—— La carte de développement Aix utilise Intel® Celeron™ N5105 comme cœur de traitement, ce qui permet d'obtenir d'excellentes performances de calcul avec la même consommation d'énergie. Dans cet exemple, il sert de petit serveur multimédia de streaming, qui peut réaliser un codec multicanal, une transmission vidéo en temps réel et pousser la vidéo après le traitement de l'IA à l'aide de la suite d'outils OpenVINO™. Cet article prend un modèle de super-résolution comme exemple pour appliquer le raisonnement de l'IA à un tel serveur multimédia en continu.Cela fournit principalement aux développeurs une telle idée, telle que la détection de visage, la segmentation ou les modèles de reconnaissance peuvent également être déployés sur le serveur, le modèle AI est utilisé pour traiter la vidéo diffusée en continu via l'IA, de sorte qu'un serveur de diffusion vidéo ordinaire peut être doté de l'IA. N'oubliez pas, si vous avez une bonne idée, vous pouvez demander une carte de développement Aix gratuite pour l'expérimentation en soumettant une description du plan de développement . kit de développement ( https://mp.weixin.qq.com/s/pHp7lwqEsK9x8rqWhWir_A )

Les serveurs multimédias en streaming RTMP sont largement utilisés sur le marché.En plus de la transmission vidéo peer-to-peer, un tel serveur peut être utilisé pour lire automatiquement des vidéos et traiter automatiquement des vidéos, ce qui peut obtenir une certaine valeur commerciale. Puisque FFmpeg, un framework open source, a un degré de liberté élevé, tant qu'il s'agit d'une fonction que FFmpeg peut intégrer, il peut être facilement déployé sur le serveur.Venez participer à l'activité, postulez pour un conseil et commencez à créer expériences.

Je suppose que tu aimes

Origine blog.csdn.net/qq_29788741/article/details/132288072
conseillé
Classement