如何在播放器上加一个云台控制界面


问题:

对于实时直播的视频播放,

由于播放页面客观样式要求(一个播放器占据了整个页面),因此很难找出很合理的空间来放置其他功能按钮的位置(比如配合实时是平的云台控制界面);

EasyNVR配置中设有ONVIF探测功能;因此需要在视频播放界面添加了云台控制界面来展示出该功能;

为了保持一个良好的用户体验,在保证不影响播放效果和播放界面的前提下,如何合理的添加云台控制界面成为一个问题。

解决:

由于页面整体的样式,在页面其他位置添加云台控制界面势必会影响整体样式美观;

向下启用空间添加云台控制界面,用会影响用户的实时体验;

在播放的播放器页面上添加一个可以手动触发展示云台控制界面的按钮,让云台界面在播放器界面浮动展示出来,云台界面实时操作结束后,可以手动关闭云台控制界面,并且不影响视频的直播。

通过定位确定好云台控制界面展示的位置,并且将云平台控制界面默认隐藏起来;再设置一个可以点击触发的按钮,通过触发按钮对云台控制界面进行展示和隐藏处理;

完成效果:

代码:

  1. <div class="player-wrapper" style="margin:0 auto;width:80%;position:relative;">
  2. <div class="row" style="position:absolute;top:50%;margin-top:-120px;bottom:0;right:0;z-index:999;overflow: hidden;">
  3. <div class="col-sm-5" style="margin-left:20px;width:100%;display:none;overflow: hidden;" id="ipcam_div">
  4. <div id="ipcam_control" class="ipcam_control" style="float:left;display:none;">
  5. <table width="auto" border="0" align="center" cellspacing="0">
  6. <tbody>
  7. <tr>
  8. <th colspan="3" style=" text-align: center;color:#fff">云台控制</th>
  9. </tr>
  10. <tr>
  11. <th colspan="3" style=" text-align: center;color:#fff">&nbsp;</th>
  12. </tr>
  13. <tr>
  14. <td>
  15. <a onmouseout="ptzout()" onmouseover="MM_swapImage('Image18','','images/cut.png',1)" onmousedown="ptzcmdSubmit('zoomout')" onmouseup="ptzcmdSubmit('stop')"> <img src="data:images/cut1.png" name="Image18" border="0" height="38" width="38" id="cut" alt="远"></a>
  16. </td>
  17. <td> </td>
  18. <td>
  19. <a onmouseout="ptzout()" onmouseover="MM_swapImage('Image19','','images/add.png',1)" onmousedown="ptzcmdSubmit('zoomin')" onmouseup="ptzcmdSubmit('stop')"> <img src="data:images/add1.png" name="Image19" border="0" height="38" width="38" id="add" alt="近"></a>
  20. </td>
  21. <!--<td><img src="data:images/add1.png" border="0" height="38" width="38" /></td>-->
  22. </tr>
  23. <tr>
  24. <th colspan="3" style=" text-align: center;color:#fff">&nbsp;</th>
  25. </tr>
  26. <tr>
  27. <th colspan="3" style="color:#fff;border:1px dashed #fff;margin:0 4%;"></th>
  28. </tr>
  29. <tr>
  30. <th colspan="3" style=" text-align: center;color:#fff">&nbsp;</th>
  31. </tr>
  32. <tr>
  33. <td> </td>
  34. <td>
  35. <a onmouseout="ptzout()" onmouseover="MM_swapImage('Image20','','images/u.png',1)" onmousedown="ptzcmdSubmit('up')" onmouseup="ptzcmdSubmit('stop')"> <img src="data:images/u1.png" name="Image20" border="0" height="38" width="38" id="up" alt="上"></a>
  36. </td>
  37. <td> </td>
  38. </tr>
  39. <tr>
  40. <td>
  41. <a onmouseout="ptzout()" onmousedown="ptzcmdSubmit('left')" onmouseup="ptzcmdSubmit('stop')" onmouseover="MM_swapImage('Image22','','images/l.png',1)"> <img src="data:images/l1.png" name="Image22" border="0" height="38" width="38" id="left" alt="左"></a>
  42. </td>
  43. <td>
  44. <a onmouseout="ptzout()" onmousedown="ptzcmdSubmit('home')" onmouseover="MM_swapImage('Image23','','images/h.png',1)"> <img src="data:images/h1.png" name="Image23" border="0" height="38" width="38" id="center" alt="居中"></a>
  45. </td>
  46. <td>
  47. <a onmouseout="ptzout()" onmousedown="ptzcmdSubmit('right')" onmouseup="ptzcmdSubmit('stop')" onmouseover="MM_swapImage('Image24','','images/r.png',1)"> <img src="data:images/r1.png" name="Image24" border="0" height="38" width="38" id="right" alt="右"></a>
  48. </td>
  49. </tr>
  50. <tr>
  51. <td> </td>
  52. <td>
  53. <a onmouseout="ptzout()" onmousedown="ptzcmdSubmit('down')" onmouseup="ptzcmdSubmit('stop')" onmouseover="MM_swapImage('Image26','','images/d.png',1)"> <img src="data:images/d1.png" name="Image26" border="0" height="38" width="38" id="down" alt="下"></a>
  54. </td>
  55. <td> </td>
  56. </tr>
  57. </tbody>
  58. </table>
  59. </div>
  60. <div style="float:left;" onclick="showCont()">
  61. <img src="data:images/show1.png" border="0" width="100%" id="Photo"/>
  62. </div>
  63. </div>
  64. </div>
  65. <div class="video-wrapper" style="padding-bottom:55%;position:relative;margin:0 auto;">
  66. <div class="video-inner" style="position:absolute;top:0;bottom:0;left:0;right:0;">
  67. <video id="videojs" class="video-js vjs-default-skin vjs-big-play-centered" style="width: 100%; height: 100%;" controls preload="none"
  68. poster="" x5-video-player-fullscreen=”true”,x5-video-player-type=”h5”>
  69. <source src="" type=""></source>
  70. <p class="vjs-no-js">
  71. To view this video please enable JavaScript, and consider upgrading to a web browser that
  72. <a href="http://videojs.com/html5-video-support/" target="_blank">
  73. supports HTML5 video
  74. </a>
  75. </p>
  76. </video>
  77. </div>
  78. </div>
  79. </div>
  80. function showCont(){
  81. if ($("#ipcam_control").is(":hidden")) {
  82. $("#ipcam_control").show("fast");
  83. $("#Photo").attr("src","images/show2.png")
  84. }else{
  85. $("#ipcam_control").hide("fast");
  86. $("#Photo").attr("src","images/show1.png")
  87. }
  88. }

对于云台控制功能的实现,可以通过触发云台控制界面对应的功能按钮,调用对应的接口来实现功能;

EasyNVR云台控制中包含了控制摄像头上、下、左、右的转动,停止功能和焦距的调节等。

关于EasyNVR

EasyNVR能够通过简单的网络摄像机通道配置,将传统监控行业里面的高清网络摄像机IP Camera、NVR等具有RTSP协议输出的设备接入到EasyNVR,EasyNVR能够将这些视频源的音视频数据进行拉取,转换为RTMP/HLS,进行全平台终端H5直播(Web、Android、iOS),并且EasyNVR能够将视频源的直播数据对接到第三方CDN网络,实现互联网级别的直播分发;

详细说明:http://www.easydarwin.org/easynvr/

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2017

EasyNVR H5无插件摄像机直播解决方案前端解析之:如何在播放界面添加实时云台控制界面的更多相关文章

  1. EasyNVR H5无插件摄像机直播解决方案前端解析之:监控实时直播的四分屏的前端展示

    完成运行效果图: 一.四分屏展示样式布局 1.通过html.css等来进行样式排版 根据需求的四分屏的样式:来合理的划分出四个大块,分别用于放置四个播放器: 以四等分结构为例进行前端的排版: html ...

  2. EasyNVR H5无插件摄像机直播解决方案前端解析之:关于直播页面和视频列表页面切换的问题

    关于直播页面和视频列表页面切换 为了给用户更好的用户体验,并且更好的让用户快速简洁的了解实时的视频直播信息.一般多会分为列表展示和实时的视频直播展示. 表面上只是两个视图之间的随意切换,其实切换的两个 ...

  3. EasyNVR H5无插件摄像机直播解决方案前端解析之:引用videojs无法自动播放

    关于videojs自动播放问题 播放流媒体多使用videojs来进行播放,videojs,本身自带自动播放属性: 通过添加autoplay(),来完成视频播放的自动加载: player = video ...

  4. EasyNVR H5无插件摄像机直播解决方案前端解析之:videojs初始化的一些样式处理

    初始化完成对videojs样式的调整 由于不同项目的需要,对于加载出来的videojs播放器样式也有不同的需求:我们需要自主的处理一下加载出来的videojs播放器的样式: 默认加载出来的会包含有暂停 ...

  5. EasyNVR H5无插件摄像机直播解决方案前端解析之:videojs的使用

    video.js的基本使用方法 一.videojs的初始化加载 videojs初始化加载分为两中 1.标签式加载 在引入videojs加载文件的前提下,可以在video标签中添加属性值"da ...

  6. EasyNVR H5无插件RTSP直播方案在Windows server 2012上修复无法定位GetNumaNodeProcessorMaskEx的问题

    今天遇到一个客户在使用EasyNVR无插件安防直播解决方案的时候,在Windows Server 2012上出现一个问题提示: 经过反复的查找,虽然提示上显示问题出在KERNEL32.dll上,但是已 ...

  7. 基于EasyDarwin框架实现EasyNVR H5无插件直播流媒体服务器方案

    在之前的一篇博客<web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!>中,描述了实现一套H5无插件直播方案的各个组件的参考建议,又在博客<EasyNVR H5流媒体服务器方案架 ...

  8. 基于EasyDarwin开源流媒体服务器框架实现EasyNVR H5无插件直播流媒体服务器方案

    背景分析 在之前的一篇博客<web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!>中,描述了实现一套H5无插件直播方案的各个组件的参考建议,又在博客<EasyNVR H5流媒体服 ...

  9. 基于EasyNVR摄像机无插件直播方案二次开发实现自己的摄像机IPC-NVR无插件化直播解决方案

    背景介绍 在之前的博客中<基于EasyNVR实现RTSP/Onvif监控摄像头Web无插件化直播监控>,对EasyNVR所实现的功能我们已经有较多描述,这些也在方案地址:http://ww ...

随机推荐

  1. AC日记——N的倍数 51nod 1103

    1103 N的倍数 思路: 先计算出前缀和: 然后都%n: 因为有n个数,所以如果没有sum[i]%n==0的化,一定有两个取模后的sum相等: 输出两个sum中间的数就好: 来,上代码: #incl ...

  2. Codeforces Gym101522 D.Distribution of Days-算日期 (La Salle-Pui Ching Programming Challenge 培正喇沙編程挑戰賽 2017)

    D.Distribution of Days The Gregorian calendar is internationally the most widely used civil calendar ...

  3. 洛谷——P1621 集合

    P1621 集合 题目描述 现在给你一些连续的整数,它们是从A到B的整数.一开始每个整数都属于各自的集合,然后你需要进行一下的操作: 每次选择两个属于不同集合的整数,如果这两个整数拥有大于等于P的公共 ...

  4. windows内核实现的34个关键问题

    http://book.kongfz.com/237217/670391178/#bookComm

  5. 对象第复制operator=

    类机制中有默认的对象复制操作符=,自定义对象复制需要注意一个问题,如果有遇到指针指向的资源是需要释放的,这时需要毫不留情释放,否则内存空间的泄露就不可避免.复制操作与拷贝构造函数的参数是一致的,只是在 ...

  6. Java线程状态中BLOCKED和WAITING有什么差别?

    刚才在看CSDN的问答时.发现这个问题. 原问题的作者是在观察jstack的输出时提出的疑问.那么BLOCKED和WAITING有什么差别呢? 答复在JDK源代码中能够找到,例如以下是java.lan ...

  7. 如何从底层调试docker

    How the docker container creation process works (from docker run to runc) Over the past few months I ...

  8. maven仓库中有jar包pom还报错

    maven仓库中有jar包pom还报错 就报错,咋啦? 这个包来源不明,自己拷贝进来的吧?你当我mvn是傻子?我要去网上验证一下: 我自己有个_remote.respositories文件,如果自己用 ...

  9. 第一个Swift程序Hello World

    import Foundation print("Hello, World!") print("I am here!") var arr=["项羽&q ...

  10. 【Python】向函数传递列表

    向函数传递列表 在实际使用中你会发现,向函数传递列表是比较实用的,这种列表可能包含名字.数字.可能更复杂的对象(字典) 假设向一个函数传递一堆水果,我们说出我们喜欢所有的水果 def Obj(frui ...