海思芯片硬件java加速_海思芯片直播延迟测试结果(小于100毫秒)
背景
最近接觸了許多客戶,許多是做安全方面產(chǎn)品的客戶,有些還涉及到j(luò)un隊(duì)后勤的等等,他們普遍對(duì)采集延遲,編碼延遲,傳輸延遲等都有很大關(guān)注。例如有個(gè)客戶是做反狙擊探測(cè)的,那可是與生命相關(guān)的,容不得試錯(cuò)的(PS:我無(wú)法判斷海思Hi3531D/Hi3521D系列產(chǎn)品是否適合做這種高實(shí)時(shí)性的產(chǎn)品,當(dāng)然做個(gè)評(píng)估或者算法驗(yàn)證完全是可以的)。
測(cè)量方法
精準(zhǔn)測(cè)試延遲的方法要用專業(yè)儀器來(lái)測(cè)量,或者在程序中記錄精準(zhǔn)時(shí)間來(lái)判斷,這些方法過于專業(yè),也不方便展示,本文采用的測(cè)量方法是目測(cè)法,這個(gè)方法不大精準(zhǔn),但最容易展示。
????如上圖所,通常直播是經(jīng)過采集,編碼,網(wǎng)絡(luò)輸出,網(wǎng)絡(luò)接收,解碼,顯示輸出,經(jīng)過這幾大環(huán)節(jié)后,用戶才能看到直播的畫面,其總延遲是T1-T3;采集延遲為T1-T2。直播延遲還跟網(wǎng)絡(luò)協(xié)議有關(guān),其中UDP,RTMP和RTSP延遲相對(duì)較小,HTTP延遲偏大,延遲最大的是HLS,這種技術(shù)是切片技術(shù),很適合做對(duì)延遲要求不高的網(wǎng)絡(luò)直播(例如非互動(dòng)的單向直播,IPTV就是這類),該技術(shù)最大的好處就是能在網(wǎng)絡(luò)帶寬波動(dòng)很大的環(huán)境下也能保持流暢(其實(shí)就是因?yàn)榫彌_夠大嘛)。
測(cè)試結(jié)果
為了抓拍到T1,T2,T3,我們使用單反相機(jī)快速連拍功能,分別對(duì)UDP,RTSP和RTMP協(xié)議的測(cè)試進(jìn)行抓拍,然后對(duì)抓拍到圖片序列進(jìn)行統(tǒng)計(jì)分析。抓拍到的圖片序列已經(jīng)上傳到百度網(wǎng)盤,需要的可以從我們百度網(wǎng)盤上下載: 鏈接:https://pan.baidu.com/s/1ySnVeRHsuvzvtywh8xDz1g 提取碼:qx9x
????如上圖所示,做為信號(hào)源的筆記本顯示的時(shí)間碼是19:35:55.217,而編碼板采集預(yù)覽顯示的時(shí)間碼也是19:35:55.217,說(shuō)明采集延遲為T1-T2=217-217=0,忽略不計(jì);解碼板通過網(wǎng)絡(luò)接收來(lái)自編碼板的網(wǎng)絡(luò)流,解碼后通過HDMI輸出,其顯示的時(shí)間碼是19:35:55.174,那說(shuō)明延遲為T1-T3=217-174=43,也就是延遲為43毫秒。為了方便用戶查看和對(duì)比,我們把拍下來(lái)的照片的時(shí)間碼做了記錄,并用EXCEL表做了計(jì)算,參見下表。
????從上表可以看出,UDP(TS封裝)的平均延遲為71.1毫秒,由于我們的TS封裝是使用了FFMPEG來(lái)進(jìn)行封裝的,所以封裝延遲較大,如果采用RAW H264/H265 UDP,估計(jì)延遲會(huì)大大降低;RTSP OVER UDP平均延遲為83豪秒,還真搞不懂這個(gè)延遲什么會(huì)這么大;RTMP的延遲僅為52.6毫秒,真是有點(diǎn)意外,而且每個(gè)采樣的延遲幾乎都是在43毫秒左右,很均勻,不像TS-UDP和RTSP OVER UDP每個(gè)采樣測(cè)出的延遲數(shù)據(jù)波動(dòng)有點(diǎn)大。
源程序
編碼端源程序
//main.cpp
#include
#include "Link.h"
#define RTSP
//#define UDP
//#define RTMP
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Link::init();
LinkObject *vi=Link::create("InputVi");
QVariantMap dataVi;
dataVi["interface"]="HDMI-A";
vi->start(dataVi);
LinkObject *vo=Link::create("OutputVo");
QVariantMap dataVo;
dataVo["type"]="hdmi";
dataVo["lowLatency"]=true;
vo->start(dataVo);
vi->linkV(vo);
LinkObject *encV=Link::create("EncodeV");
QVariantMap dataEncV;
dataEncV["codec"]="h264";
dataEncV["framerate"]=60;
dataEncV["width"]=1920;
dataEncV["height"]=1080;
dataEncV["bitrate"]=8000;
dataEncV["lowLatency"]=true;
encV->start(dataEncV);
LinkObject *mux=Link::create("Mux");
QVariantMap dataRtsp;
#ifdef RTSP
dataRtsp["path"]="mem://test";
dataRtsp["format"]="rtsp";
#elif UDP
dataRtsp["path"]="mem://test";
dataRtsp["format"]="mpegts";
#elif RTMP
dataRtsp["path"]="rtmp://127.0.0.1/live/test";
dataRtsp["format"]="flv";
#endif
dataRtsp["mute"]=true;
mux->start(dataRtsp);
#ifdef RTSP
LinkObject *rtspServer=Link::create("Rtsp");
rtspServer->start();
vi->linkV(encV)->linkV(mux)->linkV(rtspServer);
#elif UDP
LinkObject *udp=Link::create("TSUdp");
QVariantMap dataUDP;
dataUDP["ip"]="192.168.1.77";
dataUDP["port"]=1234;
udp->start(dataUDP);
vi->linkV(encV)->linkV(mux)->linkV(udp);
#elif RTMP
vi->linkV(encV)->linkV(mux);
#endif
return a.exec();
}
解碼端源程序
//main.cpp
#include
#include "Link.h"
#define RTSP
//#define UDP
//#define RTMP
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Link::init();
LinkObject *vo=Link::create("OutputVo");
QVariantMap dataVo;
dataVo["type"]="hdmi";
vo->start(dataVo);
LinkObject *net=Link::create("InputNet");
QVariantMap dataNet;
#ifdef RTSP
dataNet["path"]="rtsp://192.168.1.76/test";
#elif UDP
dataNet["path"]="udp://@:1234";
#elif RTMP
dataNet["path"]="rtmp://192.168.1.76/live/test";
#endif
dataNet["protocol"]="udp";
dataNet["buffer"]=false;
dataNet["sync"]=false;
net->start(dataNet);
LinkObject *dec=Link::create("DecodeV");
QVariantMap dataDec;
dataDec["lowLatency"]=true;
dec->start(dataDec);
net->linkV(dec)->linkV(vo);
return a.exec();
}
抓拍的圖片序列
為了方便閱讀,我們這里對(duì)每一種網(wǎng)絡(luò)協(xié)議抓拍到的圖片展示三幅圖,若需要查看全部的圖,請(qǐng)到網(wǎng)盤下載。
1.TS over UDP
2.RTSP over UDP
3.RTMP
總結(jié)
以上是生活随笔為你收集整理的海思芯片硬件java加速_海思芯片直播延迟测试结果(小于100毫秒)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java web 有哪些标签库_java
- 下一篇: salt java 日志 乱码_Salt