海康威视rtsp取流地址(海康威视设置教程)

您所在的位置:网站首页 海康威视最新动态图片下载 海康威视rtsp取流地址(海康威视设置教程)

海康威视rtsp取流地址(海康威视设置教程)

2024-01-15 08:24| 来源: 网络整理| 查看: 265

大家好,又见面了,我是你们的朋友全栈君。

RTSP视频流显示(海康威视)VLC网页显示VLC-Qt库SDK(C++)本文使用环境如下:SDK下载。编写应用ffmpeg+Nginx直接使用ffmpeg解码视频AppEmitWebComponentsKit插件

本文目的主要是想要实时显示海康威视的摄像头数据,笔者尝试了如下几种方式(部分未做完):

VLCSDK(C++)ffmpeg+Nginxffmpeg直接解码RTSPAppEmitWebComponentsKit插件VLC

如果使用插件需要注意谷歌浏览器版本,本文是在官网下载的软件,下载下来安装并运行:

在这里插入图片描述在这里插入图片描述

填的地址就是摄像头RTSP视频流地址,然后点串流:

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

左上角是这样的说明就已经在转换了:

在这里插入图片描述在这里插入图片描述网页显示

注意资源地址,同一局域网下的要访问就需要把localhost改为转换软件运行电脑的ip地址:

Video 不支持 在这里插入图片描述在这里插入图片描述

这种方式转换多路的时候,时间越久延迟会越大,实际运用操作起来比较麻烦。

VLC-Qt库

在知道视频地址的情况下可以使用插件库来解码视频,到官网下载需要的库文件:

在这里插入图片描述在这里插入图片描述

下载完成后解压出来有如下3个文件夹:

在这里插入图片描述在这里插入图片描述include:包含了所需的头文件lib:包含所需的 lib 文件bin:包含了所需的 dll 文件(动态库及插件) 新建Qt工程: 在这里插入图片描述在这里插入图片描述

在.pro文件中添加库所在路径

在这里插入图片描述在这里插入图片描述

布局文件如下:

在这里插入图片描述在这里插入图片描述

mainWindow.h文件如下:

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class VlcInstance; class VlcMedia; class VlcMediaPlayer; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void openLocal(); void openUrl(); private: Ui::MainWindow *ui; VlcInstance *_instance; VlcMedia *_media; VlcMediaPlayer *_player; }; #endif // MAINWINDOW_H

mainWindow.c文件如下:

#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); _instance = new VlcInstance(VlcCommon::args(), this); _player = new VlcMediaPlayer(_instance); _player->setVideoWidget(ui->video); ui->video->setMediaPlayer(_player); ui->volume->setMediaPlayer(_player); ui->volume->setVolume(50); ui->seek->setMediaPlayer(_player); connect(ui->openLocal, &QPushButton::clicked, this, &MainWindow::openLocal); connect(ui->openUrl, &QPushButton::clicked, this, &MainWindow::openUrl); connect(ui->stop, &QPushButton::clicked, _player, &VlcMediaPlayer::stop); } void MainWindow::openLocal() { QString file = QFileDialog::getOpenFileName(this, tr("Open file"), QDir::homePath(), tr("Multimedia files(*)")); if (file.isEmpty()) return; _media = new VlcMedia(file, true, _instance); _player->open(_media); } void MainWindow::openUrl() { QString url = QInputDialog::getText(this, tr("Open Url"), tr("Enter the URL you want to play")); if (url.isEmpty()) return; _media = new VlcMedia(url, _instance); _player->open(_media); } MainWindow::~MainWindow() { delete _player; delete _media; delete _instance; delete ui; }

使用发布版编译应用,程序会运行失败:

在这里插入图片描述在这里插入图片描述

把下载的bin文件夹下所有文件复制到exe所在路径后再次编译运行即可:

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

这种方式不适合web端

SDK(C++)本文使用环境如下:操作系统:win10 64位Qt版本: 5.13.0编译器版本:mingw73_64SDK下载。

一定要注意版本。

在这里插入图片描述在这里插入图片描述编写应用下载SDK下来解压,复制如下需要的文件到工程: 在这里插入图片描述在这里插入图片描述

改名为:

在这里插入图片描述在这里插入图片描述然后在.pro中添加库路径,:LIBS+=$$PWD/libs/HCCore.lib LIBS+=$$PWD/libs/HCNetSDK.lib LIBS+=$$PWD/libs/GdiPlus.lib LIBS+=$$PWD/libs/PlayCtrl.lib LIBS+=$$PWD/libs/HCNetSDKCom/HCAlarm.lib LIBS+=$$PWD/libs/HCNetSDKCom/HCGeneralCfgMgr.lib LIBS+=$$PWD/libs/HCNetSDKCom/HCPreview.lib

添加头文件并包含:

#include #include 在这里插入图片描述在这里插入图片描述

3. 再把库文件夹中所有dll文件放到编译后exe所在路径(有些用不上,但是全部找出来添加不会有问题):

在这里插入图片描述在这里插入图片描述

4. 然后开始调用函数初始化:

// 初始化 bool isok = NET_DVR_Init(); if(isok == false) { qDebug() winId(); //设置获取窗口句柄 需要 SDK 解码时句柄设为有效值,仅取流不解码时可设为空 struPlayInfo.lChannel = 1; //预览通道号 struPlayInfo.dwStreamType = 0; //0-主码流,1-子码流,2-码流 3,3-码流 4,以此类推 struPlayInfo.dwLinkMode = 0; //0- TCP 方式,1- UDP 方式,2- 多播方式,3- RTP 方式,4-RTP/RTSP,5-RSTP/HTTP struPlayInfo.bBlocked = 1; //0- 非阻塞取流,1- 阻塞取流 struPlayInfo.dwDisplayBufNum = 15; //播放库播放缓冲区最大缓冲帧数 faceRecognitionRealPlayHandle = NET_DVR_RealPlay_V40(faceRecognitionUserID, &struPlayInfo, NULL, NULL); if(faceRecognitionRealPlayHandle connectFaceRecognition->setText("断开"); } }else{ //关闭预览 NET_DVR_StopRealPlay(faceRecognitionRealPlayHandle); //注销用户 NET_DVR_Logout(faceRecognitionUserID); ui->connectFaceRecognition->setText("连接"); }在这里插入图片描述在这里插入图片描述

这种方式不适合web端

ffmpeg+Nginx

ffmpeg安装比较简单,下载下来把bin目录配置到环境变量,就OK了。

在这里插入图片描述在这里插入图片描述

先运行nginx.exe(需要是已经集成rtmp模块的):

在这里插入图片描述在这里插入图片描述

再打开cmd输入如下并回车:

ffmpeg -i "rtsp://admin:[email protected]:554/h265/ch1/main/av_stream" -f flv -r 25 -s 640x360 -an rtmp://localhost:1935/live/room

看到这样的状态就可以访问rtmp://localhost:1935/live/room显示图像,不过需要浏览器支持rtmp:

在这里插入图片描述在这里插入图片描述

这种方式丢帧明显,图像模糊。

直接使用ffmpeg解码视频

这里对这个demo作者表示感谢,写得确实已经很精简了,也就不说了,作者提到的关闭Shadow build:

在这里插入图片描述在这里插入图片描述

在测试中发现有时候显示会有一半模糊具体原因还不太清除:

在这里插入图片描述在这里插入图片描述AppEmit

传送门 下载解压后,尝试运行demo获取rtsp视频流:

在这里插入图片描述在这里插入图片描述

依次点击1、3即可看到画面,2位置的输入框需要按规则输入包含rtsp视频流地址信息的json格式描述,页面中列举了简单的测试案例:

在这里插入图片描述在这里插入图片描述

主要代码提取出来:

rtsp demo .Appboxs { margin-top:10px; display: -webkit-box; display: -moz-box; display: -ms-flexbox; display: -webkit-flex;display: flex; display: box; display: flexbox; justify-content:space-around; } 初始化websocket(第一步) libvlc: 开始(第二步) //init_App(); //载入页面运行 var init_App=function(){ AE.InitApp(document.getElementById('input_url').value); } var input_App= function(Jdata){ //回调的数据Jdata var ReqPar0={ }; ReqPar0=JSON.parse(document.getElementById("input_par").value); // AE.OpenApp(ReqPar); //执行文本框里的内容 AE.OpenApp(ReqPar0); } WebComponentsKit插件

测试文件下载地址,在nginx-1.10.2\www\hik\codebase下有WebComponentsKit插件,需要先安装。

在这里插入图片描述在这里插入图片描述

nginx的配置文件中如下两部分必须:

在这里插入图片描述在这里插入图片描述#websocket相关配置 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-real-ip $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; location ~ /ISAPI|SDK/ { if ($http_cookie ~ "webVideoCtrlProxy=(.+)") { proxy_pass http://$cookie_webVideoCtrlProxy; break; } } location ^~ /webSocketVideoCtrlProxy { #web socket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; if ($http_cookie ~ "webVideoCtrlProxyWs=(.+)") { proxy_pass http://$cookie_webVideoCtrlProxyWs/$cookie_webVideoCtrlProxyWsChannel?$args; break; } if ($http_cookie ~ "webVideoCtrlProxyWss=(.+)") { proxy_pass http://$cookie_webVideoCtrlProxyWss/$cookie_webVideoCtrlProxyWsChannel?$args; break; } }

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126506.html原文链接:https://javaforall.cn



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3