ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

WVP+ZLMediaKit+MediaServerUI实现摄像头GB28181推流播放录制

2021-09-19 11:03:56  阅读:727  来源: 互联网

标签:MediaServerUI SIP ZLMediaKit 项目 WVP https http com


本文主要介绍使用 WVP+ZLMediaKit+MediaServerUI 实现通过 GB28181 进行海康、大华、宇视等品牌的 IPC、NVR 、DVR 接入,完成摄像头监控播放,控制,录制

准备工作

  1. 服务运行环境,Linux / OS X / Windows 均可,但推荐 ubuntu 20.4
  2. 海康摄像头一个
  3. 运行sip服务的wvp项目:https://github.com/swwheihei/wvp-GB28181
  4. 运行流媒体服务 ZLMediaKit : https://gitee.com/beautiful_corridors/ZLMediaKit
  5. 运行前端展示项目 MediaServerUI:https://gitee.com/kkkkk5G/MediaServerUI/tree/gb28181/

begin wvp

  1. 安装Redis,并启动
sudo apt update
sudo apt install redis-server
sudo systemctl start redis-server
  1. wvp是springboot项目,所以要安装java环境,安装java的话,直接在终端输入java,复制第二个提示,命令安装就好
    在这里插入图片描述
    然后安装maven ,
sudo apt update
sudo apt install maven 
sudo gedit  /usr/share/maven/conf/settings.xml

然后添加

<mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
</mirror>

然后进入wvp-GB28181目录下,wvp可以直接git下载

git clone https://gitee.com/zdkd/wvp-GB28181.git

下载后修改配置文件

spring:
    application:
        name: iot-vmp-vmanager
        # 影子数据存储方式,支持redis、jdbc
        database: redis
        # 通信方式,支持kafka、http
        communicate: http
    redis: 
        # Redis服务器IP
        host: 127.0.0.1
        #端口号
        port: 6379
        datebase: 0
        #访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
        password: 123123
        #超时时间
        timeout: 10000
    datasource: 
        name: eiot
        url: jdbc:mysql://host.docker.internal:3306/eiot?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true
        username: root
        password: 123456
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
sip:
        # SIP 所在服务IP,就是本机IP
    ip: 192.168.1.102
    port: 5060
    # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)
    # 后两位为行业编码,定义参照附录D.3
    # 3701020049标识山东济南历下区 信息行业接入
    domain: 3701020049
    id: 37010200492000000002
    # 默认设备认证密码,后续扩展使用设备单独密码
    password: 123456
media:
        # 流媒体服务的IP,内网测试可填内网IP,公网填公网服务器IP并放开端口
    ip: 177.11.11.111
    port: 10000

然后

mvn install
java -jar ./target/wvp-1.5.10.RELEASE.jar

然后配置摄像头

在这里插入图片描述

平台接入选择 28181;传输协议可自选,公网建议选择TCP;协议版本选择 GB/T28181-2016(目前WVP只支持这个协议,2011后面会适配)

SIP服务器ID 和 SIP服务器域,密码 要和 WVP 项目中配置的一致。

SIP服务器地址 填写 WVP 项目的地址,内网填写内网IP地址,云服务器填写公网IP,端口写配置文件中配置的端口。

因为摄像头平台接入配置好后,摄像头会请求 SIP 服务,所以这个一定要配置好。

配置完成后就可以运行项目了!如果 SIP 服务启动成功后,会看到这个日志 “Sip Server 启动成功”:

在这里插入图片描述
如果摄像头连接到 SIP 服务,项目会有这样的日志,显示 200 OK(公网服务器记得放开sip端口):
在这里插入图片描述
建立好连接后,就可以控制查询摄像头了。

GET /api/devices 查询所有设备的信息

POST /api/ptz/{deviceId}/{channelId} 云台控制指定设备通道:http://127.0.0.1:8080/api/ptz/34020000001320000001/34020000001320000001?leftRight=1&upDown=0&inOut=0&moveSpeed=50&zoomSpeed=1
zoomSpeed 的数字不能太大,不然运行不了,无效。

WVP 项目所有接口:https://github.com/swwheihei/wvp-GB28181/wiki/API-%E6%8E%A5%E5%8F%A3

运行流媒体服务 ZLMediaKit

获取代码

#国内用户推荐从同步镜像网站gitee下载 
git clone --depth 1 https://gitee.com/xiahcu/ZLMediaKit
cd ZLMediaKit
#千万不要忘记执行这句命令
git submodule update --init

项目构建

项目开发者贴心的提供了三个shell脚本在项目根目录:

build_docker_images.sh 构建为docker镜像
build_for_linux.sh linux下构建项目
build_for_mac.sh mac下构建项目
打开以后可以看到是使用CMake来编译的,我们可以直接选择运行shell脚本,Windows的话就看文档跟着一步步来吧。

构建好后打开 release/xx/Debug 目录,可以看到有 config.ini 是项目的配置文件:https://github.com/xiongziliang/ZLMediaKit/blob/master/conf/config.ini
/*
注意,如果执行脚本没有出来config.ini,你可以根据脚本内容自己手动执行以下脚本
*/

其中需要特别注意的有两个地方:一是 [http] 的 port,因为 ZLMediaKit 项目也有很多 API 接口,都需要通过这个接口来访问,包括生成的播放的URL,都是这个端口,如遇到端口被你的其它服务占用,可自行配置。

二是 [rtp_proxy] 的 port,是我们上面 SIP 项目配置的 media.port

配置好了就可以运行项目了。

运行项目

cd ZLMediaKit/release/linux/Debug
#通过-h可以了解启动参数
./MediaServer -h
#以守护进程模式启动
./MediaServer -d &

使用守护进程模式启动后,可以通过 ps -axj 来查看进程

运行成功后会打印出如下日志:
在这里插入图片描述
我们可以做下推流测试,非必须操作,不需要可直接跳到下一节“项目推流”,具体操作可以查看文档:https://github.com/xiongziliang/ZLMediaKit/wiki/ZLMediaKit%E6%8E%A8%E6%B5%81%E6%B5%8B%E8%AF%95

下载一个视频文件 big_buck_bunny.mp4 放在当前目录上,使用rtp方式推流试试,在文件所在目录输入命令(没安装ffmpeg的话需要先安装下):

ffmpeg -re -i “big_buck_bunny.mp4” -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000

运行后,查看 ZLMediaKit 项目会有类似这样的日志:
在这里插入图片描述
使用可以播放流的播放器(如:PotPlayer,IINA)打开 http://服务器IP/rtp/xxxxx.flv 就能播放了。

如 http://服务器IP/rtp/061484E1.flv

项目推流

SIP 服务和流媒体服务以及就绪了,我们就可以推流了。

拿到 /api/devices 查到的 deviceId 和 channelId,然后调用 SIP 服务的播放接口

GET /api/play/37010200492000000001/34020000001320000001 预览指定设备通道的音视频

成功调用后会返回ssrc:

{"ssrc":"0102008033"}

ssrc 转换为16进制后为 061484E1

我们查看流媒体服务的日志,就能看到如下:
在这里插入图片描述
注:公网服务器如果没有收到推流日志,记得开放端口并检查 wvp 项目的 media 配置是否正确。

那我们怎么拿到播放地址呢?其实文档已经有了:https://github.com/xiongziliang/ZLMediaKit/wiki/%E6%92%AD%E6%94%BEurl%E8%A7%84%E5%88%99

如果我的公网IP是177.11.11.111,转换过来就是:

rtsp://177.11.11.111:554/rtp/061484E1?token=abcdefg&field=value

rtmp://177.11.11.111/rtp/061484E1

http://177.11.11.111/rtp/061484E1.flv

http://177.11.11.111/rtp/061484E1/hls.m3u8

此外 ZLMediaKit 还提供了录制,截图,动态添加拉流代理等功能,很棒,大家感兴趣可以看API文档。

运行MediaServerUI

拉下项目代码:https://gitee.com/kkkkk5G/MediaServerUI/tree/gb28181/

项目启动后,SIP 服务调用 play 接口,流媒体服务受到消息,在项目的“视频广场”中就能看到我们的视频了。

这个项目需要注意的也是配置,本项目是和流媒体服务关联的,调用的接口也是流媒体 ZLMediaKit 的 API。

打开项目根目录下的 global.js:

const serverip="172.16.63.208"
const host = 'http://' + serverip + '/index/api';
const secret = '035c73f7-bb6b-4889-a715-d9eb2d1925cc';
const baseMediaUrl='ws://' + serverip + '/';
function genApiUrl(method){
    return host+method+"?secret="+secret;
}
export default{
    serverip,
    host,
    secret,
    genApiUrl,
    baseMediaUrl
}

serverip是流媒体服务的IP,如果 ZLMediaKit 的配置文件中 [http] 配置项的端口改成了其它的,也记得在这里加上端口号(不同服务器请配置放开端口哦)。

secret 需要和流媒体服务配置的一样。

baseMediaUrl 是你拉流的url,你可以改成其它的,如 rtsp,rtmp,http。

最后放一张视频流程图

在这里插入图片描述
感谢:https://notemi.cn/wvp—zlmedia-kit—mediaserverui-to-realize-streaming-playback-and-recording-of-camera-gb28181.html

标签:MediaServerUI,SIP,ZLMediaKit,项目,WVP,https,http,com
来源: https://blog.csdn.net/dagjj/article/details/120377118

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有