use-rtcParams.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. import { ref, watch } from 'vue';
  2. import { DEFAULT_AUTH_INFO } from '@/constant';
  3. import { MediaTypeEnum } from '@/interface';
  4. import { useUserStore } from '@/store/user';
  5. export const useRTCParams = () => {
  6. const userStore = useUserStore();
  7. const maxBitrate = ref([
  8. {
  9. label: '1',
  10. value: 1,
  11. disabled: false,
  12. },
  13. {
  14. label: '10',
  15. value: 10,
  16. disabled: false,
  17. },
  18. {
  19. label: '1000',
  20. value: 1000,
  21. disabled: false,
  22. },
  23. {
  24. label: '2000',
  25. value: 2000,
  26. disabled: false,
  27. },
  28. {
  29. label: '3000',
  30. value: 3000,
  31. disabled: false,
  32. },
  33. {
  34. label: '4000',
  35. value: 4000,
  36. disabled: true,
  37. },
  38. {
  39. label: '5000',
  40. value: 5000,
  41. disabled: true,
  42. },
  43. {
  44. label: '6000',
  45. value: 6000,
  46. disabled: true,
  47. },
  48. {
  49. label: '7000',
  50. value: 7000,
  51. disabled: true,
  52. },
  53. {
  54. label: '8000',
  55. value: 8000,
  56. disabled: true,
  57. },
  58. ]);
  59. const maxFramerate = ref([
  60. {
  61. label: '1帧',
  62. value: 1,
  63. disabled: false,
  64. },
  65. {
  66. label: '10帧',
  67. value: 10,
  68. disabled: false,
  69. },
  70. {
  71. label: '20帧',
  72. value: 20,
  73. disabled: false,
  74. },
  75. {
  76. label: '30帧',
  77. value: 30,
  78. disabled: false,
  79. },
  80. {
  81. label: '60帧',
  82. value: 60,
  83. disabled: true,
  84. },
  85. {
  86. label: '120帧',
  87. value: 120,
  88. disabled: true,
  89. },
  90. ]);
  91. const resolutionRatio = ref([
  92. {
  93. label: '360P',
  94. value: 360,
  95. disabled: false,
  96. },
  97. {
  98. label: '540P',
  99. value: 540,
  100. disabled: false,
  101. },
  102. {
  103. label: '720P',
  104. value: 720,
  105. disabled: false,
  106. },
  107. {
  108. label: '1080P',
  109. value: 1080,
  110. disabled: false,
  111. },
  112. {
  113. label: '1440P',
  114. value: 1440,
  115. disabled: true,
  116. },
  117. {
  118. label: '2160P',
  119. value: 2160,
  120. disabled: true,
  121. },
  122. ]);
  123. const videoContentHint = ref([
  124. {
  125. label: '默认',
  126. value: '',
  127. disabled: false,
  128. },
  129. {
  130. label: '运动',
  131. value: 'motion',
  132. disabled: false,
  133. },
  134. {
  135. label: '文本',
  136. value: 'text',
  137. disabled: false,
  138. },
  139. {
  140. label: '平衡',
  141. value: 'detail',
  142. disabled: false,
  143. },
  144. ]);
  145. const audioContentHint = ref([
  146. {
  147. label: '默认',
  148. value: '',
  149. disabled: false,
  150. },
  151. {
  152. label: '音乐',
  153. value: 'music',
  154. disabled: false,
  155. },
  156. {
  157. label: '语言',
  158. value: 'speech',
  159. disabled: false,
  160. },
  161. {
  162. label: '语音识别',
  163. value: 'speech-recognition',
  164. disabled: false,
  165. },
  166. ]);
  167. watch(
  168. () => userStore.userInfo,
  169. (newval) => {
  170. if (newval) {
  171. if (
  172. userStore.userInfo?.auths?.find(
  173. (v) => v.auth_value === DEFAULT_AUTH_INFO.LIVE_PULL_SVIP.auth_value
  174. )
  175. ) {
  176. maxBitrate.value = maxBitrate.value.map((item) => {
  177. item.disabled = false;
  178. return item;
  179. });
  180. maxFramerate.value = maxFramerate.value.map((item) => {
  181. item.disabled = false;
  182. return item;
  183. });
  184. resolutionRatio.value = resolutionRatio.value.map((item) => {
  185. item.disabled = false;
  186. return item;
  187. });
  188. }
  189. }
  190. },
  191. { immediate: true }
  192. );
  193. const allMediaTypeList: Record<string, { type: MediaTypeEnum; txt: string }> =
  194. {
  195. [MediaTypeEnum.camera]: {
  196. type: MediaTypeEnum.camera,
  197. txt: '摄像头',
  198. },
  199. [MediaTypeEnum.microphone]: {
  200. type: MediaTypeEnum.microphone,
  201. txt: '麦克风',
  202. },
  203. [MediaTypeEnum.screen]: {
  204. type: MediaTypeEnum.screen,
  205. txt: '窗口',
  206. },
  207. [MediaTypeEnum.txt]: {
  208. type: MediaTypeEnum.txt,
  209. txt: '文字',
  210. },
  211. [MediaTypeEnum.img]: {
  212. type: MediaTypeEnum.img,
  213. txt: '图片',
  214. },
  215. [MediaTypeEnum.media]: {
  216. type: MediaTypeEnum.media,
  217. txt: '视频',
  218. },
  219. [MediaTypeEnum.time]: {
  220. type: MediaTypeEnum.time,
  221. txt: '时间',
  222. },
  223. [MediaTypeEnum.stopwatch]: {
  224. type: MediaTypeEnum.stopwatch,
  225. txt: '秒表',
  226. },
  227. };
  228. return {
  229. maxBitrate,
  230. maxFramerate,
  231. resolutionRatio,
  232. videoContentHint,
  233. audioContentHint,
  234. allMediaTypeList,
  235. };
  236. };