0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用英特尔开发者套件搭建RTMP流媒体服务器

英特尔物联网 来源:英特尔物联网 2023-07-18 15:58 次阅读

文章作者:周兆靖英特尔高级应用工程师

文章指导:方亮,郭叶军

1本文目的

本文将会介绍如何使用英特尔开发者套件——爱克斯开发板快速搭建 RTMP 流媒体服务器,并利用 FFmpeg* 实现视频推流的功能。由于 FFmpeg 后端支持 OpenVINO 赋能,所以在视频推流的基础上,我们可以部署AI模型实现对视频流的 AI 处理。并且,我们将充分利用CPU所携带的集成显卡(iGPU)进行视频的编解码加速和 AI 推理。

2项目简介

c47e196c-2171-11ee-962d-dac502259ad0.png

图:Intel DevKit RTMP 推流服务器项目流程图

项目介绍:通过 FFmpeg 读取摄像头视频流、本地视频或者网络视频并解码,解码后调用FFmpeg包含的视频处理功能,包括了视频剪辑,视频拼接,视频水印等等,并且能够支持 OpenVINO 工具套件作为后端对输入视频进行AI处理。由于 FFmpeg 可以兼容软硬编解码库,所以可以选择CPU或者集成显卡(iGPU)加速视频的编解码等功能。最后将处理完成的视频通过 FFmpeg 推流至在本地搭建好的 RTMP 流媒体服务器

Simple Realtime Server)中。若在局域网中,客户可以根据 IP 地址,直接拉取视频流进行观看。若在公网中,该视频流将传输至公开视频流网站,通过公网节点进行广播。

2.1英特尔开发者套件——爱克斯开发板简介

英特尔开发者套件—— AIxBoard(爱克斯板*)开发板是专为支持入门级边缘 AI 应用程序所设计的嵌入式硬件,它能够满足开发者对于人工智能学习、开发、实训等应用场景的使用需求。

基于 x86 平台所设计的开发板,可支持 Linux Ubuntu 及完整版 Windows 操作系统,很方便开发者进行软硬件开发,以及尝试所有 x86 平台能够应用的软件功能。开发板搭载一颗英特尔赛扬N5105 4核4线程处理器,睿频可达2.9GHz,且内置英特尔 超核芯显卡,集成显卡运行频率为450MHz至800MHz,含有24个执行单元,分辨率最大支持4K60帧,同时支持英特尔Quick Sync Video 技术可以快速转换便携式多媒体播放器的视频,还能提供在线共享、视频编辑及视频制作功能。板载 64GB eMMC存储及LPDDR4x 2933MHz

(4GB/6GB/8GB), 内置蓝牙Wi-Fi模组,支持USB 3.0、HDMI视频输出、3.5mm音频接口,1000Mbps 以太网口。板子的接口丰富,还可以外拓各种传感器模块。

此外, 其接口与 Jetson Nano 载板兼容,GPIO 与树莓派兼容,能够最大限度地复用树莓派、Jetson Nano 等生态资源,无论是摄像头物体识别,3D 打印,还是 CNC 实时插补控制都能稳定运行。可作为边缘计算引擎用于人工智能产品验证、开发;也可以作为域控核心用于机器人产品开发。

英特尔开发者套件的 x86 架构可以支持完整的 Windows 系统,不需要特殊优化就能直接获得 Visual Studio、OpenVINO、OpenCV 等最强大的软件支持,最成熟的开发生态,数百万的开源项目,给你的创意提供更多助力。无论您是一个 DIY 的狂热爱好者、交互设计师还是机器人专家,都可以玩转开发板进行创意开发工作。

2.2实时消息传递协议(RTMP)

2.2.1 RTMP 介绍

实时消息传递协议的全称是Real-Time Messaging Protocol (RTMP)。简单地说,流媒体协议就是在两个通信系统之间传输多媒体文件的一套规则,它定义了视频文件将如何分解为小数据包以及它们在互联网上传输的顺序。RTMP 是一个比较常见的流媒体协议,RTMP 由 Macromedia 进行开发,用于流式传输到 Flash 播放器,但是随着 Flash 开始被淘汰并且基于 HTTP 的协议成为流式传输到播放设备的新标准,RTMP 在流媒体协议中应用范围逐渐收窄。但是丝毫不影响 RTMP 的使用,在端对端的视频流直播中它仍然占有很大的优势!

RTMP 使用独占的 1935 端口,基于 TCP 协议,在不需要缓冲的情况下,实现了低延时的特点,并且协议连接稳定。用户在观看视频的时候,若网络发生断开,用户重连后可以基于上次的断开点继续播放。RTMP 的整合灵活度很强,不仅可以整合文本、视频和音频,还可以支持 MP3 和 AAC 音频流、 MP4、FLV 和 F4V 视频流。

但是,RTMP 也有一些不足,比如不支持高分辨率视频和 VP9、AV1 等视频压缩方法,像 iOSAndroid、大多数嵌入式播放器和一些浏览器现在已经不再接受 RTMP 直播,某些网络默认阻止 RTMP 端口,这需要特殊的防火墙修改才能允许通过被阻止的网络。

基于 RTMP 协议进行视频的推拉流传输,我们需要一个中继视频流服务器来进行 RTMP 流的分发,这样一方面既能保证推流的稳定性,另一方面也方便管理员对视频流进行监督管理。

2.2.2 Simple Realtime Server (SRS)

SRS* 是一个简单高效的实时视频流服务器,支持的协议包括了RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181。

支持的系统有 Linux/Windows/macOS, 芯片架构包括了

X86_64/ARMv7/AARCH64/M1/RISCV/LOONGARCH/MIPS。

你可以用它实现视频推流,并且支持http回调事件(HTTP Callback),还可以保存视频流文件。支持本地化部署,操作简单。开源地址: https://github.com/ossrs/srs

通过编译安装这样一个开源的流媒体服务器,我们可以节省开发成本,实现快速部署流媒体服务器,并进行视频推流。

2.3FFmpeg 集成 OpenVINO 推理引擎

2.3.1 FFmpeg 介绍

FFmpeg 即是一款音视频编解码工具,同时也是一组音视频编码开发套件,作为编码开发套件,它为开发者提供了丰富的音视频处理的调用接口。

FFmpeg 提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种多彩格式转换、多种采样率转换、多种码率转换等;FFmpeg 框架提供了多种丰富的插件模块,包含封装与解封装的插件、编码与解码的插件等。

FFmpeg 框架的基本组成包含 AVFormat、AVCodec、AVFilter、AVDevice、AVUtil 等模块库,结构图如下:

c562bfa4-2171-11ee-962d-dac502259ad0.png

图:FFmpeg 软件架构图

2.3.2FFmpeg 集成 OpenVINO Toolkit

OpenVINO 是英特尔发布的一套深度学习框架,支持多种模型文件格式,包括 Tensorflow*、 Caffe*、ONNX*、MXNet*、Kaldi和Torch* 等,也支持各种英特尔硬件,包括 CPU、GPUFPGA、Movidius 神经计算棒等。由于 FFmpeg 要求调用的库必须提供 CAPI,而刚好 OpenVINO 在2020年发布版本中增加了这样的接口。再加上 OpenVINO 后端相对于 TensorFlow 后端可以提供更多的模型格式支持,而且可以更多更好的支持各种底层硬件。所以,FFmpeg 社区接受了 OpenVINO 中的推理引擎作为一个新的深度学习后端。

c57f6898-2171-11ee-962d-dac502259ad0.png

图:AVFilter 内部架构图

在 AVFilter 中,我们将会集成 OpenVINO 的推理引擎作为 DNN interface 的后端进行使用。目前,FFmpeg 中没有基于深度学习模型的图像分析的 filter,只有图像处理的通用 filter,即 dnn_processing,也因此我们使用

dnn_processing 作为演示的例子:

dnn_processing=dnn_backend=openvino:model=

向右滑动查看完整代码

由于在默认编译选项下,FFmpeg 没有 OpenVINO 后端支持库,所以,在本例中需要开发者重新编译 FFmpeg,将 libopenvino 集成到 FFmpeg 的内置库中。这里也感谢郭叶军老师将 OpenVINO 的C接口并入 FFmpeg 的 enable 库中,使得 FFmpeg 官方支持调用 libopenvino.so 库,接入 OpenVINO 引擎进行模型推理。

开源地址:

https://github.com/mattcurf/ffmpeg_openvino

3项目流程

3.1

操作系统安装

爱克斯板官方操作手册上Linux OS 安装的系统为Ubuntu 20.04,为了方便操作演示,我们选择使用图形界面的Ubuntu 20.04 操作系统进行演示。

若编解码压力过大,也可以选择不带图形化界面的 server 版 Linux 系统搭建流服务器。若你是其他系统版本的 Linux, 本流程仅供参考。

3.2搭建 RTMP 流媒体服务器

搭建步骤:

1、获取 srs 服务器源码。

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

向右滑动查看完整代码

2、安装依赖并编译 srs 源码。

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

向右滑动查看完整代码

3、编辑 srs 配置文件。

将以下内容保存为文件,譬如 conf/rtmp.conf,你可以根据自身需求对conf文件进行修改,服务器启动时指定该配置文件(srs 的 conf 文件夹有该文件)。

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

向右滑动查看完整代码

4、启动 srs 服务器

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

向右滑动查看完整代码

5、启动推流编码器

使用 FFMPEG 命令推流一个视频至服务器端:

for((;;)); do 
./objs/ffmpeg/bin/ffmpeg -re -i  
-vcodec copy -acodec copy 
-f flv -y rtmp:///live/livestream; 
sleep 1; 
done

向右滑动查看完整代码

6、观看 RTMP 流。

若系统没有 VLC 播放器,使用如下命令安装 VLC 播放器:

sudo apt-get install vlc

向右滑动查看完整代码

使用 VLC 播放器输入 RTMP 流地址,即可观看该视频流。

3.3安装 FFmpeg 并编译 OpenVINO 工具包

1.安装软件依赖

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.安装 OpenCL & 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.安装 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.编译安装 FFmpeg 并 enableOpenVINO

    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

向右滑动查看完整代码

3.4运行流媒体服务器

运行 RTMP 流媒体服务器

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

向右滑动查看完整代码

用 FFmpeg 将 USBCamera 的实时画面流进行推流

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

向右滑动查看完整代码

通过 FFmpeg 将视频进行处理后进行推流

for((;;)); do 
       ffmpeg -re -i  
       -vcodec copy -acodec copy 
       -f flv -y rtmp:// /live/livestream; 
       sleep 1; 
   done

向右滑动查看完整代码

视频多路拼接,以4路视频拼接为例:

for((;;)); do 
       ffmpeg -re -i  -i  
       -i  -i  
       -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:// /live/livestream; 
       sleep 1; 
   done

向右滑动查看完整代码

视频增加水印

for((;;)); do 
       ffmpeg -i  -i  -filter_complex overlay 
       -f flv -ar 44100 -y rtmp:///live/livestream; 
       sleep 1; 
   done

向右滑动查看完整代码

使用 AI 处理视频

使用 OpenVINO 工具套件作为 backend,对输入视频进行 AI 超分,下载所需的IR模型与测试视频。AI 模型使用的是视频超分模型 Efficient Sub-Pixel Convolutional Neural Network (ESPCN),了解模型更多信息,请至: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

向右滑动查看完整代码

输入视频为480p 格式的 mp4 视频,利用 VAAPI 将编解码置于集成显卡中进行,并且在集成显卡中利用 VAAPI 对视频编解码进行加速。首先,硬解码需要先 hwdonwload 到缓存中进行处理,通过 “dnn_processing” 读入使用 OpenVINO 推理的ESPCN 模型,input/output 确定模型的输入层和输出层,“Device” 参数可以设置运行模型推理的设备,这里我们将其设置为 “GPU”,意思是使用集成显卡进行模型推理,你也可以将其设置为 “CPU”,vfilters 工作结束之后 hwupload 进行封装,最后,将超分完成的视频进行推流:

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

向右滑动查看完整代码

FFmpeg 作为一款开源的视频处理软件,其后端兼容的软件工具网络多种多样,你可以探索接入各种视频处理后端,软硬件加速工具,以及自定义程序。

你也可以根据你的需求或者兴趣,利用 FFmpeg、OpenVINO 工具套件和爱克斯开发板实现更多有创意的应用或者发明。如果你已经有了好的创意或者开发计划,可以通过填写开发计划说明来免费申请爱克斯开发板进行实验,详情请点击:

3.5网络推流直播

在公网上进行视频推流

网络直播现在当下是一个非常热门的领域,对于一般用户来说,他们会使用直播网站提供的直播伴侣软件进行直播。

基于 RTMP 服务器的建立,我们可以通过服务器推流的方式,将想要进行直播的摄像头视频流或者是存储于服务器的视频进行推流直播。在 FFmpeg 和 OpenVINO 的加持下,我们也可以对要推的视频流进行编辑操作,赋予 AI 推理之类的能力,将处理过的视频进行推流直播。直播软件一般都会提供获取互联网资源的接入口,方便主播直接进行拉流。

局域网:

通过局域网 IP,可以在内网对客户端进行推送处理过的视频流。

4总结

英特尔开发者套件 —— 爱克斯开发板以Intel Celeron N5105作为处理核心,在相同的功耗下获得了优秀的计算性能。在本例中,它作为一个小型的流媒体服务器,可以做到多路编解码,实时视频传输,以及在 OpenVINO 工具套件的帮助下对视频进行 AI 处理后将视频进行推流。本文以一个超分模型为例,将AI推理应用于这样一个流媒体服务器中,这主要也是给广大开发者提供了这样一个思路,可以将例如人脸检测,分割,或者识别模型同样部署于流服务器中,利用 AI 模型将推流出来的视频经过AI处理,这样就能给一个普通的视频流服务器进行 AI 赋能。别忘了,如果你有好的创意,可以通过提交开发计划说明来免费申请爱克斯开发板进行实验。

RTMP 流媒体服务器在市面上的应用十分广泛,除了点对点的视频传播,像现在非常热门的网络直播,都可以通过这样一个服务器达到自动播放视频,自动处理视频的效果,能够获得一定的商业价值。由于 FFmpeg 这样一个开源框架的自由度很高,只要是 FFmpeg 能够集成的功能,都可以很轻松地部署到服务器中,大家快来参与活动,申请板子开始创造实验吧。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 英特尔
    +关注

    关注

    60

    文章

    9421

    浏览量

    168825
  • 服务器
    +关注

    关注

    12

    文章

    8116

    浏览量

    82509
  • AI
    AI
    +关注

    关注

    87

    文章

    26443

    浏览量

    264044
  • 开发板
    +关注

    关注

    25

    文章

    4429

    浏览量

    93991
  • 开发者
    +关注

    关注

    1

    文章

    499

    浏览量

    16389

原文标题:10分钟用英特尔® 开发者套件搭建RTMP流媒体服务器并基于OpenVINO™ AI赋能视频处理 | 开发者实战

文章出处:【微信号:英特尔物联网,微信公众号:英特尔物联网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式流媒体服务器的设计与实现

    嵌入式流媒体服务器的设计与实现
    发表于 08-20 10:09

    ARM反向进军服务器直捣英特尔老巢

    进军英特尔占优的服务器市场。  ARM公司首席商务官Mike Inglis将此形容为“公司成立25年以来最重要的发布”。据记者了解,包括三星、意法半导体,以及中国芯片厂商海思半导体在内的6家芯片厂商
    发表于 11-01 16:49

    Linux下视频流媒体直播服务器搭建详解

    目标: 搭建网络直播流媒体服务器系统(Linux操作系统) 背景:用于OTT-TV大并发的直播和点播的一套流媒体服务器系统。支持N x 24
    发表于 06-02 14:35

    惠普或IBM等英特尔服务器是否会在全球范围内提供支持?

    关于服务器支持的快速问题。惠普或IBM等英特尔服务器是否会在全球范围内提供支持?像快速响应时间和易于更换。我假设是的,因为它是英特尔,但我不确定。以上来自于谷歌翻译以下为原文Just
    发表于 10-23 10:41

    英特尔服务器主板S2600CW2SR兼容性

    英特尔支持团队, 美好的一天, 我对英特尔服务器主板S2600CW2SR有一些疑问。 根据检查此URL,Ubuntu 16.04包含了基本安装:https://www.intel.sg
    发表于 11-16 11:25

    基于英特尔凌动处理的车载信息娱乐系统

    ——面向嵌入式应用的英特尔凌动处理平台文/英特尔(中国)有限公司基于英特尔凌动处理系列构建的相关平台优势明显,可以用在车载信息娱乐系统、
    发表于 07-18 07:05

    英特尔的十款嵌入式智能处理

    ,是通信、数字标牌、零售、工业和医疗领域嵌入式应用开发者的理想选择;预计会有超过200种嵌入式应用将基于该系列处理研发。w w英特尔向嵌入式市场提供酷睿移动处理,以及其与移动
    发表于 07-29 06:13

    英特尔凌动处理CE4100有什么优点?

    英特尔今天发布了英特尔®凌动™处理CE4100,这是英特尔媒体处理系列中最新的SoC产品,将
    发表于 09-03 06:24

    苹果Mac弃用英特尔芯片的原因

    。  同时,为了协助开发者将其应用从英特尔处理转换到自研处理上,苹果发布了一款特别版的硬件Macmini——DeveloperTransitionKit。  据介绍,这台Macmi
    发表于 06-23 08:53

    英特尔重点发布oneAPI v1.0,异构编程到底是什么

    ,作为它的底层硬件抽象机构,oneAPI Level Zero API 在上个月也达到了 1.0 版本。伴随着迈入 1.0 稳定版,英特尔认为已经准备好提供跨加速架构的通用开发者体验。oneAPI
    发表于 10-26 13:51

    什么是流媒体服务器

    介绍一下什么是流媒体服务器。  其实流媒体服务器从广义上来说,是属于视频服务器的一种。它主要是将视频或者音频文件进行数据压缩,然后存储等,在
    发表于 06-30 09:28

    分布式SFU/MCU媒体服务器该怎样去构建呢

    本文来自英特尔实时通信解决方案架构师 段先德在LiveVideoStackCon2019上海大会的分享,详细介绍了英特尔在进行分布式SFU/MCU媒体服务器的架构设计中秉...
    发表于 11-01 06:57

    英特尔媒体加速参考软件Linux版用户指南

    英特尔媒体加速参考软件是用于数字标志、交互式白板(IWBs)和亭位使用模型的参考媒体播放器应用软件,它利用固定功能硬件加速来提高媒体流速、
    发表于 08-04 06:34

    【技术分享】如何在嵌入式Linux平台上使用Nginx搭建RTMP流媒体服务器

    RTMP作为目前主流的流媒体传输协议,广泛应用于音视频领域。那么我们如何快速在嵌入式板子上搭建起自己的rtmp流媒体
    的头像 发表于 01-05 15:15 418次阅读

    【技术分享】如何在嵌入式Linux平台上使用Nginx搭建RTMP流媒体服务器

    RTMP作为目前主流的流媒体传输协议,广泛应用于音视频领域。那么我们如何快速在嵌入式板子上搭建起自己的rtmp流媒体
    的头像 发表于 01-13 09:27 680次阅读
    【技术分享】如何在嵌入式Linux平台上使用Nginx<b class='flag-5'>搭建</b><b class='flag-5'>RTMP</b><b class='flag-5'>流媒体</b><b class='flag-5'>服务器</b>?