文章指導(dǎo):方亮,郭葉軍
1本文目的
本文將會介紹如何使用英特爾開發(fā)者套件——愛克斯開發(fā)板快速搭建 RTMP 流媒體服務(wù)器,并利用 FFmpeg* 實現(xiàn)視頻推流的功能。由于 FFmpeg 后端支持 OpenVINO 賦能,所以在視頻推流的基礎(chǔ)上,我們可以部署AI模型實現(xiàn)對視頻流的 AI 處理。并且,我們將充分利用CPU所攜帶的集成顯卡(iGPU)進行視頻的編解碼加速和 AI 推理。
2項目簡介
圖:Intel DevKit RTMP 推流服務(wù)器項目流程圖
項目介紹:通過 FFmpeg 讀取攝像頭視頻流、本地視頻或者網(wǎng)絡(luò)視頻并解碼,解碼后調(diào)用FFmpeg包含的視頻處理功能,包括了視頻剪輯,視頻拼接,視頻水印等等,并且能夠支持 OpenVINO 工具套件作為后端對輸入視頻進行AI處理。由于 FFmpeg 可以兼容軟硬編解碼庫,所以可以選擇CPU或者集成顯卡(iGPU)加速視頻的編解碼等功能。最后將處理完成的視頻通過 FFmpeg 推流至在本地搭建好的 RTMP 流媒體服務(wù)器
(Simple Realtime Server)中。若在局域網(wǎng)中,客戶可以根據(jù) IP 地址,直接拉取視頻流進行觀看。若在公網(wǎng)中,該視頻流將傳輸至公開視頻流網(wǎng)站,通過公網(wǎng)節(jié)點進行廣播。
2.1英特爾開發(fā)者套件——愛克斯開發(fā)板簡介
英特爾開發(fā)者套件—— AIxBoard(愛克斯板*)開發(fā)板是專為支持入門級邊緣 AI 應(yīng)用程序所設(shè)計的嵌入式硬件,它能夠滿足開發(fā)者對于人工智能學(xué)習(xí)、開發(fā)、實訓(xùn)等應(yīng)用場景的使用需求。
基于 x86 平臺所設(shè)計的開發(fā)板,可支持 Linux Ubuntu 及完整版 Windows 操作系統(tǒng),很方便開發(fā)者進行軟硬件開發(fā),以及嘗試所有 x86 平臺能夠應(yīng)用的軟件功能。開發(fā)板搭載一顆英特爾賽揚N5105 4核4線程處理器,睿頻可達2.9GHz,且內(nèi)置英特爾 超核芯顯卡,集成顯卡運行頻率為450MHz至800MHz,含有24個執(zhí)行單元,分辨率最大支持4K60幀,同時支持英特爾Quick Sync Video 技術(shù)可以快速轉(zhuǎn)換便攜式多媒體播放器的視頻,還能提供在線共享、視頻編輯及視頻制作功能。板載 64GB eMMC存儲及LPDDR4x 2933MHz
(4GB/6GB/8GB), 內(nèi)置藍牙和 Wi-Fi模組,支持USB 3.0、HDMI視頻輸出、3.5mm音頻接口,1000Mbps 以太網(wǎng)口。板子的接口豐富,還可以外拓各種傳感器模塊。
此外, 其接口與 Jetson Nano 載板兼容,GPIO 與樹莓派兼容,能夠最大限度地復(fù)用樹莓派、Jetson Nano 等生態(tài)資源,無論是攝像頭物體識別,3D 打印,還是 CNC 實時插補控制都能穩(wěn)定運行??勺鳛檫吘売嬎阋嬗糜谌斯ぶ悄?a target="_blank">產(chǎn)品驗證、開發(fā);也可以作為域控核心用于機器人產(chǎn)品開發(fā)。
英特爾開發(fā)者套件的 x86 架構(gòu)可以支持完整的 Windows 系統(tǒng),不需要特殊優(yōu)化就能直接獲得 Visual Studio、OpenVINO、OpenCV 等最強大的軟件支持,最成熟的開發(fā)生態(tài),數(shù)百萬的開源項目,給你的創(chuàng)意提供更多助力。無論您是一個 DIY 的狂熱愛好者、交互設(shè)計師還是機器人專家,都可以玩轉(zhuǎn)開發(fā)板進行創(chuàng)意開發(fā)工作。
2.2實時消息傳遞協(xié)議(RTMP)
2.2.1 RTMP 介紹
實時消息傳遞協(xié)議的全稱是Real-Time Messaging Protocol (RTMP)。簡單地說,流媒體協(xié)議就是在兩個通信系統(tǒng)之間傳輸多媒體文件的一套規(guī)則,它定義了視頻文件將如何分解為小數(shù)據(jù)包以及它們在互聯(lián)網(wǎng)上傳輸?shù)捻樞?。RTMP 是一個比較常見的流媒體協(xié)議,RTMP 由 Macromedia 進行開發(fā),用于流式傳輸?shù)?Flash 播放器,但是隨著 Flash 開始被淘汰并且基于 HTTP 的協(xié)議成為流式傳輸?shù)讲シ旁O(shè)備的新標準,RTMP 在流媒體協(xié)議中應(yīng)用范圍逐漸收窄。但是絲毫不影響 RTMP 的使用,在端對端的視頻流直播中它仍然占有很大的優(yōu)勢!
RTMP 使用獨占的 1935 端口,基于 TCP 協(xié)議,在不需要緩沖的情況下,實現(xiàn)了低延時的特點,并且協(xié)議連接穩(wěn)定。用戶在觀看視頻的時候,若網(wǎng)絡(luò)發(fā)生斷開,用戶重連后可以基于上次的斷開點繼續(xù)播放。RTMP 的整合靈活度很強,不僅可以整合文本、視頻和音頻,還可以支持 MP3 和 AAC 音頻流、 MP4、FLV 和 F4V 視頻流。
但是,RTMP 也有一些不足,比如不支持高分辨率視頻和 VP9、AV1 等視頻壓縮方法,像 iOS,Android、大多數(shù)嵌入式播放器和一些瀏覽器現(xiàn)在已經(jīng)不再接受 RTMP 直播,某些網(wǎng)絡(luò)默認阻止 RTMP 端口,這需要特殊的防火墻修改才能允許通過被阻止的網(wǎng)絡(luò)。
基于 RTMP 協(xié)議進行視頻的推拉流傳輸,我們需要一個中繼視頻流服務(wù)器來進行 RTMP 流的分發(fā),這樣一方面既能保證推流的穩(wěn)定性,另一方面也方便管理員對視頻流進行監(jiān)督管理。
2.2.2 Simple Realtime Server (SRS)
SRS* 是一個簡單高效的實時視頻流服務(wù)器,支持的協(xié)議包括了RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181。
支持的系統(tǒng)有 Linux/Windows/macOS, 芯片架構(gòu)包括了
X86_64/ARMv7/AARCH64/M1/RISCV/LOONGARCH/MIPS。
你可以用它實現(xiàn)視頻推流,并且支持http回調(diào)事件(HTTP Callback),還可以保存視頻流文件。支持本地化部署,操作簡單。開源地址: https://github.com/ossrs/srs
通過編譯安裝這樣一個開源的流媒體服務(wù)器,我們可以節(jié)省開發(fā)成本,實現(xiàn)快速部署流媒體服務(wù)器,并進行視頻推流。
2.3FFmpeg 集成 OpenVINO 推理引擎
2.3.1 FFmpeg 介紹
FFmpeg 即是一款音視頻編解碼工具,同時也是一組音視頻編碼開發(fā)套件,作為編碼開發(fā)套件,它為開發(fā)者提供了豐富的音視頻處理的調(diào)用接口。
FFmpeg 提供了多種媒體格式的封裝和解封裝,包括多種音視頻編碼、多種協(xié)議的流媒體、多種多彩格式轉(zhuǎn)換、多種采樣率轉(zhuǎn)換、多種碼率轉(zhuǎn)換等;FFmpeg 框架提供了多種豐富的插件模塊,包含封裝與解封裝的插件、編碼與解碼的插件等。
FFmpeg 框架的基本組成包含 AVFormat、AVCodec、AVFilter、AVDevice、AVUtil 等模塊庫,結(jié)構(gòu)圖如下:
圖:FFmpeg 軟件架構(gòu)圖
2.3.2FFmpeg 集成 OpenVINO Toolkit
OpenVINO 是英特爾發(fā)布的一套深度學(xué)習(xí)框架,支持多種模型文件格式,包括 Tensorflow*、 Caffe*、ONNX*、MXNet*、Kaldi和Torch* 等,也支持各種英特爾硬件,包括 CPU、GPU、FPGA、Movidius 神經(jīng)計算棒等。由于 FFmpeg 要求調(diào)用的庫必須提供 CAPI,而剛好 OpenVINO 在2020年發(fā)布版本中增加了這樣的接口。再加上 OpenVINO 后端相對于 TensorFlow 后端可以提供更多的模型格式支持,而且可以更多更好的支持各種底層硬件。所以,F(xiàn)Fmpeg 社區(qū)接受了 OpenVINO 中的推理引擎作為一個新的深度學(xué)習(xí)后端。
圖:AVFilter 內(nèi)部架構(gòu)圖
在 AVFilter 中,我們將會集成 OpenVINO 的推理引擎作為 DNN interface 的后端進行使用。目前,F(xiàn)Fmpeg 中沒有基于深度學(xué)習(xí)模型的圖像分析的 filter,只有圖像處理的通用 filter,即 dnn_processing,也因此我們使用
dnn_processing 作為演示的例子:
dnn_processing=dnn_backend=openvino:model=
向右滑動查看完整代碼
由于在默認編譯選項下,F(xiàn)Fmpeg 沒有 OpenVINO 后端支持庫,所以,在本例中需要開發(fā)者重新編譯 FFmpeg,將 libopenvino 集成到 FFmpeg 的內(nèi)置庫中。這里也感謝郭葉軍老師將 OpenVINO 的C接口并入 FFmpeg 的 enable 庫中,使得 FFmpeg 官方支持調(diào)用 libopenvino.so 庫,接入 OpenVINO 引擎進行模型推理。
開源地址:
https://github.com/mattcurf/ffmpeg_openvino
3項目流程
3.1
操作系統(tǒng)安裝
愛克斯板官方操作手冊上Linux OS 安裝的系統(tǒng)為Ubuntu 20.04,為了方便操作演示,我們選擇使用圖形界面的Ubuntu 20.04 操作系統(tǒng)進行演示。
若編解碼壓力過大,也可以選擇不帶圖形化界面的 server 版 Linux 系統(tǒng)搭建流服務(wù)器。若你是其他系統(tǒng)版本的 Linux, 本流程僅供參考。
3.2搭建 RTMP 流媒體服務(wù)器
搭建步驟:
1、獲取 srs 服務(wù)器源碼。
git clone https://github.com/ossrs/srs cd srs/trunk
向右滑動查看完整代碼
2、安裝依賴并編譯 srs 源碼。
sudo apt install -y automake tclsh ./configure && make
向右滑動查看完整代碼
3、編輯 srs 配置文件。
將以下內(nèi)容保存為文件,譬如 conf/rtmp.conf,你可以根據(jù)自身需求對conf文件進行修改,服務(wù)器啟動時指定該配置文件(srs 的 conf 文件夾有該文件)。
# conf/rtmp.conf listen 1935; max_connections 1000; vhost __defaultVhost__ { }
向右滑動查看完整代碼
4、啟動 srs 服務(wù)器
./objs/srs -c conf/rtmp.conf
向右滑動查看完整代碼
5、啟動推流編碼器:
使用 FFMPEG 命令推流一個視頻至服務(wù)器端:
for((;;)); do ./objs/ffmpeg/bin/ffmpeg -re -i-vcodec copy -acodec copy -f flv -y rtmp:// /live/livestream; sleep 1; done
向右滑動查看完整代碼
6、觀看 RTMP 流。
若系統(tǒng)沒有 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 #設(shè)置環(huán)境變量 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運行流媒體服務(wù)器
運行 RTMP 流媒體服務(wù)器
./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” 參數(shù)可以設(shè)置運行模型推理的設(shè)備,這里我們將其設(shè)置為 “GPU”,意思是使用集成顯卡進行模型推理,你也可以將其設(shè)置為 “CPU”,vfilters 工作結(jié)束之后 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 作為一款開源的視頻處理軟件,其后端兼容的軟件工具網(wǎng)絡(luò)多種多樣,你可以探索接入各種視頻處理后端,軟硬件加速工具,以及自定義程序。
你也可以根據(jù)你的需求或者興趣,利用 FFmpeg、OpenVINO 工具套件和愛克斯開發(fā)板實現(xiàn)更多有創(chuàng)意的應(yīng)用或者發(fā)明。如果你已經(jīng)有了好的創(chuàng)意或者開發(fā)計劃,可以通過填寫開發(fā)計劃說明來免費申請愛克斯開發(fā)板進行實驗,詳情請點擊:
3.5網(wǎng)絡(luò)推流直播
在公網(wǎng)上進行視頻推流
網(wǎng)絡(luò)直播現(xiàn)在當下是一個非常熱門的領(lǐng)域,對于一般用戶來說,他們會使用直播網(wǎng)站提供的直播伴侶軟件進行直播。
基于 RTMP 服務(wù)器的建立,我們可以通過服務(wù)器推流的方式,將想要進行直播的攝像頭視頻流或者是存儲于服務(wù)器的視頻進行推流直播。在 FFmpeg 和 OpenVINO 的加持下,我們也可以對要推的視頻流進行編輯操作,賦予 AI 推理之類的能力,將處理過的視頻進行推流直播。直播軟件一般都會提供獲取互聯(lián)網(wǎng)資源的接入口,方便主播直接進行拉流。
局域網(wǎng):
通過局域網(wǎng) IP,可以在內(nèi)網(wǎng)對客戶端進行推送處理過的視頻流。
4總結(jié)
英特爾開發(fā)者套件 —— 愛克斯開發(fā)板以Intel Celeron N5105作為處理核心,在相同的功耗下獲得了優(yōu)秀的計算性能。在本例中,它作為一個小型的流媒體服務(wù)器,可以做到多路編解碼,實時視頻傳輸,以及在 OpenVINO 工具套件的幫助下對視頻進行 AI 處理后將視頻進行推流。本文以一個超分模型為例,將AI推理應(yīng)用于這樣一個流媒體服務(wù)器中,這主要也是給廣大開發(fā)者提供了這樣一個思路,可以將例如人臉檢測,分割,或者識別模型同樣部署于流服務(wù)器中,利用 AI 模型將推流出來的視頻經(jīng)過AI處理,這樣就能給一個普通的視頻流服務(wù)器進行 AI 賦能。別忘了,如果你有好的創(chuàng)意,可以通過提交開發(fā)計劃說明來免費申請愛克斯開發(fā)板進行實驗。
RTMP 流媒體服務(wù)器在市面上的應(yīng)用十分廣泛,除了點對點的視頻傳播,像現(xiàn)在非常熱門的網(wǎng)絡(luò)直播,都可以通過這樣一個服務(wù)器達到自動播放視頻,自動處理視頻的效果,能夠獲得一定的商業(yè)價值。由于 FFmpeg 這樣一個開源框架的自由度很高,只要是 FFmpeg 能夠集成的功能,都可以很輕松地部署到服務(wù)器中,大家快來參與活動,申請板子開始創(chuàng)造實驗吧。
-
英特爾
+關(guān)注
關(guān)注
61文章
9964瀏覽量
171784 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9160瀏覽量
85425 -
AI
+關(guān)注
關(guān)注
87文章
30896瀏覽量
269107 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5050瀏覽量
97482 -
開發(fā)者
+關(guān)注
關(guān)注
1文章
575瀏覽量
17013
原文標題:10分鐘用英特爾? 開發(fā)者套件搭建RTMP流媒體服務(wù)器并基于OpenVINO? AI賦能視頻處理?| 開發(fā)者實戰(zhàn)
文章出處:【微信號:英特爾物聯(lián)網(wǎng),微信公眾號:英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論