海康威视rtsp取流地址(海康威视设置教程) |
您所在的位置:网站首页 › 海康威视最新动态图片下载 › 海康威视rtsp取流地址(海康威视设置教程) |
大家好,又见面了,我是你们的朋友全栈君。 RTSP视频流显示(海康威视)VLC网页显示VLC-Qt库SDK(C++)本文使用环境如下:SDK下载。编写应用ffmpeg+Nginx直接使用ffmpeg解码视频AppEmitWebComponentsKit插件本文目的主要是想要实时显示海康威视的摄像头数据,笔者尝试了如下几种方式(部分未做完): VLCSDK(C++)ffmpeg+Nginxffmpeg直接解码RTSPAppEmitWebComponentsKit插件VLC如果使用插件需要注意谷歌浏览器版本,本文是在官网下载的软件,下载下来安装并运行: ![]() 填的地址就是摄像头RTSP视频流地址,然后点串流: ![]() ![]() ![]() ![]() ![]() ![]() 左上角是这样的说明就已经在转换了: ![]() 注意资源地址,同一局域网下的要访问就需要把localhost改为转换软件运行电脑的ip地址: Video 不支持![]() 这种方式转换多路的时候,时间越久延迟会越大,实际运用操作起来比较麻烦。 VLC-Qt库在知道视频地址的情况下可以使用插件库来解码视频,到官网下载需要的库文件: ![]() 下载完成后解压出来有如下3个文件夹: ![]() ![]() 在.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_HmainWindow.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下载。一定要注意版本。 ![]() ![]() 改名为: ![]() 添加头文件并包含: #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+Nginxffmpeg安装比较简单,下载下来把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: ![]() 在测试中发现有时候显示会有一半模糊具体原因还不太清除: ![]() 传送门 下载解压后,尝试运行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的配置文件中如下两部分必须: ![]() 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126506.html原文链接:https://javaforall.cn |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |