index.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { defineStore } from 'pinia';
  2. import { MediaTypeEnum } from '@/interface';
  3. import { mobileRouterName } from '@/router';
  4. export type AppRootState = {
  5. muted: boolean;
  6. navList: { routeName: string; name: string }[];
  7. allTrack: {
  8. /** 1开启;2关闭 */
  9. audio: number;
  10. /** 1开启;2关闭 */
  11. video: number;
  12. id: string;
  13. mediaName: string;
  14. type: MediaTypeEnum;
  15. track: MediaStreamTrack;
  16. stream: MediaStream;
  17. }[];
  18. };
  19. export const useAppStore = defineStore('app', {
  20. state: (): AppRootState => {
  21. return {
  22. muted: true,
  23. navList: [
  24. { routeName: mobileRouterName.h5, name: '频道' },
  25. { routeName: mobileRouterName.h5Rank, name: '排行' },
  26. { routeName: mobileRouterName.h5Profile, name: '我的' },
  27. ],
  28. allTrack: [],
  29. };
  30. },
  31. actions: {
  32. setMuted(res: AppRootState['muted']) {
  33. this.muted = res;
  34. },
  35. setAllTrack(res: AppRootState['allTrack']) {
  36. this.allTrack = res;
  37. },
  38. isOnlyAudio() {
  39. let videoTracks = 0;
  40. this.allTrack.forEach((item) => {
  41. videoTracks += item.stream.getVideoTracks().length;
  42. });
  43. return videoTracks <= 0;
  44. },
  45. getTrackInfo() {
  46. const res = { audio: 0, video: 0 };
  47. this.allTrack.forEach((item) => {
  48. res.audio += item.stream.getAudioTracks().length;
  49. res.video += item.stream.getVideoTracks().length;
  50. });
  51. return res;
  52. },
  53. },
  54. });