zoukankan      html  css  js  c++  java
  • 如何将监控画面嵌入微信公众号进行直播

    引言

    全民直播时代已经到来。现在的直播必然需要支持手机直播,如果能够嵌入到全面宠儿微信中,那就能深度民心了。从技术上而言,微信直播,自然需要使用H5页面。目前手机浏览器不支持RTSP、RTMP,想要在手机微信上直播那就需要HLS视频流。
    如果能够将小区、工程、学校、园区、街道等等某个区域内的所有监控摄像头实现网络直播,支持PC、手机同时随时随地观看,就实现了将传统监控行业转成网络直播。这里引入LiveQing团队开发的LiveNVR。LiveNVR是一套夸平台的软件运行在现场环境内的任意一台PC上,参考《将RTSP网络摄像机进行网页和微信直播的方案》。
    ##直播页面自定义开发##
    LiveNVR默认的直播、配置页面基本可以满足大部分客户的基本需求。对于部分用户可能需要更改页面展示,增加其他业务功能等需要,可以基于LiveNVR接口文档提供的RESTful接口进行自定义开发。LiveNVR默认的展示页面也是基于这些接口做的开发,当然也可以作为Demo供开发人员开发自定义页面时参考。

    接口列表

    1. 登录LiveNVR

    • 接口: /api/v1/login?username=xxx&password=xxx
    • 参数
    名称 解释 含义
    Username 登陆用户名 -
    Password 登陆密码 经过MD5加密的字符
    • 返回: 200 OK or 401 Unauthorized

        {
           "LiveQing" : {
              "Body" : {
                 "Token" : "a19cb5f6e7d2449d8d24c8a0fc554ca7"
              },
              "Header" : {
                 "CSeq" : "1",
                 "ErrorNum" : "200",
                 "ErrorString" : "Success OK",
                 "MessageType" : "MSG_SC_SERVER_LOGIN_ACK",
                 "Version" : "1.0"
              }
           }
        }
      
    • 操作: 登录,登陆后会返回token,以后调用接口需要在cookie中携带token信息“token=a19cb5f6e7d2449d8d24c8a0fc554ca7”

    2. 注销登陆

    • 接口: /api/v1/logout

    • 返回: 200 OK 401 Unauthorized

        {
           "LiveQing" : {
              "Header" : {
                 "CSeq" : "1",
                 "ErrorNum" : "200",
                 "ErrorString" : "Success OK",
                 "MessageType" : "MSG_SC_SERVER_LOGOUT_ACK",
                 "Version" : "1.0"
              }
           }
        }
      
    • 操作: 再次请求接口需要重新登陆

    3. 修改密码

    • 接口: /api/v1/modifypassword?oldpassword=xxx&newpassword=xxx

    • 参数

    名称 含义 备注
    Oldpassword 旧密码 经过MD5加密的字符
    Newpassword 新密码 经过MD5加密的字符
    • 返回: 200 OK or 401

        {
           "LiveQing" : {
              "Body" : {
                 "Token" : "8b65982a99664d19bcccc35ff8d2acaf"
              },
              "Header" : {
                 "CSeq" : "1",
                 "ErrorNum" : "200",
                 "ErrorString" : "Success OK",
                 "MessageType" : "MSG_SC_SERVER_MODIFY_PASSWORD_ACK",
                 "Version" : "1.0"
              }
           }
        }
      
    • 操作: 修改密码成功会返回新的token

    4. 获取LiveNVR服务信息

    • 接口:/api/v1/getserverinfo
    • 返回
    名称 含义 备注
    Server 服务器软件版本信息 -
    RunningTime 服务器累计运行时长信息 -
    Hardware 服务器硬件版本信息 -
    InterfaceVersion 接口服务版本信息 -
    {
       "LiveQing" : {
          "Body" : {
             "Hardware" : "x86",
             "InterfaceVersion" : "v1",
             "RunningTime" : "30 Days 0 Hours 1 Mins 40 Secs",
             "Server" : "EasyNVR/1.1 (Build/16.1020; Platform/Win32; State/Development; )"
          },
          "Header" : {
             "CSeq" : "1",
             "ErrorNum" : "200",
             "ErrorString" : "Success OK",
             "MessageType" : "MSG_SC_SERVER_INFO_ACK",
             "Version" : "1.0"
          }
       }
    }
    
    • 操作: 显示

    5. 【视频广场】显示所有在线通道预览

    • 接口:/api/v1/getchannels
    • 返回:
      1. 所有设备列表信息,在线&不在线 通道(包含快照信息)
      2. 通道名称、通道号、通道快照、通道是否在线
    名称 含义 备注
    Channel 通道号 通道号
    Name 通道名称 通道名称
    Online 是否在线 1在线/0离线
    SnapURL 快照地址 返回为快照的相对网络地址
    	{
    	   "LiveQing" : {
    	      "Body" : {
    	         "ChannelCount" : "2",
    	         "Channels" : [
    	            {
    	               "Channel" : 1,
    	               "Name" : "channel1",
    	               "Online" : 1,
    	               "SnapURL" : "/snap/1/2016-10-24/20161024125212.jpg"
    	            },
    	            {
    	               "Channel" : 2,
    	               "Name" : "channel2",
    	               "Online" : 0,
    	               "SnapURL" : ""
    	            }
    	         ]
    	      },
    	      "Header" : {
    	         "CSeq" : "1",
    	         "ErrorNum" : "200",
    	         "ErrorString" : "Success OK",
    	         "MessageType" : "MSG_SC_SERVER_GET_CHANNELS_ACK",
    	         "Version" : "1.0"
    	      }
    	   }
    	}
    
    • 操作: H5列表显示

    6. 播放单个通道直播

    • 接口:/api/v1/getchannelstream?channel=1&protocol=RTMP
    • 参数
    名称 含义 备注
    Channel 通道号 -
    Protocol 获取直播的协议 RTMP/HLS
    • 返回: 直播流地址URL

        {
           "LiveQing" : {
              "Body" : {
                 "ChannelName" : "通道名"
                 "URL" : "rtmp://{host}:10035/hls/stream_1"
              },
              "Header" : {
                 "CSeq" : "1",
                 "ErrorNum" : "200",
                 "ErrorString" : "Success OK",
                 "MessageType" : "MSG_SC_SERVER_GET_CHANNEL_STREAM_ACK",
                 "Version" : "1.0"
              }
           }
        }
      

    注:返回的URL中带有{host}占位符,{host}即为api接口请求中的IP字段,如果返回的URL为hls地址,那么直接为/hls/stream_1.m3u8地址,需要前端自动拼接成EasyNVR HTTP播放地址,比如EasyNVR的web访问地址为:http://192.168.66.189:10080/,那么返回的hls应该拼接为http://192.168.66.189:10080/hls/stream_1.m3u8,rtmp地址应该拼接为:rtmp://192.168.66.189:10035/hls/stream_1;

    • 操作:调用播放器进行播放

    7. 视频播放心跳

    • 接口: /api/v1/touchchannelstream?channel=1&line=local&protocol=rtmp

    • 参数: 同接口6

    • 返回: 直播流地址

        {
           "LiveQing" : {
              "Body" : {
                 "ChannelName" : "通道名"
                 "URL" : "rtmp://{host}:10035/hls/stream_1"
              },
              "Header" : {
                 "CSeq" : "1",
                 "ErrorNum" : "200",
                 "ErrorString" : "Success OK",
                 "MessageType" : "MSG_SC_SERVER_TOUCH_CHANNEL_STREAM_ACK",
                 "Version" : "1.0"
              }
           }
        } 
      
    • 操作:播放视频心跳,60秒内发送一次,否则自动停止推流

    8. 获取LiveNVR基本配置信息

    • 接口: /api/v1/getbaseconfig
    • 返回: 基础配置信息表
    名称 解释 备注
    ServiceLanPort EasyNVR服务监听端口 ReadOnly
    ServiceLanIP EasyNVR服务本地地址 ReadOnly
    ServiceWanIP EasyNVR服务公网端口 暂时不启作用
    ServiceWanPort EasyNVR服务公网地址 暂时不启作用
    ChannelSnapInterval 通道快照间隔 单位为分钟
    NginxRTMPPort EasyNVR配套的rtmp服务器端口 默认10035
    	{
    	   "LiveQing" : {
    	      "Body" : {
    	         "ChannelSnapInterval" : "120",
    	         "NginxRTMPPort" : "10035",
    	         "ServiceLanIP" : "192.168.66.222; 127.0.0.1; ",
    	         "ServiceLanPort" : "10010",
    	         "ServiceWanIP" : "none-config",
    	         "ServiceWanPort" : "10010"
    	      },
    	      "Header" : {
    	         "CSeq" : "1",
    	         "ErrorNum" : "200",
    	         "ErrorString" : "Success OK",
    	         "MessageType" : "MSG_SC_SERVER_BASE_CONFIG_ACK",
    	         "Version" : "v1"
    	      }
    	   }
    	}
    
    • 操作:显示

    9. 设置LiveNVR基本配置信息

    • 接口: /api/v1/setbaseconfig?ChannelSnapInterval=120&NginxRTMPPort=10035&ServiceLanPort=10010&ServiceWanIP=“none-config”&ServiceWanPort=10010

    • 参数:

    • 返回: 200 OK

        {
           "LiveQing" : {
              "Header" : {
                 "CSeq" : "1",
                 "ErrorNum" : "200",
                 "ErrorString" : "Success OK",
                 "MessageType" : "MSG_SC_SERVER_SET_BASE_CONFIG_ACK",
                 "Version" : "1.0"
              }
           }
        }
      
    • 操作:显示配置成功,重启后生效

    10. 发现Onvif设备

    • 接口: /api/v1/discoverdevices

    • 返回: 200 OK

        {
           "LiveQing" : {
              "Body" : {
                 "ChannelCount" : "1",
                 "Channels" : [
                    {
                       "IP" : "192.168.66.222",
                       "Onvif" : "/onvif/devices",
                       "Port" : 8080
                    }
                 ]
              },
              "Header" : {
                 "CSeq" : "1",
                 "ErrorNum" : "200",
                 "ErrorString" : "Success OK",
                 "MessageType" : "MSG_SC_SERVER_DISCOVER_DEVICES_ACK",
                 "Version" : "1.0"
              }
           }
        }
      

    11. 探测设备信息

    • 接口: /api/v1/probedevice?ip=192.168.66.222&username=admin&password=admin

    • 参数:

    名称 含义 备注
    Username 登陆用户名 设备用户名
    Password 登陆密码 设备密码(明文)

    返回:
     200 OK
    {
    “LiveQing” : {
    “Body” : {
    “IP” : “192.168.66.222”,
    “Onvif” : “/onvif/devices”,
    “Password” : “admin”,
    “Port” : “8080”,
    “Rtsp” : “rtsp://192.168.66.222:554/11”,
    “UserName” : “admin”
    },
    “Header” : {
    “CSeq” : “1”,
    “ErrorNum” : “200”,
    “ErrorString” : “Success OK”,
    “MessageType” : “MSG_SC_SERVER_PROBE_DEVICE_ACK”,
    “Version” : “1.0”
    }
    }
    }

    12. Onvif云台控制

    • 接口:/api/v1/ptzcontrol?channel=1&actiontype=continuous&command=down&speed=5&protocol=onvif
    • 参数:
    名称 含义 备注
    channel 通道ID 例:1
    actiontype 动作类型 continuous或者single
    command 动作命令 stop停止、up向上移动、down向下移动、left向左移动、right向右移动、zoomin、zoomout、focusin、focusout、aperturein、apertureout
    speed 动作速度 例如:5
    protocol 摄像机接入的协议 暂时仅支持ONVIF接入的摄像机
    reserve 保留 暂未使用

    只有Onvif类型接入的设备才能支持云台控制功能,同时,设备必须有云台,他才会转动;

    13. 单个通道配置

    • 接口: /api/v1/setchannelconfig?Cdn=&Channel=2&Enable=0&IP=192.168.66.22&Name=channel2&Onvif=”/device/service”&Password=admin&Port=8080&Protocol=RTSP&Rtsp=”rtsp//192.168.66.22/22”&UserName=admin&OnDemand=1&Audio=1

    • 参数

    名称 含义 备注
    Channel 设置的通道号 例如:1
    Enable 通道是否启用 1启用、0禁用
    IP 摄像机IP地址 例如:192.168.66.222
    Name 摄像机名称 例如:测试通道
    Port 摄像端口 例如:554、8080
    Protocol 摄像机接入的协议 ONVIF、RTSP
    Username 摄像机登陆用户名 例如:admin
    Password 摄像机登陆密码 例如:admin
    RTSP 摄像机的RTSP地址 例如:rtsp://192.168.66.222/11
    ONVIF 摄像机的Onvif地址 /onvif/devices
    Cdn 推送的CDN地址 rtmp://rtmp.aliyun.com/live/209?sign=faefabe&tm=20161005190329
    OnDemand 是否按需直播 1启用、0不启用
    Audio 是否启用音频输入 1启用、0不启用
    • 返回: 200 OK

        {
           "LiveQing" : {
              "Header" : {
                 "CSeq" : "1",
                 "ErrorNum" : "200",
                 "ErrorString" : "Success OK",
                 "MessageType" : "MSG_SC_SERVER_SET_CHANNEL_CONFIG_ACK",
                 "Version" : "1.0"
              }
           }
        }
      
    • 操作:显示配置成功,即时生效!

    14. 获取LiveNVR所有通道信息

    • 接口: /api/v1/getchannelsconfig

    • 返回: 通道列表数组信息

        {
           "LiveQing" : {
              "Body" : {
                 "ChannelCount" : "16",
                 "Channels" : [
                    {
                       "Cdn" : "",
                       "Channel" : 1,
                       "Enable" : 1,
                       "IP" : "192.168.66.222",
                       "Name" : "channel1",
                       "OnDemand" : 1,
                       "Online" : 1,
                       "Onvif" : "/onvif/devices",
                       "Password" : "admin",
                       "Port" : 8080,
                       "Protocol" : "RTSP",
                       "Rtsp" : "rtsp://192.168.66.222/11",
                       "UserName" : "admin",
                       "Audio" : 1
                    },
                    {
                       "Cdn" : "",
                       "Channel" : 2,
                       "Enable" : 0,
                       "IP" : "192.168.66.22",
                       "Name" : "channel2",
                       "OnDemand" : 1,
                       "Online" : 0,
                       "Onvif" : "/onvif/devices",
                       "Password" : "admin",
                       "Port" : 8080,
                       "Protocol" : "RTSP",
                       "Rtsp" : "rtsp://192.168.66.22/22",
                       "UserName" : "admin",
                       "Audio" : 1
                    },
                   ……
                 ]
              },
              "Header" : {
                 "CSeq" : "1",
                 "ErrorNum" : "200",
                 "ErrorString" : "Success OK",
                 "MessageType" : "MSG_SC_SERVER_GET_CHANNELS_CONFIG_ACK",
                 "Version" : "1.0"
              }
           }
        }
      
    • 操作:显示,单个通道可禁用/启用/修改配置

    17. 重启接口

    • 接口: /api/v1/restart
    • 返回: 200 OK
    • 操作: 显示成功

     

  • 相关阅读:
    json数组对象和对象数组
    C#中的List<string>泛型类示例
    Ajax异步更新网页(使用原生JavaScript)
    Ajax基础
    jQuery的动画效果
    jQuery事件绑定
    jQuery节点更新
    jQuery选择器
    json数据
    jQuery中的html()、text()和val()的用法
  • 原文地址:https://www.cnblogs.com/kumukim/p/11006613.html
Copyright © 2011-2022 走看看