camera.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. 'use strict';
  2. const { Controller } = require('ee-core');
  3. const Log = require('ee-core/log');
  4. const { checkCameraControlCmdExists, closeCameraControlTips} = require('../utils/camera');
  5. const {
  6. checkCamera,
  7. liveShow, liveHide, setParams, capture, getParams,CMD,captureLive,closeOtherWindow } = require('../api/camera');
  8. const { readConfigFile } = require('../utils/config');
  9. let isOPen = true
  10. let isSoftwareStarted = false; // 标记相机控制软件是否已经启动
  11. class CameraController extends Controller {
  12. constructor(ctx) {
  13. super(ctx);
  14. }
  15. async connect() {
  16. try {
  17. console.log('==================');
  18. console.log(readConfigFile());
  19. if(readConfigFile().controlType === 'digiCamControl'){
  20. console.log('========1==========');
  21. // 首先尝试获取相机参数
  22. let res = await getParams('iso').catch(e=>{
  23. console.log('getParams failed:', e);
  24. isOPen = false;
  25. return null;
  26. });
  27. if(res === '未将对象引用设置到对象的实例。' || !res){
  28. // 相机未连接,检查是否需要启动软件
  29. if (!isSoftwareStarted) {
  30. console.log('启动 digiCamControl 软件...');
  31. await checkCameraControlCmdExists();
  32. await CMD('All_Minimize');
  33. await closeCameraControlTips();
  34. isSoftwareStarted = true;
  35. console.log('digiCamControl 软件启动完成,等待初始化...');
  36. await new Promise(resolve => setTimeout(resolve, 5000)); // 等待软件初始化
  37. // 软件启动后再次检查相机状态
  38. res = await getParams('iso').catch(e=>{
  39. console.log('软件启动后检查相机失败:', e);
  40. return null;
  41. });
  42. }
  43. // 如果仍然失败,返回错误
  44. if(res === '未将对象引用设置到对象的实例。' || !res) {
  45. return {
  46. status:-1,
  47. msg: isSoftwareStarted ? "相机硬件未连接,请检查相机连接。" : "相机控制软件启动失败。",
  48. }
  49. }
  50. }
  51. return {
  52. status:2,
  53. msg:res,
  54. }
  55. }else{
  56. // SmartShooter 逻辑
  57. let res = await checkCamera().catch(e=>{
  58. Log.info('checkCamera:'+e);
  59. isOPen = false;
  60. })
  61. if(res?.device_status === -1 ){
  62. // 相机未连接,检查是否需要启动软件
  63. if (!isSoftwareStarted) {
  64. Log.info('启动 SmartShooter 软件...');
  65. await checkCameraControlCmdExists();
  66. isSoftwareStarted = true;
  67. Log.info('SmartShooter 软件启动完成,等待初始化...');
  68. await new Promise(resolve => setTimeout(resolve, 10000)); // 等待软件初始化
  69. // 软件启动后再次检查相机状态
  70. res = await checkCamera().catch(e=>{
  71. Log.info('软件启动后检查相机失败:'+e);
  72. });
  73. }
  74. // 无论是否启动了软件,如果相机还是未连接,返回相应状态
  75. if (res?.device_status === -1) {
  76. return {
  77. status: -1,
  78. msg: isSoftwareStarted ? "相机硬件未连接,请检查相机连接。" : "相机控制软件启动失败。",
  79. };
  80. }
  81. }
  82. if(res?.device_status === 2){
  83. isOPen = true;
  84. return {
  85. ...res,
  86. status:2
  87. };
  88. }
  89. return {
  90. status:-1,
  91. msg:"相机未连接,请链接相机。",
  92. }
  93. }
  94. } catch (error) {
  95. let msg = '请安装SmartShooter5软件'
  96. if(readConfigFile().controlType === 'digiCamControl') msg = '请安装digiCamControl软件,并打开digiCamControl软件的web服务,端口为5513'
  97. return {
  98. status:-1,
  99. msg,
  100. }
  101. }
  102. }
  103. /**
  104. * 启动预览
  105. */
  106. async liveShow() {
  107. try {
  108. await liveShow();
  109. if(readConfigFile().controlType === 'digiCamControl'){
  110. await CMD('All_Minimize')
  111. }
  112. return true;
  113. } catch (error) {
  114. console.error('eeee启动直播失败:', error);
  115. throw error;
  116. }
  117. }
  118. /**
  119. * 结束预览
  120. */
  121. async liveHide() {
  122. try {
  123. await liveHide();
  124. return true;
  125. } catch (error) {
  126. throw error;
  127. }
  128. }
  129. /**
  130. * 设置参数
  131. */
  132. async setParams(params) {
  133. try {
  134. console.log(params);
  135. await setParams(params);
  136. return true;
  137. } catch (error) {
  138. throw error;
  139. }
  140. }
  141. async takePictures(isLive=true) {
  142. try {
  143. if(isLive){
  144. await captureLive();
  145. }else{
  146. await capture();
  147. }
  148. return true;
  149. } catch (error) {
  150. throw error;
  151. }
  152. }
  153. // 示例:使用 fetchData 函数进行 HTTP 请求
  154. async fetchExampleData() {
  155. const options = {
  156. hostname: 'example.com',
  157. port: 443,
  158. path: '/api/data',
  159. method: 'GET'
  160. };
  161. try {
  162. const data = await fetchData(options);
  163. console.log('Fetched data:', data);
  164. return data;
  165. } catch (error) {
  166. console.error('Fetch data failed:', error);
  167. throw error;
  168. }
  169. }
  170. }
  171. CameraController.toString = () => '[class CameraController]';
  172. module.exports = CameraController;