开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放

场景

目前市面上有很多开源的流媒体服务器解决方案,常见的有SRS、EasyDarwin、ZLMediaKit和Monibuca等。

1、SRS

GitHub - ossrs/srs: SRS is a simple, high efficiency and realtime video server, supports RTMP, WebRTC, HLS, HTTP-FLV, SRT, MPEG-DASH and GB28181.

2、EasyDarwin

https://github.com/EasyDarwin/EasyDarwin

3、Monibuca

Monibuca · GitHub

4、ZLMediaKit

GitHub - ZLMediaKit/ZLMediaKit: WebRTC/RTSP/RTMP/HTTP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/GB28181/SRT server and client framework based on C++11

ZLMediaKit: 实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求

ZLMediaKit是一套高性能的流媒体服务框架,目前支持rtmp、rtsp、hls、http-flv等流媒体协议,

支持linux、macos、windows三大PC平台和ios、android两大移动端平台。

ZLMediaKit功能概览

 

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主

实现

1、ZlMediaKit各文档说明地址

Home · ZLMediaKit/ZLMediaKit Wiki · GitHub

其功能较多,这里我们需要的是在Windows上运行,以及修改配置文件配置一些端口地址等配置,并实现按需拉流。

比如前端选择某摄像头之后,才进行拉取该摄像头的rtsp视频流,并转换成能网页能播放的Http-flv格式的视频流。

所以需要的文档只有如下:

配置文件详解:

ZLMediaKit/config.ini at master · ZLMediaKit/ZLMediaKit · GitHub

按需拉流:

ZLMediaKit实现按需拉流 · ZLMediaKit/ZLMediaKit Wiki · GitHub

RESTful接口:

MediaServer支持的HTTP API · ZLMediaKit/ZLMediaKit Wiki · GitHub

播放URL规则:

播放url规则 · ZLMediaKit/ZLMediaKit Wiki · GitHub

 

实现按需拉流流程

文档地址:

ZLMediaKit实现按需拉流 · ZLMediaKit/ZLMediaKit Wiki · GitHub

 

2、Windows上运行ZLMediaKit

Windows上无直接可用版本,一种是可以根据文档说明自己进行编译。

快速开始 · ZLMediaKit/ZLMediaKit Wiki · GitHub

一种是直接从网络上下载别人编译好的版本。

这里选择直接下载别人编译之后的版本使用,比如下面:

Windows上ZLMediakit编译后可直接运行版本(带外置配置文件和运行可能所需dll依赖):

https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/87685103

下载解压之后,MediaServer.exe是服务主程序,config.ini是配置文件。

 

编辑config.ini配置文件,根据自己需要进行修改,具体参照官方配置说明

这里是将Http的端口由原来的80改为800了

 

修改完配置文件之后,管理员模式启动MediaServer.exe即可。

启动成功之后的页面

 

其他功能所需配置根据自己需要决定开启或关闭,以及默认这些开启配置的端口注意不要冲突,

比如554、332、1935、19350、800、1443、9000、10002等配置文件中配置的端口。

ZLMediaKit启动时提示:由于找不到libcrypto-1_1x64.dll,无法继续执行代码。

 

以及提示:由于找不到libssl-1_1-x64.dll,无法继续执行代码。

 

则系统需要该两个依赖,从网络下载这两个dll,或者从上面资源中

将这两个dll,放到C:\Windows\System32目录下

 

添加如上两个dll之后,如果ZLMediaKit仍然启动时报错,则是缺少其他必须的依赖dll,另外两个dll也从上面复制到

System32目录下,或者从网络上自行下载之后复制过去。

faac:

Freeware Advanced Audio Codec download | SourceForge.net

SDL2:

Simple DirectMedia Layer - Homepage

3、实现按需拉流

这里以拉取rtsp视频流为例。

比如拉取宇视的rtsp的视频流。

rtsp://[username]:[password]@[ip]:[port]/media/video1/2/3

说明:

username: 用户名。例如admin。
password: 密码。例如admin123。
ip: 为设备IP。例如 192.168.1.107。
port: 端口号默认为554,若为默认可不填写。
video: 1代表主码流、2辅码流、3第三码流

如:rtsp://admin:admin123@192.168.1.107/media/video2

使用vlc拉取rtsp视频流确保能进行拉流和预览

 

按照文档说明如果需要实现按需拉流,需要在要拉流预览时调用api,所有api都可用get或post进行请求

/index/api/addStreamProxy

参数说明

 

参考给出的示例url

http://127.0.0.1/index/api/addStreamProxy?vhost=__defaultVhost__&app=proxy&stream=0&url=rtmp://live.hkstv.hk.lxdns.com/live/hks2

修改为

http://127.0.0.1:800/index/api/addStreamProxy?vhost=127.0.0.1&app=live&stream=test&url=rtsp://admin:123456@摄像头Ip/media/video2

这里都是在本地,并且配置的http的端口为800,然后指定虚拟主机地址也为本地,如果在服务器上,则配置为服务器的地址,然后设置流的应用名和流的唯一标识id

将以上地址在浏览器中访问或者用postman等测试工具中请求,请求成功时

 

状态码返回0,返回流应用名live,以及流的唯一标识id为test。

那么这些关键字可以根据文档URL的规则说明中进行拼接其他视频流格式。

比如拼接http-flv的格式为

http://127.0.0.1:800/live/test.flv

那么这个地址就可以直接在vlc或者网页中进行播放。

我们统一在vlc中进行播放http-flv以及原生rtsp的视频流进行对比延迟

 

如果rtsp的流地址播放失败则返回-1

 

4、播放URl规则

注意上面播放URL规则中

老代码flv直播后缀为.flv,新代码才改成了.live.flv,这里是老版本的编译版本。

 

这里的live就是对应上面api调用时的流应用名,0就是对应的流id。

所以这里对应的url为

http://127.0.0.1:800/live/test.flv

在html以及Vue中播放http-flv格式的视频可参考如下:

Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流:

Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流_rtmp转flv_霸道流氓气质的博客-CSDN博客

5、不是部署在本机

上面调用api进行按需拉流时地址是127.0.0.1,如果ZLMediaKit在服务器上,如果直接修改ip为服务器ip则会提示

缺少必要参数secret

 

根据接口说明

 

如果操作Ip不是本机,则需要添加这个参数,参数获取在服务器上配置文件中获取

 

6、按需拉取多个rtsp流

如果说需要拉取多个视频流,则只需要调用接口时传递流id不同即可,流应用没必要改变。

http://127.0.0.1:800/index/api/addStreamProxy?vhost=127.0.0.1&app=live&stream=test2&url=rtsp://admin:123456@第二个摄像头Ip/media/video2

比如传递test2

 

则第二个摄像头的预览地址对应为

http://127.0.0.1:800/live/test2.flv

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/10625.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT批量翻译-ChatGPT批量生成多国语言

ChatGPT翻译的准吗 ChatGPT是一种基于Transformer架构的自然语言处理技术,其翻译准确性取决于所训练的模型和数据集的质量。在特定的语料库和训练数据下,ChatGPT可以实现一定程度的准确翻译。但是,与人工翻译相比,ChatGPT的翻译质…

LeetCode_101

千奇百怪的排序算法 快速排序 采用左闭右开的二分写法 归并排序 插入排序 冒泡排序 选择排序 以上代码的调用方式: 快速选择 在一个未排序的数组中,找到第 k 大的数字 快速选择一般用于求解 k-th Element 问题,可以在 O(n) 时间复杂度&…

Unix、UTC、GPS时间戳及转换

UTC时间 UTC时间的英文全称:Universal Time Coordinated,中文名称:协调世界时。俗的理解为,这个时间是全世界通用的,即全世界都公用的一个时间。可以认为格林威治时间就是时间协调时间(GMTUTC)&…

测试名词介绍

测试名词介绍一:敏捷测试1. 定义:2. 敏捷测试的核心:3. 敏捷测试的8大原则和传统测试的区别二:测试名词介绍瀑布模型回归测试Alpha测试Beta测试性能测试白盒测试黑盒测试灰盒测试三:测试流程单元测试 (unit test)集成测…

ChatGPT想干掉开发人员,做梦去吧

很多人都发现ChatGPT可以做一些代码相关的工作,不仅可以写一些基础的类似python、java、js的代码段,还可以做一定量的调优,于是就开始担忧起来,到哪天我的开发工作会不会被ChatGPT这个工具给取代了? 目录 1. ChatGPT…

前 K 个高频元素(力扣刷题代码随想录刷题)

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 思路: 要统计元素出现频率对频率排序找出前K个高频元素首先统计元素出现的频率,这一类的问题可以使用map来进行统计。 然后是对频率…

【血泪建议】软件测试岗位现状,可惜之前没人告诉我,肠子都晦青了....

谈到现状,国内的软件测试行情目前呈现了两极分化的极端情况。 一个是早期的手工测试人员吐槽工作不好做,即使有工作也是外包,而且薪资太低;一方面是很多互联网企业感叹自动化测试人才难找,有技术的自动化测试工程师&a…

批量自动翻译软件-准确的翻译软件

现代社会,在全球化背景下,语言障碍是碍企业发展的主要因素之一。而翻译软件的出现,为人们跨越语言障碍带来了新的解决方案。针对翻译需要大量文字内容的情况,有一些能翻译大量文字的翻译软件: 147CGPT翻译软件特点&…

面试篇-揭开Spring Bean加载的神秘面纱

SpringBean加载完整过程 启动spring容器(创建beanfactory)->加载配置(注解、xml)->实例化bean(执行构造方法)->注入依赖->初始化bean(设置属性值)->使用->销毁 解析和读取 XML 配置文件或注解配置类&#xff0…

【C++基础】引用(引用的概念;引用的特性;常引用;使用场景:做输出型参数、大对象传参、做输出型返回值、返回大对象的引用);引用和指针的区别)

六、引用 6.1 引用的概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。(语法上) 格式:类型& 引用变量名(对象名) …

用vscode运行Java程序初体验

最近开始学习Java编程了,以前学习过C、C 、Python,主要用微软的visual studio code来运行python程序,于是就尝试了用vscode来运行java代码,记录一下使用的经验,帮助大家少走弯路。 安装了Java的集成编辑器IDE "Ec…

Docker环境安装

Docker环境安装Docker简介Docker工作原理Docker的应用场景Docker 的优点CentOS Docker 安装与配置Docker 安装Docker 配置Docker容器概念Docker容器操作拉取镜像删除镜像容器相关命令创建并启动容器停止和恢复容器删除容器Docker简介 Docker 是一个开源的应用容器引擎&#xf…

不卷不成魔,新时代的IT人员更需要卷,不卷不成活

简介 从2022年开始至今,IT界发生了很多巨大的变革带来了许多巨大的变化。 这些变革、这些变化导致了有人欢喜有人悲、有人迷茫有人焦虑。1年半来,迷茫、焦虑、精神内耗了也都差不多了,大家都已经认识到了现实,作为凡人的我们所能…

【防止恶意用户注册】-- 手机在网状态 API 的防欺诈应用解析

简介 手机在网状态 API 支持传入手机号码,查询手机号在网状态,返回在网、在网不可用、不在网(销号/未启用/停机)等多种状态,查询手机号在网状态之后,可以根据具体的业务需求来进行不同的处理。 本文主要介…

由libunifex来看Executor的任务构建

前言 之前的一篇文章讲述了future的优缺点,以及future的组合性,其中也讲述了构建任务DAG一些问题,同时给出了比较好的方案则是Executor。 Executor还未进入标准(C23),Executor拥有惰性构建及良好的抽象模型…

c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键

c/c:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c的话, 我所知…

20230412-使用STM32实现内部flash模拟U盘

最近用STM32F103CBT6搞了个U盘功能 ​ 工程师干了几年后,基本会有小外包的生活,算是赚外快吧,搞小钱改善伙食,嘻嘻。。。。 ​ 最近有个客户找到我,说是否通过ST的单片机搞个U盘功能,有些文件通过U盘拖拽…

005:Mapbox GL添加全屏显示功能

第005个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中添加全屏显示功能 。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共60行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https://…

1~3年的测试工程师薪资陷入了瓶颈期,如何突破自己实现涨薪?

对于技术人员而言,职业规划一般分为两个方向:做技术、做管理。进入软件测试行业的新人都会从最基础的执行开始,然后是基本的功能测试。 随后大家会根据个人职业发展来进一步细化,有的走管理路线,成为主管、经理、项目…

Python 小型项目大全 76~81

七十六、井字棋 原文:http://inventwithpython.com/bigbookpython/project76.html 井字棋是一种在3 3网格上玩的经典纸笔游戏。玩家轮流放置 X 或 O 标记,试图连续获得三个。大多数井字棋都以平局告终,但如果你的对手不小心,你也…