国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot+海康威視攝像頭實(shí)現(xiàn)在前端的預(yù)覽

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot+??低晹z像頭實(shí)現(xiàn)在前端的預(yù)覽。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

本文是之前文章的一篇完善文,如果你是才接觸??低晹z像頭的二次開發(fā)請(qǐng)先閱讀入門篇

攝像頭預(yù)覽

1.什么是rtsp

在實(shí)現(xiàn)攝像頭的預(yù)覽的時(shí)候需要搞懂什么是rtsp。

rtsp是一種實(shí)時(shí)流傳輸協(xié)議(Real Time Streaming Protocol,RTSP),主要使用TCP和UDP完成數(shù)據(jù)的傳輸。

1.1 了解??低時(shí)tsp的url規(guī)范

【老版本】URL規(guī)定:

rtsp://username:password@[ipaddress]/[videotype]/ch[number]/[streamtype]

注:VLC可以支持解析URL里的用戶名密碼,實(shí)際發(fā)給設(shè)備的RTSP請(qǐng)求不支持帶用戶名密碼。

詳細(xì)描述:

SpringBoot+??低晹z像頭實(shí)現(xiàn)在前端的預(yù)覽

舉例說明:

通道01主碼流:
rtsp://admin:test1234@172.6.22.106:554/h264/ch01/main/av_stream

通道01子碼流:
rtsp://admin:test1234@172.6.22.106:554/h264/ch01/sub/av_stream

通道01第3碼流:
rtsp://admin:test1234@172.6.22.106:554/h264/ch01/stream3/av_stream

IP通道01的主碼流:
rtsp://admin:test1234@172.6.22.106:554/h264/ch33/main/av_stream

IP通道01的子碼流:
rtsp://admin:test1234@172.6.22.106:554/h264/ch33/sub/av_stream

零通道主碼流(零通道無子碼流):
rtsp://admin:test1234@172.6.22.106:554/h264/ch0/main/av_stream

注:老版本URL,64路以下的NVR的IP通道的通道號(hào)從33開始,64路以及以上路數(shù)的NVR的IP通道的通道號(hào)從1開始。

【新版本】URL規(guī)定:

rtsp://username:password@[address]:[port]/Streaming/Channels/[id](?parm1=value1&parm2-=value2…)

注:VLC可以支持解析URL里的用戶名密碼,實(shí)際發(fā)給設(shè)備的RTSP請(qǐng)求不支持帶用戶名密碼。

詳細(xì)描述:

SpringBoot+??低晹z像頭實(shí)現(xiàn)在前端的預(yù)覽

舉例說明:

通道01主碼流:
rtsp://admin:abc12345@172.6.22.234:554/Streaming/Channels/101?transportmode=unicast

通道01子碼流:
rtsp://admin:abc12345@172.6.22.234:554/Streaming/Channels/102?transportmode=unicast(單播)
rtsp://admin:abc12345@172.6.22.106:554/Streaming/Channels/102?transportmode=multicast (多播)
rtsp://admin:abc12345@172.6.22.106:554/Streaming/Channels/102 (?后面可省略,默認(rèn)單播)

通道01第3碼流:
rtsp://admin:abc12345@172.6.22.234:554/Streaming/Channels/103?transportmode=unicast

零通道主碼流(零通道無子碼流):
rtsp://admin:12345@172.6.22.106:554/Streaming/Channels/001

注:新版本URL,通道號(hào)全部按順序從1開始。

針對(duì)上面的單播多播做一個(gè)解釋

單播:用網(wǎng)絡(luò)技術(shù)的術(shù)語來描述就是“單播”,此時(shí)信息的接收和傳遞只在兩個(gè)節(jié)點(diǎn)之間進(jìn)行,

網(wǎng)絡(luò)節(jié)點(diǎn)之間的通信就好像是人們之間的對(duì)話一樣。如果一個(gè)人對(duì)另外一個(gè)人說話。
多播:多播也稱為“組播”:將網(wǎng)絡(luò)中同一業(yè)務(wù)類型主機(jī)進(jìn)行了邏輯上的分組,

進(jìn)行數(shù)據(jù)收發(fā)的時(shí)候其數(shù)據(jù)僅僅在同一分組中進(jìn)行,其他的主機(jī)沒有加入此分組不能收發(fā)對(duì)應(yīng)的數(shù)據(jù)。

大概了解了rtsp和??低暤膗rl規(guī)范之后我們來拼接一個(gè)可以播放的地址。

1.2 下載(VLC media player)VLC多媒體播放器

SpringBoot+??低晹z像頭實(shí)現(xiàn)在前端的預(yù)覽
SpringBoot+??低晹z像頭實(shí)現(xiàn)在前端的預(yù)覽
SpringBoot+海康威視攝像頭實(shí)現(xiàn)在前端的預(yù)覽

SpringBoot+??低晹z像頭實(shí)現(xiàn)在前端的預(yù)覽

能成功播放就說明成功了

注:沒有成功的可以檢查一下攝像頭的狀態(tài)和rtsp地址

2.用FFmpeg+Nginx-rtmp推流

2.1 使用FFmpeg工具+Nginx-rtmp模塊

上面我們說到了rtsp,但是這種格式前端是不能直接播放的。

所以我們需要使用FFmpeg把流進(jìn)行轉(zhuǎn)換,再用Nginx-rtmp模塊把流推到我們要播放的地址。

邏輯比較簡單,但是這里需要用到2個(gè)插件。

注:用這種方式推出來的流是rtmp格式的流,需要Flash插件,后面寫一個(gè)不需要Flash插件的

這種方式的好處是延遲低可能只有0.2延遲左右,缺點(diǎn)是需要Flash的插件支持。

2.2 下載FFmpeg

SpringBoot+??低晹z像頭實(shí)現(xiàn)在前端的預(yù)覽

下載穩(wěn)定版的

SpringBoot+海康威視攝像頭實(shí)現(xiàn)在前端的預(yù)覽

下載解壓到指定目錄

SpringBoot+??低晹z像頭實(shí)現(xiàn)在前端的預(yù)覽

配置ffmpeg的環(huán)境變量

計(jì)算機(jī)右鍵屬性——>高級(jí)系統(tǒng)設(shè)置——>環(huán)境變量——>系統(tǒng)變量——>Path——>放入ffmpeg解壓之后的目錄的bin文件夾地址

SpringBoot+??低晹z像頭實(shí)現(xiàn)在前端的預(yù)覽

輸入下面的命令

ffmpeg -version

SpringBoot+海康威視攝像頭實(shí)現(xiàn)在前端的預(yù)覽

2.3 在Java里面操作FFmpeg

這里需要下載一個(gè)三方集成的jar包,來操作和執(zhí)行FFmpeg命令。

阿里云盤地址:https://www.aliyundrive.com/s/zjEKF198tNE

提取碼:2vn4

這里是下載解壓之后的存放jar包的位置,jar包中配置文件的路徑是作者的FFmpeg的安裝路徑。

注:可以更改源碼自行編譯jar包。

或者在自己的Springboot項(xiàng)目中建一個(gè)loadFFmpeg.properties配置文件來覆蓋

SpringBoot+海康威視攝像頭實(shí)現(xiàn)在前端的預(yù)覽

這里也是建議把這個(gè)jar包打進(jìn)自己的maven倉庫,然后引入這個(gè)jar包。

SpringBoot+??低晹z像頭實(shí)現(xiàn)在前端的預(yù)覽

注:這三個(gè)方法需要注意,后面會(huì)用

因?yàn)檫@個(gè)第三方包默認(rèn)是以u(píng)dp推流的,所以需要修改源碼中的CommandAssemblyImpl類

SpringBoot+??低晹z像頭實(shí)現(xiàn)在前端的預(yù)覽

2.4 在Nginx中配置rtmp模塊

這里有一個(gè)源碼地址,需要自己編譯(有能力的可以在windows自行編譯)

https://github.com/arut/nginx-rtmp-module

這個(gè)是已經(jīng)編譯好的(但是版本不是最新的)

https://github.com/illuspas/nginx-rtmp-win32

打開文件夾找到配置文件

SpringBoot+??低晹z像頭實(shí)現(xiàn)在前端的預(yù)覽

重點(diǎn)注意這里的配置

SpringBoot+??低晹z像頭實(shí)現(xiàn)在前端的預(yù)覽

2.5 得到rtmp流

復(fù)習(xí)一下前面的流程

rtsp流——>ffmpeg+Nginx-rtmp——>rtmp流——>前端播放

下面的方法會(huì)涉及到SDK的一些接口,沒看過的可以看之前的入門篇

之前的入門篇講過,在需要執(zhí)行操作的時(shí)候都需要登錄攝像頭。

所以這里的這個(gè)獲取通道號(hào)的時(shí)候前面是需要登錄的,方法中的lUserID就是登錄接口的返回值

注:通道號(hào)可以理解為相機(jī)的標(biāo)識(shí),用來區(qū)分調(diào)用的是哪一個(gè)攝像頭

/**
 * 獲取相機(jī)通道號(hào)
 */
public int getChannelNumber() {
    //獲取IP接入配置參數(shù)
    IntByReference ibrBytesReturned = new IntByReference(0);
    boolean bRet;
    int iChannelNum = -1;
    ipparacfg = new HCNetSDK.NET_DVR_IPPARACFG();
    ipparacfg.write();
    Pointer lpIpParaConfig = ipparacfg.getPointer();
    bRet = hcNetSDK.NET_DVR_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_IPPARACFG, 
                                         0, lpIpParaConfig, ipparacfg.size(), ibrBytesReturned);
    ipparacfg.read();
    String devices = "";
    if (!bRet) {
        //設(shè)備不支持,則表示沒有IP通道
        for (int iChannum = 0; iChannum < deviceiInfo.byChanNum; iChannum++) {
            devices = "Camera" + (iChannum + deviceiInfo.byStartChan);
        }
    } else {
        for (int iChannum = 0; iChannum < HCNetSDK.MAX_IP_CHANNEL; iChannum++) {
            if (ipparacfg.struIPChanInfo[iChannum].byEnable == 1) {
                devices = "IPCamera" + (iChannum + deviceiInfo.byStartChan);
            }
        }
    }
    if (StringUtils.isNotEmpty(devices)) {
        //Camara開頭表示模擬通道
        if (devices.charAt(0) == 'C') {
            //子字符串中獲取通道號(hào)
            iChannelNum = Integer.parseInt(devices.substring(6));
        } else {
            //IPCamara開頭表示IP通道
            if (devices.charAt(0) == 'I') {
                //子字符創(chuàng)中獲取通道號(hào),IP通道號(hào)要加32
                iChannelNum = Integer.parseInt(devices.substring(8)) + 32;
            } else {
                log.info("獲取通道號(hào)失敗");
            }
        }
    }
    return iChannelNum;
}

推流的方法

private static final FFmpegManager manager =new FFmpegManagerImpl();

/**
 * 開始推流
 * @param appName       進(jìn)程名稱,為相機(jī)ip去"."
 * @param account       登錄相機(jī)賬號(hào)
 * @param password      密碼
 * @param ip            相機(jī)ip
 * @param channelNumber 相機(jī)的通道號(hào)
 * @return String appName 
 */
public static String startPlugFlow(String appName, String account, String password, String ip, int channelNumber) {
    //如果進(jìn)程存在,則直接返回進(jìn)程名
    if (MinitorUtil.taskerIsRun(appName)) {
        return appName;
    }
    Map<String, String> map = new HashMap<>(10);
    //嘗試用TCP方式 進(jìn)程名
    map.put("appName", appName);
    // 自定義的參數(shù),需要修改ffmpeg源代碼
    map.put("rtspTransport", "tcp");
    //組裝rtsp流
    map.put("input", "rtsp://" + account + ":" + password + "@" + ip + "/Streaming/Channels" + channelNumber);
    //rtmp流.live為nginx-rtmp的配置
    map.put("output", "rtmp://" + "本機(jī)ip" + ":1935/live/");
    map.put("codec", "copy");
    //只推元碼流
    map.put("twoPart", "1");
    map.put("fmt", "flv");
    // 執(zhí)行任務(wù),就是appName,如果執(zhí)行失敗返回為null
    return manager.start(map);
}

注:上面這個(gè)方法執(zhí)行之前需要啟動(dòng)Nginx,控制臺(tái)會(huì)打印開始推流的命令,

命令執(zhí)行無誤并一直輸出紅色的推流信息,說明是成功的。

執(zhí)行完命令之后組裝rtmp的url地址

String rtmpurl="rtmp://" + "本機(jī)ip" + ":1935/live/" + appName);

這個(gè)地址就是最后的rtmp地址了,同樣的使用VLC播放器進(jìn)行測(cè)試。

SpringBoot+??低晹z像頭實(shí)現(xiàn)在前端的預(yù)覽

能夠正確播放成功說明是沒有問題的。

2.6 關(guān)閉推流

有推流肯定有關(guān)閉推流

SpringBoot+海康威視攝像頭實(shí)現(xiàn)在前端的預(yù)覽

3.用FFmpeg+Nginx-FLV推流

3.1 Nginx中配置flv模塊

阿里云盤地址:https://www.aliyundrive.com/s/oK9SgRquVvp

提取碼:gy20

這里也是一個(gè)編譯好的模塊了。

大概方式和上一種是差不多的

private static final FFmpegManager manager =new FFmpegManagerImpl();

/**
 * 開始推流
 * @param appName       進(jìn)程名稱,為相機(jī)ip去"."
 * @param account       登錄相機(jī)賬號(hào)
 * @param password      密碼
 * @param ip            ip 相機(jī)ip
 * @param nginxIp       nginxIp nginx的ip
 * @param nginxPort     nginxIp nginx的端口
 * @param channelNumber 相機(jī)的通道號(hào)
 * @return String appName 
 */
public static String startPlugFlow(String appName, String account, String password, String ip, 
                                   String nginxIp, String nginxPort, int channelNumber) {
    //如果進(jìn)程存在,則直接返回進(jìn)程名
    if (MinitorUtil.taskerIsRun(appName)) {
        return appName;
    }
    Map<String, String> map = new HashMap<>(10);
    //嘗試用TCP方式 進(jìn)程名
    map.put("appName", appName);
    // 自定義的參數(shù),需要修改ffmpeg源代碼
    map.put("rtspTransport", "tcp");
    //組裝rtsp流
    map.put("input", "rtsp://" + account + ":" + password + "@" + ip + "/Streaming/Channels" + channelNumber);
    //rtmp流.live為nginx-rtmp的配置
    map.put("output", "rtmp://" + nginxIp + ":" + nginxPort + "/live/");
    map.put("codec", "copy");
    //只推元碼流
    map.put("twoPart", "1");
    map.put("fmt", "flv");
    // 執(zhí)行任務(wù),就是appName,如果執(zhí)行失敗返回為null
    return manager.start(map);
}

注:上面這個(gè)方法執(zhí)行之前需要啟動(dòng)Nginx,控制臺(tái)會(huì)打印開始推流的命令,

命令執(zhí)行無誤并一直輸出紅色的推流信息,說明是成功的。

3.2 返回的http地址

執(zhí)行完命令之后組裝rtmp的url地址

String httpUrl="https://" + "nginxIp" + ":" + "nginxPort" + "/live?port=1935&app=live&stream=" + appName);

成功推流

SpringBoot+??低晹z像頭實(shí)現(xiàn)在前端的預(yù)覽

成功播放

SpringBoot+??低晹z像頭實(shí)現(xiàn)在前端的預(yù)覽

關(guān)閉推流:這里的流程和上面是一樣的

注:這種方式的優(yōu)點(diǎn)是不需要Flash插件就能播放

但是存在的問題是延遲較大接近8s左右的延遲和丟包的風(fēng)險(xiǎn)。

4.后續(xù)優(yōu)化

4.1 前端解決方案

前端下載??低暤那岸碎_發(fā)包

SpringBoot+海康威視攝像頭實(shí)現(xiàn)在前端的預(yù)覽文章來源地址http://www.zghlxwxcb.cn/news/detail-401934.html

4.2 后端解決方案

  1. 優(yōu)化FFmpeg的命令和方法。更新并編譯更高Nginx的版本。
  2. 使用WVP+流媒體服務(wù)器實(shí)現(xiàn)推流。

到了這里,關(guān)于SpringBoot+海康威視攝像頭實(shí)現(xiàn)在前端的預(yù)覽的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • QML實(shí)現(xiàn)??低暋P_LINK等攝像頭視頻接入

    ? ? ? ?隨著物聯(lián)網(wǎng)的發(fā)展,越來越多的企業(yè)期望在系統(tǒng)平臺(tái)中接入攝像頭視頻,達(dá)到對(duì)現(xiàn)場(chǎng)的實(shí)時(shí)視頻監(jiān)控的目的。本文通過QML接入???、TP_LINK等攝像頭的視頻流從而在平臺(tái)上展示視頻。 ? ? ? ?1、要做到攝像頭視頻的接入首先要保證攝像頭的通信是正常的,即系統(tǒng)終端和

    2024年02月03日
    瀏覽(93)
  • ??低晹z像頭選型號(hào)指南

    看了一個(gè)星期的攝像頭,經(jīng)過無數(shù)的踩坑和扯皮,看了無數(shù)的說明書和博文,終于從茫茫的攝像頭型號(hào)中浮上岸了,對(duì)這個(gè)攝像頭是什么玩意兒有了大致清晰的認(rèn)識(shí)。我只是用來開發(fā)的,怎么簡單怎么來,所以和民用的方向不一樣,但也可做個(gè)參考。 像素:200-400萬(根據(jù)需求

    2024年02月09日
    瀏覽(25)
  • ??低晹z像頭二次開發(fā)_云臺(tái)控制_視頻畫面實(shí)時(shí)預(yù)覽(基于Qt實(shí)現(xiàn))

    海康威視攝像頭二次開發(fā)_云臺(tái)控制_視頻畫面實(shí)時(shí)預(yù)覽(基于Qt實(shí)現(xiàn))

    需求:需要在公司的產(chǎn)品里集成??低晹z像頭的SDK,用于控制??低暤臄z像頭。 拍照抓圖、視頻錄制、云臺(tái)控制、視頻實(shí)時(shí)預(yù)覽等等功能。 開發(fā)環(huán)境: windows-X64(系統(tǒng)) + Qt5.12.6(Qt版本) + MSVC2017_X64(使用的編譯器) 海康威視提供了 設(shè)備網(wǎng)絡(luò)SDK ,設(shè)備網(wǎng)絡(luò)SDK是基于設(shè)備私有網(wǎng)

    2024年02月13日
    瀏覽(22)
  • opencv調(diào)用??低暪I(yè)攝像頭

    opencv調(diào)用海康威視工業(yè)攝像頭

    opencv調(diào)用??低暪I(yè)攝像頭需要用到官方接口VideoCapture() 接口:cv2.VideoCapture() 作用:獲取本地目錄下的視頻文件或者使用本電腦的攝像頭獲取實(shí)時(shí)數(shù)據(jù); ?“0” ,調(diào)用的是本地電腦攝像頭?“1” ,調(diào)用的是外接攝像頭 打開MVS? 正常設(shè)置使畫面正常? 然后找到寬度和長度

    2024年02月13日
    瀏覽(30)
  • C# 搜索??低暰W(wǎng)絡(luò)攝像頭

    源代碼 https://download.csdn.net/download/syukugai/88299251

    2024年02月10日
    瀏覽(25)
  • ??低暠O(jiān)控?cái)z像頭連接電腦教程

    海康威視監(jiān)控?cái)z像頭連接電腦教程

    官網(wǎng)下載SADP軟件:https://www.wolai.com/wM6rWeBrRtrfmMH2BTVUXZ 雙擊下載的軟件進(jìn)行安裝 打開軟件,將設(shè)備連接到攝像頭,便可在軟件中搜索到攝像頭 選擇攝像頭,輸入管理員密碼,即可完成對(duì)攝像頭的控制 設(shè)置攝像機(jī)IP地址與網(wǎng)口地址處于同一網(wǎng)段 設(shè)置網(wǎng)絡(luò)攝像機(jī)IP地址時(shí),保持設(shè)

    2024年02月04日
    瀏覽(29)
  • ??低暰W(wǎng)絡(luò)攝像頭網(wǎng)線直連電腦

    ??低暰W(wǎng)絡(luò)攝像頭網(wǎng)線直連電腦

    1、網(wǎng)絡(luò)相機(jī)型號(hào):DS-2CD3T86FWDV2 2.攝像頭上電,攝像頭、電腦連接同一個(gè)網(wǎng)線 客戶端軟件 - 桌面應(yīng)用軟件 - ??低?Hikvision 下載客戶端軟件 ?安裝完成,創(chuàng)建用戶,密碼 設(shè)備管理--設(shè)備? 刷新 ,就會(huì)看到設(shè)備,默認(rèn)的ip地址的192.168.1.64 到控制面板,”以太網(wǎng)“ 就是我們跟攝

    2024年02月11日
    瀏覽(29)
  • ??低晹z像頭播放錄像視頻(RTSP協(xié)議)

    舊URL:rtsp://[username]:[password]@[ipaddress]/[videotype]/ch[number]/[streamtype] 如:rtsp://admin:12345@192.168.25.64:554/h264/ch1/main/av_stream 新URL:rtsp://[username]:[password]@[IP]:554/Streaming/Channels/[channelID][streamID] 如:rtsp://admin:12345@192.168.25.64:554/Streaming/Channels/101 錄像機(jī)其實(shí)和攝像機(jī)基本一樣,舊URL中攝像

    2024年02月12日
    瀏覽(22)
  • vue+js+海康web開發(fā)包接入??低晹z像頭

    vue+js+??祑eb開發(fā)包接入??低晹z像頭

    一、登錄??甸_放平臺(tái)下載web開發(fā)包,下載需要先登錄??蒂~號(hào),沒有的需先注冊(cè)一個(gè)。 ??甸_放平臺(tái)web開發(fā)包下載地址:https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type=10id=4c945d18fa5f49638ce517ec32e24e24 二、將web開發(fā)包引入vue項(xiàng)目 下載后解壓的包目錄如下: 將把webs下的整個(gè)

    2024年02月02日
    瀏覽(21)
  • ??低晹z像頭的多通道rtsp地址格式

    ??低晹z像頭的多通道rtsp地址格式

    ??禂z像頭的rtsp地址通常格式為: “rtsp://username:password@192.168.1.64:554//Streaming/Channels/1” ### 1 代表主流,2代表子流 但在多通道的攝像機(jī),例如紅外攝像機(jī),既有rgb圖也有紅外圖,分別在兩個(gè)通道里,需要獨(dú)立打開時(shí),就需要指定通道號(hào)。 那么可以這樣來給rtsp最后的數(shù)字串:

    2024年02月13日
    瀏覽(38)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包