player.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import WebSocketServer from './websocketServer.js';
  2. import {BlankROIDrawer, ROIDrawer, StandingDrawer, SpeedLine} from './ROIDrawer.js';
  3. let ROIdrawer = null;
  4. class Player {
  5. constructor(option) {
  6. this.ws = null;
  7. this.options = option;
  8. this.events = {
  9. error: ()=>{}
  10. };
  11. this.ROI = {
  12. ROIDrawer,
  13. }
  14. }
  15. init() {
  16. //console.log('init');
  17. ROIdrawer = new ROIDrawer(this.options.drawer);
  18. this.options.ROI = ROIdrawer;
  19. this.ws = new WebSocketServer(this.options);
  20. this.ws.init();
  21. }
  22. connect() {
  23. for(let i in this.events) {
  24. this.ws.setCallBack(i, this.events[i]);
  25. }
  26. this.ws.connect();
  27. }
  28. play() {
  29. //console.log('player')
  30. }
  31. pause() {
  32. //console.log('pause')
  33. }
  34. close() {
  35. this.ws.close();
  36. ROIdrawer.terminate();
  37. //console.log('close1')
  38. }
  39. /**
  40. * 绘制额外信息
  41. * @param obj
  42. */
  43. updateInfo(obj) {
  44. this.ws.updateInfo(obj);
  45. }
  46. changeROIType(type) {
  47. ROIdrawer && ROIdrawer.terminate();
  48. switch (type) {
  49. case 'Polygon1':
  50. ROIdrawer = new ROIDrawer(this.options.drawer);
  51. ROIdrawer.setPolygonNum(1);
  52. ROIdrawer.cover(this.options.video);
  53. ROIdrawer.setROIFinishedCallback(this.events['ROIFinished']);
  54. break;
  55. case 'Polygon2':
  56. ROIdrawer = new ROIDrawer(this.options.drawer);
  57. ROIdrawer.setPolygonNum(2);
  58. ROIdrawer.cover(this.options.video);
  59. ROIdrawer.setROIFinishedCallback(this.events['ROIFinished']);
  60. break;
  61. case 'Polygon1Line1':
  62. ROIdrawer = new StandingDrawer(this.options.drawer);
  63. ROIdrawer.cover(this.options.video);
  64. ROIdrawer.setROIFinishedCallback(this.events['ROIFinished']);
  65. break;
  66. case 'Line2':
  67. ROIdrawer = new SpeedLine(this.options.drawer);
  68. ROIdrawer.setLineNum(2);
  69. ROIdrawer.cover(this.options.video);
  70. ROIdrawer.setROIFinishedCallback(this.events['ROIFinished']);
  71. break;
  72. default:
  73. ROIdrawer = new BlankROIDrawer(this.options.drawer);
  74. break;
  75. }
  76. this.ws.setROIDrawer(ROIdrawer);
  77. }
  78. setROI(data) {
  79. ROIdrawer && ROIdrawer.setROI(data);
  80. }
  81. resetROI() {
  82. ROIdrawer && ROIdrawer.reset();
  83. }
  84. getROIData() {
  85. if(ROIdrawer) {
  86. return ROIdrawer.getROIData();
  87. }
  88. return null;
  89. }
  90. setPolygonNum(num) {
  91. ROIdrawer && ROIdrawer.setPolygonNum(num);
  92. }
  93. /**
  94. * 自定义事件
  95. * 目前支持如下事件
  96. * [error] websocket连接失败
  97. * [noStream] 收不到码流
  98. * [canplay] 视频能够播放时触发
  99. * [initialCompleted] 视频初始化完成, 首次canplay
  100. * [ROIFinished] 手动绘制ROI完成时触发
  101. *
  102. * @param event 事件名
  103. * @param callback 事件响应函数
  104. */
  105. on(event, callback) {
  106. this.events[event] = callback;
  107. }
  108. }
  109. export default Player;