index.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import { UploadFileInfo } from 'naive-ui';
  2. import { defineStore } from 'pinia';
  3. import {
  4. IArea,
  5. LiveLineEnum,
  6. LiveRenderEnum,
  7. MediaTypeEnum,
  8. } from '@/interface';
  9. import { mobileRouterName } from '@/router';
  10. import { ILiveRoom } from '@/types/ILiveRoom';
  11. export type AppRootState = {
  12. useGoogleAd: boolean;
  13. areaList: IArea[];
  14. remoteDesk: {
  15. sender: string;
  16. startRemoteDesk: boolean;
  17. isRemoteing?: boolean;
  18. isClose?: boolean;
  19. };
  20. playing: boolean;
  21. videoRatio: number;
  22. normalVolume: number;
  23. navList: { routeName: string; name: string }[];
  24. allTrack: {
  25. /** 1开启;2关闭 */
  26. audio: number;
  27. /** 1开启;2关闭 */
  28. video: number;
  29. id: string;
  30. deviceId?: string;
  31. mediaName: string;
  32. type: MediaTypeEnum;
  33. openEye: boolean;
  34. track?: MediaStreamTrack;
  35. stream?: MediaStream;
  36. streamid?: string;
  37. trackid?: string;
  38. // canvasDom?: fabric.Image | fabric.Text;
  39. canvasDom?: any;
  40. hidden?: boolean;
  41. muted?: boolean;
  42. volume?: number;
  43. videoEl?: HTMLVideoElement;
  44. imgInfo?: UploadFileInfo[];
  45. mediaInfo?: UploadFileInfo[];
  46. txtInfo?: { txt: string; color: string };
  47. timeInfo?: { color: string };
  48. stopwatchInfo?: { color: string };
  49. rect?: { top: number; left: number };
  50. scaleInfo: Record<number, { scaleX: number; scaleY: number }>;
  51. }[];
  52. videoControls: {
  53. pipMode?: boolean;
  54. pageFullMode?: boolean;
  55. fullMode?: boolean;
  56. renderMode?: LiveRenderEnum;
  57. line?: boolean;
  58. speed?: boolean;
  59. networkSpeed?: boolean;
  60. fps?: boolean;
  61. kbs?: boolean;
  62. resolution?: boolean;
  63. };
  64. videoControlsValue: {
  65. pipMode?: boolean;
  66. pageFullMode?: boolean;
  67. kbs?: string;
  68. fps?: number;
  69. };
  70. liveLine: LiveLineEnum;
  71. liveRoomInfo?: ILiveRoom;
  72. showLoginModal: boolean;
  73. disableSpeaking: Map<number, { exp: number; label: string }>;
  74. showSigninRedDot: boolean;
  75. };
  76. export const useAppStore = defineStore('app', {
  77. state: (): AppRootState => {
  78. return {
  79. useGoogleAd: false,
  80. areaList: [],
  81. remoteDesk: {
  82. startRemoteDesk: false,
  83. sender: '',
  84. isRemoteing: false,
  85. isClose: undefined,
  86. },
  87. playing: false,
  88. videoRatio: 16 / 9,
  89. videoControls: {
  90. renderMode: LiveRenderEnum.video,
  91. },
  92. videoControlsValue: {
  93. pipMode: false,
  94. },
  95. normalVolume: 80,
  96. navList: [
  97. { routeName: mobileRouterName.h5, name: '频道' },
  98. { routeName: mobileRouterName.h5Rank, name: '排行' },
  99. { routeName: mobileRouterName.h5My, name: '我的' },
  100. ],
  101. allTrack: [],
  102. liveLine: LiveLineEnum.hls,
  103. liveRoomInfo: undefined,
  104. showLoginModal: false,
  105. disableSpeaking: new Map(),
  106. showSigninRedDot: false,
  107. };
  108. },
  109. actions: {
  110. setLiveRoomInfo(res: AppRootState['liveRoomInfo']) {
  111. this.liveRoomInfo = res;
  112. },
  113. setAllTrack(res: AppRootState['allTrack']) {
  114. this.allTrack = res;
  115. },
  116. getTrackInfo() {
  117. const res = { audio: 0, video: 0 };
  118. this.allTrack.forEach((item) => {
  119. // if (item.stream) {
  120. if (item.audio === 1) {
  121. res.audio += 1;
  122. }
  123. if (item.video === 1) {
  124. res.video += 1;
  125. }
  126. // }
  127. });
  128. return res;
  129. },
  130. },
  131. });