index.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. streamid: string;
  18. trackid: string;
  19. canvasDom?: any;
  20. }[];
  21. };
  22. export const useAppStore = defineStore('app', {
  23. state: (): AppRootState => {
  24. return {
  25. muted: true,
  26. navList: [
  27. { routeName: mobileRouterName.h5, name: '频道' },
  28. { routeName: mobileRouterName.h5Rank, name: '排行' },
  29. { routeName: mobileRouterName.h5Profile, name: '我的' },
  30. ],
  31. allTrack: [],
  32. };
  33. },
  34. actions: {
  35. setMuted(res: AppRootState['muted']) {
  36. this.muted = res;
  37. },
  38. setAllTrack(res: AppRootState['allTrack']) {
  39. this.allTrack = res;
  40. },
  41. isOnlyAudio() {
  42. let videoTracks = 0;
  43. this.allTrack.forEach((item) => {
  44. if (item.video === 1) {
  45. videoTracks += 1;
  46. }
  47. });
  48. return videoTracks <= 0;
  49. },
  50. getTrackInfo() {
  51. const res = { audio: 0, video: 0 };
  52. this.allTrack.forEach((item) => {
  53. res.audio += item.stream.getAudioTracks().length;
  54. res.video += item.stream.getVideoTracks().length;
  55. });
  56. return res;
  57. },
  58. },
  59. });