index.ts 3.2 KB

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