index.ts 3.2 KB

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