O Intel DevKit cria processamento de vídeo RTMP e OpenVINO

Aqui, apresentaremos como usar a placa de desenvolvimento DevKit - Aix certificada pela Intel® para criar rapidamente um servidor de mídia de streaming RTMP e usar o FFmpeg* para realizar a função de streaming de vídeo. Como o back-end do FFmpeg oferece suporte à capacitação do OpenVINO™, podemos implantar modelos de IA para implementar o processamento de IA de fluxos de vídeo com base no streaming de vídeo. Além disso, faremos uso total da placa gráfica integrada (iGPU) transportada pela CPU para aceleração de codec de vídeo e raciocínio de IA. Figura 1: Fluxograma do projeto do servidor de streaming Intel®DevKit RTMP

Introdução ao projeto: leia e decodifique o fluxo de vídeo da câmera, vídeo local ou vídeo em rede através do FFmpeg, chame as funções de processamento de vídeo contidas no FFmpeg após a decodificação, incluindo edição de vídeo, emenda de vídeo, marca d'água de vídeo, etc., e pode suportar o pacote de ferramentas OpenVINO™ como O back-end executa o processamento AI no vídeo de entrada. Como o FFmpeg é compatível com bibliotecas de codecs de software e hardware, você pode escolher CPU ou placa gráfica integrada (iGPU) para acelerar o codec de vídeo e outras funções. Por fim, o vídeo processado é enviado para o servidor de streaming RTMP construído localmente (Simple Realtime Server) por meio do FFmpeg. Se estiver na rede local, o cliente pode puxar diretamente o stream de vídeo para assistir de acordo com o endereço IP. Se estiver na rede pública, o stream de vídeo será transmitido para o site de streaming de vídeo público e transmitido pelos nós da rede pública.

Intel® Certified DevKit——Introdução à placa de desenvolvimento Aix Figura 2: Parâmetros de hardware da placa Aix  Figura 3: Disparo real da placa Aix

DevKit certificado pela Intel®—placa de desenvolvimento AIxBoard (AixBoard*) é um hardware integrado projetado para oferecer suporte a aplicativos de IA de ponta. Ele pode atender às necessidades dos desenvolvedores de aprendizado de inteligência artificial, desenvolvimento, treinamento e outros cenários de aplicativos. Requisitos de uso.

A placa de desenvolvimento projetada com base na plataforma x86 pode suportar Linux Ubuntu e a versão completa do sistema operacional Windows, o que é muito conveniente para desenvolvedores desenvolverem software e hardware e experimentar todas as funções de software que podem ser aplicadas à plataforma x86. A placa de desenvolvimento está equipada com um processador Intel® Celeron® N5105 4-core 4-thread com uma frequência turbo de até 2,9 GHz e uma placa gráfica Intel® UHD integrada. A placa gráfica integrada funciona a uma frequência de 450MHz para 800MHz e contém 24 unidades de execução. A taxa máxima suporta quadros 4K60 e suporta a tecnologia Intel® Quick Sync Video para converter rapidamente o vídeo de reprodutores multimídia portáteis e também fornece funções de compartilhamento online, edição e produção de vídeo. Armazenamento eMMC integrado de 64 GB e LPDDR4x 2933 MHz (4 GB/6 GB/8 GB), módulos Bluetooth e Wi-Fi integrados, suporte a USB 3.0, saída de vídeo HDMI, interface de áudio de 3,5 mm, porta Ethernet de 1000 Mbps. A interface da placa é rica e vários módulos de sensores também podem ser estendidos.

Além disso, sua interface é compatível com a placa transportadora Jetson Nano, e o GPIO é compatível com o Raspberry Pi, o que pode maximizar a reutilização de recursos ecológicos como Raspberry Pi e Jetson Nano, seja reconhecimento de objeto de câmera, impressão 3D, ou controle de interpolação CNC em tempo real.Pode funcionar de forma estável. Ele pode ser usado como um mecanismo de computação de borda para verificação e desenvolvimento de produtos de inteligência artificial; também pode ser usado como um núcleo de controle de domínio para desenvolvimento de produtos de robôs.

A arquitetura x86 do Intel® DevKit pode suportar um sistema Windows completo e pode obter diretamente o suporte de software mais poderoso, como Visual Studio, OpenVINO™, OpenCV sem otimização especial, a ecologia de desenvolvimento mais madura e milhões de projetos de código aberto. a criatividade fornece mais poder. Seja você um fanático por DIY, um designer de interação ou um especialista em robôs, você pode brincar com a placa de desenvolvimento para desenvolvimento criativo.

Protocolo de mensagens em tempo real (RTMP)

Introdução ao RTMP

O nome completo do Real-Time Messaging Protocol é Real-Time Messaging Protocol (RTMP). Simplificando, um protocolo de streaming é um conjunto de regras para transmissão de arquivos multimídia entre dois sistemas de comunicação, que define como os arquivos de vídeo serão divididos em pequenos pacotes de dados e a ordem em que serão transmitidos na Internet. RTMP é um protocolo de streaming media relativamente comum. O RTMP foi desenvolvido pela Macromedia para streaming para Flash players, mas como o Flash começou a ser eliminado e os protocolos baseados em HTTP se tornaram o novo padrão para streaming para dispositivos de reprodução, RTMP O escopo da aplicação em streaming protocolos de mídia se estreita gradualmente. Mas isso não afeta em nada o uso do RTMP e ainda tem uma grande vantagem na transmissão de vídeo ao vivo de ponta a ponta!

O RTMP usa a porta 1935 exclusiva, baseada no protocolo TCP, e realiza as características de baixo atraso sem buffer, e a conexão do protocolo é estável. Quando o usuário estiver assistindo ao vídeo, se a rede for desconectada, o usuário poderá continuar jogando com base no último ponto de desconexão após a reconexão. A flexibilidade de integração do RTMP é muito forte, podendo não apenas integrar texto, vídeo e áudio, mas também suportar fluxos de áudio MP3 e AAC, fluxos de vídeo MP4, FLV e F4V.

No entanto, o RTMP também possui algumas deficiências, como não oferecer suporte a vídeo de alta resolução e VP9, ​​​​AV1 e outros métodos de compactação de vídeo, como iOS, Android, a maioria dos players incorporados e alguns navegadores não aceitam mais transmissão ao vivo RTMP, algumas redes bloqueiam o padrão Portas RTMP, que requerem modificações especiais de firewall para permitir redes bloqueadas. Figura 4: estrutura de streaming de vídeo baseada em RTMP

Para a transmissão de streaming de vídeo push-pull com base no protocolo RTMP, precisamos de um servidor de streaming de vídeo de retransmissão para distribuir o fluxo RTMP, de modo que, por um lado, possa garantir a estabilidade do streaming e, por outro lado, seja conveniente para o administrador supervisionar e gerenciar o fluxo de vídeo.

Servidor Simples em Tempo Real (SRS)

O SRS* é um servidor de streaming de vídeo em tempo real simples e eficiente, com suporte a protocolos como RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181. Os sistemas suportados incluem Linux/Windows/macOS e a arquitetura do chip inclui X86_64/ARMv7/AARCH64/M1/RISCV/LOONGARCH/MIPS. Você pode usá-lo para implementar streaming de vídeo e oferece suporte a eventos de retorno de chamada http (HTTP Callback) e também pode salvar arquivos de streaming de vídeo. Suporta implantação localizada e é fácil de operar. Endereço de código aberto: https://github.com/ossrs/srs

Ao compilar e instalar um servidor de streaming de código aberto, podemos economizar custos de desenvolvimento, realizar uma implantação rápida do servidor de streaming e enviar vídeo.

FFmpeg integra o mecanismo de inferência OpenVINO™

Introdução ao FFmpeg

O FFmpeg não é apenas uma ferramenta de codificação e decodificação de áudio e vídeo, mas também um conjunto de kits de desenvolvimento de codificação de áudio e vídeo. Como um kit de desenvolvimento de codificação, ele fornece aos desenvolvedores interfaces de chamada ricas para processamento de áudio e vídeo. O FFmpeg fornece encapsulamento e desencapsulamento de uma variedade de formatos de mídia, incluindo uma variedade de codificação de áudio e vídeo, mídia de streaming de vários protocolos, uma variedade de conversão de formato colorido, uma variedade de conversão de taxa de amostragem, uma variedade de conversão de taxa de código, etc.; A estrutura FFmpeg fornece uma variedade de módulos de plug-in, incluindo plug-ins para empacotamento e desencapsulamento, plug-ins para codificação e decodificação, etc.

A composição básica da estrutura FFmpeg inclui bibliotecas de módulos como AVFormat, AVCodec, AVFilter, AVDevice e AVUtil. O diagrama de estrutura é o seguinte: Figura 5: Diagrama de arquitetura de software FFmpeg

FFmpeg integra OpenVINO™ Toolkit

OpenVINO™ é um conjunto de estruturas de aprendizado profundo lançado pela Intel, que oferece suporte a vários formatos de arquivo de modelo, incluindo Tensorflow , Caffe , ONNX , MXNet , Kaldi e Torch*, etc., e também oferece suporte a vários hardwares Intel, incluindo CPU, GPU, FPGA, Movidius™ Neural Compute Stick, etc. Como o FFmpeg requer que a biblioteca chamada forneça uma API C, o OpenVINO™ acabou de adicionar essa interface na versão 2020. Além disso, o back-end do OpenVINO™ pode fornecer mais suporte ao formato do modelo do que o back-end do TensorFlow e pode oferecer suporte a mais e melhores hardwares subjacentes. Portanto, a comunidade FFmpeg adotou o mecanismo de inferência no OpenVINO™ como um novo back-end de aprendizado profundo. Figura 6: diagrama de arquitetura interna do AVFilter

No AVFilter, integraremos o mecanismo de inferência do OpenVINO™ como back-end da interface DNN. Atualmente, não há filtro para análise de imagem baseado em modelos de aprendizado profundo no FFmpeg, apenas um filtro geral para processamento de imagem, chamado dnn_processing, então usamos dnn_processing como exemplo de demonstração:

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

Como o FFmpeg não possui a biblioteca de suporte de back-end OpenVINO™ nas opções de compilação padrão, neste exemplo, os desenvolvedores precisam recompilar o FFmpeg e integrar o libopenvino à biblioteca integrada do FFmpeg. Também gostaria de agradecer ao Sr. Guo Yejun por incorporar a interface C do OpenVINO na biblioteca habilitada do FFmpeg, para que o FFmpeg suporte oficialmente a chamada da biblioteca libopenvino.so e o acesso ao mecanismo OpenVINO para raciocínio do modelo. Endereço de código aberto: https://github.com/mattcurf/ffmpeg_openvino

Fluxo do Projeto

instalação do sistema operacional

O sistema operacional Linux instalado no manual operacional Xzsteam oficial (https://www.xzsteam.com/docs/ ) é o Ubuntu 20.04. Para facilitar a operação e a demonstração, optamos por usar o sistema operacional Ubuntu 20.04 com uma interface gráfica para demonstração.

Se a pressão de codificação e decodificação for muito alta, você também pode escolher um sistema Linux de versão de servidor sem uma interface gráfica para construir um servidor de streaming. Se você estiver usando outras versões de sistema do Linux, este processo é apenas para referência.

Construir servidor de streaming RTMP

Etapas de construção:

1. Obtenha o código-fonte do servidor srs.

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

2. Instalar dependências e compilar o código-fonte srs.

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

3. Edite o arquivo de configuração srs.

Salve o seguinte conteúdo como um arquivo, como conf/rtmp.conf, você pode modificar o arquivo conf de acordo com suas próprias necessidades e especificar este arquivo de configuração quando o servidor iniciar (a pasta conf de srs possui este arquivo).

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

4. Inicie o servidor srs

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

5. Inicie o codificador de streaming:

Use o comando FFMPEG para enviar um vídeo para o servidor:

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. Assista ao fluxo RTMP.

O endereço do stream RTMP é: rtmp:///live/livestream

Se o sistema não tiver um VLC player, use o seguinte comando para instalar o VLC player:

sudo apt-get install vlc

Use o player VLC para inserir o endereço de fluxo RTMP para assistir ao fluxo de vídeo.

Instale o FFmpeg e compile o kit de ferramentas OpenVINO™

1. Instale dependências de software

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. Instale OpenCL e 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. Instale o OpenVINO™ Toolkit

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. Baixe, compile e instale o FFmpeg enquanto habilita o 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

Execute o servidor de streaming

Execute o servidor de streaming RTMP

./objs/srs -c conf/rtmp.conf
  • Use o FFmpeg para enviar o fluxo de tela em tempo real da câmera 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

Figura 7: Push de streaming de vídeo da câmera

  • Empurre o vídeo após processá-lo através do 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

Figura 8: Streaming de vídeo MP4

  • Splicing de vídeo multicanal, tendo como exemplo o splicing de vídeo de 4 canais:

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

 

Figura 9: Empurre e junte 4 vídeos MP4

  • adicionar marca d'água ao vídeo

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

 Figura 10: transmitir vídeo e adicionar marca d'água

  • Processamento de vídeo com IA

Use o kit de ferramentas OpenVINO™ como back-end para executar a super-resolução AI no vídeo de entrada, baixe o modelo IR necessário e teste o vídeo. O modelo AI usa o modelo de super resolução de vídeo Efficient Sub-Pixel Convolutional Neural Network (ESPCN). Para mais informações sobre o modelo, acesse: 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

O vídeo de entrada é um vídeo mp4 no formato 480p e o codec é colocado na placa gráfica integrada usando VAAPI, e o codec de vídeo é acelerado usando VAAPI na placa gráfica integrada. Em primeiro lugar, a decodificação rígida precisa ser carregada no cache para processamento, e o modelo ESPCN que usa o raciocínio OpenVINO é lido por meio de "dnn_processing". A entrada/saída determina a camada de entrada e a camada de saída do modelo. O "Dispositivo" O parâmetro pode definir o dispositivo que executa o raciocínio do modelo. Aqui, definimos como "GPU", o que significa usar a placa gráfica integrada para inferência do modelo. Você também pode definir como "CPU". Depois que os vfilters funcionarem, o hwupload irá empacotar Por fim, envie o vídeo concluído em super-resolução:

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

Figura 11: A super-resolução de vídeo 480P torna-se push stream de 960P e uso/taxa de quadros por segundo da placa gráfica integrada

Como um software de processamento de vídeo de código aberto, o FFmpeg possui uma variedade de redes de ferramentas de software compatíveis com back-end. Você pode explorar o acesso a vários back-ends de processamento de vídeo, ferramentas de aceleração de software e hardware e programas personalizados. whaosoft  aiot  http://143ai.com

Você também pode usar o FFmpeg, o conjunto de ferramentas OpenVINO™ e a placa de desenvolvimento Aix para realizar aplicações ou invenções mais criativas de acordo com suas necessidades ou interesses. Se você já tem uma boa ideia ou plano de desenvolvimento, pode se inscrever na placa de desenvolvimento Aix para experimentos gratuitos preenchendo a descrição do plano de desenvolvimento. Para obter detalhes, clique em: Feliz 5º aniversário, evento Intel "Approaching Developers" para receber desenvolvedor gratuito kits (https://mp.weixin.qq.com/s/pHp7lwqEsK9x8rqWhWir_A)

3.5 Transmissão ao vivo na Internet

Para streaming de vídeo na rede pública, use Douyu*.com como exemplo: webcasting é um campo muito popular no momento. Para usuários comuns, eles usarão o software complementar de streaming ao vivo fornecido pelo site de streaming ao vivo para streaming ao vivo, como mostrado na figura abaixo: Figura 12: interface complementar de transmissão ao vivo do Douyu

Com base no estabelecimento do servidor RTMP, podemos enviar o fluxo de vídeo da câmera ao vivo ou o vídeo armazenado no servidor por meio do fluxo de envio do servidor. Com o suporte do FFmpeg e do OpenVINO™, também podemos editar o fluxo de vídeo a ser enviado, dotar o raciocínio de IA e outros recursos e enviar o vídeo processado ao vivo. O software de transmissão ao vivo geralmente fornece acesso aos recursos da Internet, o que é conveniente para o host extrair fluxos diretamente.

rede local:

Por meio do IP da LAN, o fluxo de vídeo processado pode ser enviado ao cliente na intranet.

4 Resumo

DevKit com certificação Intel®—— A placa de desenvolvimento Aix usa Intel® Celeron™ N5105 como núcleo de processamento, que atinge excelente desempenho de computação com o mesmo consumo de energia. Neste exemplo, ele serve como um pequeno servidor de mídia de streaming, que pode obter codec multicanal, transmissão de vídeo em tempo real e enviar o vídeo após o processamento de IA com a ajuda do pacote de ferramentas OpenVINO™. Este artigo usa um modelo de super-resolução como exemplo para aplicar o raciocínio de IA a um servidor de streaming de mídia. Isso fornece principalmente aos desenvolvedores essa ideia, como detecção de face, segmentação ou modelos de reconhecimento também podem ser implantados no servidor, o modelo de IA é usado para processar o vídeo transmitido por meio de IA, de modo que um servidor de streaming de vídeo comum possa ser habilitado para IA. Não se esqueça, se você tiver uma boa ideia, você pode solicitar uma placa de desenvolvimento Aix gratuita para experimentação enviando uma descrição do plano de desenvolvimento. Para obter detalhes, clique em: Happy 5th Anniversary, evento Intel "Approach Developers" para receber um kit de desenvolvedor ( https://mp.weixin.qq.com/s/pHp7lwqEsK9x8rqWhWir_A )

Os servidores de mídia streaming RTMP são amplamente utilizados no mercado. Além da transmissão de vídeo ponto a ponto, esse servidor pode ser usado para reproduzir e processar vídeos automaticamente, o que pode obter certo valor comercial. Como o FFmpeg, um framework de código aberto, tem um alto grau de liberdade, desde que seja uma função que o FFmpeg possa integrar, ele pode ser facilmente implantado no servidor. Venha participar da atividade, candidate-se a um conselho e comece a criar experimentos.

Acho que você gosta

Origin blog.csdn.net/qq_29788741/article/details/132288072
Recomendado
Clasificación