@sigmaott/base-next 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (733) hide show
  1. package/README.md +1 -0
  2. package/hyrd-ui.preset.ts +463 -0
  3. package/i18n.config.ts +3 -0
  4. package/locales/en.yaml +719 -0
  5. package/locales/vi.yaml +726 -0
  6. package/nuxt-config.ts +23 -0
  7. package/nuxt.config.ts +267 -0
  8. package/package.json +119 -0
  9. package/public/routes.json +34 -0
  10. package/src/MediaInfoModule.wasm +0 -0
  11. package/src/api/api.ts +15 -0
  12. package/src/api/axios.ts +125 -0
  13. package/src/api/service-loading.ts +50 -0
  14. package/src/api-client-auth/.openapi-generator/FILES +83 -0
  15. package/src/api-client-auth/.openapi-generator/VERSION +1 -0
  16. package/src/api-client-auth/.openapi-generator-ignore +23 -0
  17. package/src/api-client-auth/api/admin-groups-api.ts +612 -0
  18. package/src/api-client-auth/api/admin-members-api.ts +708 -0
  19. package/src/api-client-auth/api/administration-api-groups-api.ts +547 -0
  20. package/src/api-client-auth/api/administration-apps-api.ts +709 -0
  21. package/src/api-client-auth/api/administration-packages-api.ts +547 -0
  22. package/src/api-client-auth/api/api-groups-api.ts +296 -0
  23. package/src/api-client-auth/api/apps-api.ts +1613 -0
  24. package/src/api-client-auth/api/basic-credential-api.ts +950 -0
  25. package/src/api-client-auth/api/groups-api.ts +702 -0
  26. package/src/api-client-auth/api/members-api.ts +708 -0
  27. package/src/api-client-auth/api/members-on-premise-api.ts +351 -0
  28. package/src/api-client-auth/api/packages-api.ts +296 -0
  29. package/src/api-client-auth/api/users-api.ts +1387 -0
  30. package/src/api-client-auth/api.ts +30 -0
  31. package/src/api-client-auth/base.ts +72 -0
  32. package/src/api-client-auth/common.ts +150 -0
  33. package/src/api-client-auth/configuration.ts +101 -0
  34. package/src/api-client-auth/git_push.sh +57 -0
  35. package/src/api-client-auth/index.ts +18 -0
  36. package/src/api-client-auth/models/add-member-dto.ts +42 -0
  37. package/src/api-client-auth/models/admin-permission.ts +44 -0
  38. package/src/api-client-auth/models/api-group-collection.ts +57 -0
  39. package/src/api-client-auth/models/api-group.ts +80 -0
  40. package/src/api-client-auth/models/api.ts +44 -0
  41. package/src/api-client-auth/models/app-collection.ts +57 -0
  42. package/src/api-client-auth/models/app.ts +147 -0
  43. package/src/api-client-auth/models/backdoor-cred.ts +39 -0
  44. package/src/api-client-auth/models/basic-cred-collection.ts +57 -0
  45. package/src/api-client-auth/models/basic-cred.ts +83 -0
  46. package/src/api-client-auth/models/change-password-dto.ts +42 -0
  47. package/src/api-client-auth/models/create-admin-group-dto.ts +39 -0
  48. package/src/api-client-auth/models/create-api-group-dto.ts +42 -0
  49. package/src/api-client-auth/models/create-app-by-user-dto.ts +36 -0
  50. package/src/api-client-auth/models/create-app-dto.ts +65 -0
  51. package/src/api-client-auth/models/create-basic-cred-dto.ts +39 -0
  52. package/src/api-client-auth/models/create-group-dto.ts +39 -0
  53. package/src/api-client-auth/models/create-package-dto.ts +48 -0
  54. package/src/api-client-auth/models/create-user-dto.ts +60 -0
  55. package/src/api-client-auth/models/free-trial.ts +54 -0
  56. package/src/api-client-auth/models/general-app.ts +48 -0
  57. package/src/api-client-auth/models/generate-app-id.ts +30 -0
  58. package/src/api-client-auth/models/group-collection.ts +57 -0
  59. package/src/api-client-auth/models/group.ts +75 -0
  60. package/src/api-client-auth/models/index.ts +60 -0
  61. package/src/api-client-auth/models/invite-email-dto.ts +30 -0
  62. package/src/api-client-auth/models/invite-member-dto.ts +36 -0
  63. package/src/api-client-auth/models/live-stream-quota.ts +42 -0
  64. package/src/api-client-auth/models/login-dto.ts +36 -0
  65. package/src/api-client-auth/models/login-result.ts +39 -0
  66. package/src/api-client-auth/models/member-collection.ts +57 -0
  67. package/src/api-client-auth/models/member.ts +92 -0
  68. package/src/api-client-auth/models/package-collection.ts +57 -0
  69. package/src/api-client-auth/models/package-permission.ts +44 -0
  70. package/src/api-client-auth/models/package.ts +66 -0
  71. package/src/api-client-auth/models/permission.ts +44 -0
  72. package/src/api-client-auth/models/quota.ts +45 -0
  73. package/src/api-client-auth/models/re-get-password-dto.ts +30 -0
  74. package/src/api-client-auth/models/register-dto.ts +54 -0
  75. package/src/api-client-auth/models/register-through-email-dto.ts +36 -0
  76. package/src/api-client-auth/models/rename-app-dto.ts +30 -0
  77. package/src/api-client-auth/models/resend-confirmation-dto.ts +30 -0
  78. package/src/api-client-auth/models/resend-invitation-dto.ts +30 -0
  79. package/src/api-client-auth/models/resend-result.ts +36 -0
  80. package/src/api-client-auth/models/reset-password-dto.ts +36 -0
  81. package/src/api-client-auth/models/revoke-basic-dto.ts +38 -0
  82. package/src/api-client-auth/models/signup-result.ts +45 -0
  83. package/src/api-client-auth/models/token-check-result.ts +36 -0
  84. package/src/api-client-auth/models/trial-remaining-days.ts +42 -0
  85. package/src/api-client-auth/models/update-admin-group-dto.ts +39 -0
  86. package/src/api-client-auth/models/update-api-group-dto.ts +30 -0
  87. package/src/api-client-auth/models/update-app-by-admin-dto.ts +48 -0
  88. package/src/api-client-auth/models/update-app-by-user-dto.ts +36 -0
  89. package/src/api-client-auth/models/update-basic-cred-dto.ts +30 -0
  90. package/src/api-client-auth/models/update-group-dto.ts +39 -0
  91. package/src/api-client-auth/models/update-member-dto.ts +30 -0
  92. package/src/api-client-auth/models/update-package-dto.ts +42 -0
  93. package/src/api-client-auth/models/update-password-member-dto.ts +30 -0
  94. package/src/api-client-auth/models/update-user-by-user-dto.ts +48 -0
  95. package/src/api-client-auth/models/user.ts +120 -0
  96. package/src/api-client-auth/models/validate-app-id.ts +36 -0
  97. package/src/api-client-billing/.openapi-generator/FILES +38 -0
  98. package/src/api-client-billing/.openapi-generator/VERSION +1 -0
  99. package/src/api-client-billing/.openapi-generator-ignore +23 -0
  100. package/src/api-client-billing/api/invoice-api.ts +363 -0
  101. package/src/api-client-billing/api/payment-methods-api.ts +414 -0
  102. package/src/api-client-billing/api/payment-plan-api.ts +121 -0
  103. package/src/api-client-billing/api/subscriptions-api.ts +121 -0
  104. package/src/api-client-billing/api/usages-api.ts +121 -0
  105. package/src/api-client-billing/api/vnpay-provider-api.ts +327 -0
  106. package/src/api-client-billing/api.ts +23 -0
  107. package/src/api-client-billing/base.ts +72 -0
  108. package/src/api-client-billing/common.ts +150 -0
  109. package/src/api-client-billing/configuration.ts +101 -0
  110. package/src/api-client-billing/git_push.sh +57 -0
  111. package/src/api-client-billing/index.ts +18 -0
  112. package/src/api-client-billing/models/common-paginate-response.ts +48 -0
  113. package/src/api-client-billing/models/dto-billing-item-info.ts +60 -0
  114. package/src/api-client-billing/models/dto-billing-item.ts +36 -0
  115. package/src/api-client-billing/models/dto-create-draft-invoice-request.ts +33 -0
  116. package/src/api-client-billing/models/dto-create-draft-invoice-response.ts +57 -0
  117. package/src/api-client-billing/models/dto-create-vnpay-card-form.ts +48 -0
  118. package/src/api-client-billing/models/dto-return-uri-response.ts +30 -0
  119. package/src/api-client-billing/models/index.ts +22 -0
  120. package/src/api-client-billing/models/invoices-get200-response.ts +42 -0
  121. package/src/api-client-billing/models/model-charge.ts +47 -0
  122. package/src/api-client-billing/models/model-charges-usage.ts +57 -0
  123. package/src/api-client-billing/models/model-graduated-range.ts +48 -0
  124. package/src/api-client-billing/models/model-info.ts +42 -0
  125. package/src/api-client-billing/models/model-invoice.ts +105 -0
  126. package/src/api-client-billing/models/model-item-usage.ts +54 -0
  127. package/src/api-client-billing/models/model-payment-method.ts +135 -0
  128. package/src/api-client-billing/models/model-product.ts +51 -0
  129. package/src/api-client-billing/models/model-properties.ts +39 -0
  130. package/src/api-client-billing/models/model-quota.ts +48 -0
  131. package/src/api-client-billing/models/model-subscription.ts +51 -0
  132. package/src/api-client-billing/models/model-usage-payment.ts +87 -0
  133. package/src/api-client-billing/models/payment-methods-get200-response.ts +42 -0
  134. package/src/api-client-billing/models/subscriptions-get200-response.ts +42 -0
  135. package/src/api-client-machine/.openapi-generator/FILES +90 -0
  136. package/src/api-client-machine/.openapi-generator/VERSION +1 -0
  137. package/src/api-client-machine/.openapi-generator-ignore +23 -0
  138. package/src/api-client-machine/api/apps-config-api.ts +523 -0
  139. package/src/api-client-machine/api/component-clusters-api.ts +741 -0
  140. package/src/api-client-machine/api/expose-api.ts +141 -0
  141. package/src/api-client-machine/api/machine-actions-api.ts +850 -0
  142. package/src/api-client-machine/api/machines-api.ts +524 -0
  143. package/src/api-client-machine/api/networks-api.ts +375 -0
  144. package/src/api-client-machine/api/sigma-clusters-api.ts +741 -0
  145. package/src/api-client-machine/api/sigma-machine-actions-api.ts +292 -0
  146. package/src/api-client-machine/api/sigma-machine-apps-configuration-api.ts +523 -0
  147. package/src/api-client-machine/api/sigma-machines-api.ts +557 -0
  148. package/src/api-client-machine/api/sigma-vod-server-api.ts +478 -0
  149. package/src/api-client-machine/api/sigma-vod-server-app-config-api.ts +980 -0
  150. package/src/api-client-machine/api/transcoder-configuration-api.ts +359 -0
  151. package/src/api-client-machine/api.ts +30 -0
  152. package/src/api-client-machine/base.ts +72 -0
  153. package/src/api-client-machine/common.ts +150 -0
  154. package/src/api-client-machine/configuration.ts +101 -0
  155. package/src/api-client-machine/git_push.sh +57 -0
  156. package/src/api-client-machine/index.ts +18 -0
  157. package/src/api-client-machine/models/actions-to-app-dto.ts +38 -0
  158. package/src/api-client-machine/models/add-license-machine-dto.ts +30 -0
  159. package/src/api-client-machine/models/app-status.ts +47 -0
  160. package/src/api-client-machine/models/check-quota-limit-result.ts +36 -0
  161. package/src/api-client-machine/models/cluster-log.ts +54 -0
  162. package/src/api-client-machine/models/component-cluster-collection.ts +57 -0
  163. package/src/api-client-machine/models/component-cluster.ts +116 -0
  164. package/src/api-client-machine/models/create-component-machine-cluster-dto.ts +86 -0
  165. package/src/api-client-machine/models/create-sigma-machine-cluster-dto.ts +77 -0
  166. package/src/api-client-machine/models/create-vodroute-dto.ts +42 -0
  167. package/src/api-client-machine/models/decklink-collection.ts +57 -0
  168. package/src/api-client-machine/models/decklink.ts +42 -0
  169. package/src/api-client-machine/models/http-app.ts +45 -0
  170. package/src/api-client-machine/models/https-config.ts +42 -0
  171. package/src/api-client-machine/models/index.ts +67 -0
  172. package/src/api-client-machine/models/info-channel.ts +42 -0
  173. package/src/api-client-machine/models/ingest-app.ts +60 -0
  174. package/src/api-client-machine/models/ingest-config.ts +74 -0
  175. package/src/api-client-machine/models/ingest-update-config-dto.ts +68 -0
  176. package/src/api-client-machine/models/machine-cluster-collection.ts +57 -0
  177. package/src/api-client-machine/models/machine-cluster.ts +120 -0
  178. package/src/api-client-machine/models/machine-details-license.ts +42 -0
  179. package/src/api-client-machine/models/machine-details.ts +127 -0
  180. package/src/api-client-machine/models/machine-dto.ts +42 -0
  181. package/src/api-client-machine/models/machine-dump.ts +108 -0
  182. package/src/api-client-machine/models/machine.ts +42 -0
  183. package/src/api-client-machine/models/network-collection.ts +57 -0
  184. package/src/api-client-machine/models/network-interface.ts +36 -0
  185. package/src/api-client-machine/models/network.ts +66 -0
  186. package/src/api-client-machine/models/origin-config.ts +50 -0
  187. package/src/api-client-machine/models/origin-update-config-dto.ts +59 -0
  188. package/src/api-client-machine/models/packager-component-cluster.ts +42 -0
  189. package/src/api-client-machine/models/packager-live-cluster.ts +42 -0
  190. package/src/api-client-machine/models/packager-to-component-cluster.ts +51 -0
  191. package/src/api-client-machine/models/quotas-result.ts +30 -0
  192. package/src/api-client-machine/models/registration-config.ts +48 -0
  193. package/src/api-client-machine/models/sigma-cluster-ingest-config.ts +42 -0
  194. package/src/api-client-machine/models/sigma-cluster-origin-config.ts +30 -0
  195. package/src/api-client-machine/models/sigma-ingest-config-entity.ts +42 -0
  196. package/src/api-client-machine/models/sigma-ingest-config.ts +42 -0
  197. package/src/api-client-machine/models/sigma-origin-config-entity.ts +30 -0
  198. package/src/api-client-machine/models/sigma-origin-config.ts +30 -0
  199. package/src/api-client-machine/models/stats.ts +57 -0
  200. package/src/api-client-machine/models/status.ts +36 -0
  201. package/src/api-client-machine/models/stop-channel.ts +48 -0
  202. package/src/api-client-machine/models/transcoder-apps.ts +42 -0
  203. package/src/api-client-machine/models/transcoder-collection.ts +57 -0
  204. package/src/api-client-machine/models/transcoder-component-cluster.ts +42 -0
  205. package/src/api-client-machine/models/transcoder-license.ts +42 -0
  206. package/src/api-client-machine/models/transcoder-live-cluster.ts +42 -0
  207. package/src/api-client-machine/models/transcoder-live-to-component-cluster.ts +45 -0
  208. package/src/api-client-machine/models/transcoder-network.ts +42 -0
  209. package/src/api-client-machine/models/transcoder.ts +276 -0
  210. package/src/api-client-machine/models/update-app-config-dto-config-data.ts +33 -0
  211. package/src/api-client-machine/models/update-app-config-dto.ts +33 -0
  212. package/src/api-client-machine/models/update-app-config-of-sigma-vod-server-dto-config-data.ts +30 -0
  213. package/src/api-client-machine/models/update-app-config-of-sigma-vod-server-dto.ts +33 -0
  214. package/src/api-client-machine/models/update-component-cluster-dto.ts +72 -0
  215. package/src/api-client-machine/models/update-machine-cluster-dto.ts +63 -0
  216. package/src/api-client-machine/models/update-machine-dto.ts +42 -0
  217. package/src/api-client-machine/models/update-packager-live-cluster.ts +42 -0
  218. package/src/api-client-machine/models/update-packager-to-component-cluster.ts +51 -0
  219. package/src/api-client-machine/models/update-route-config-of-sigma-vod-server.ts +33 -0
  220. package/src/api-client-machine/models/update-route-config-sigma-machine.ts +42 -0
  221. package/src/api-client-machine/models/update-transcoder-live-cluster.ts +42 -0
  222. package/src/api-client-machine/models/update-transcoder-to-component-cluster.ts +45 -0
  223. package/src/api-client-machine/models/video-encoder.ts +56 -0
  224. package/src/api-client-machine/models/vodroute.ts +60 -0
  225. package/src/api-client-noti/.openapi-generator/FILES +13 -0
  226. package/src/api-client-noti/.openapi-generator/VERSION +1 -0
  227. package/src/api-client-noti/.openapi-generator-ignore +23 -0
  228. package/src/api-client-noti/api/notification-api.ts +386 -0
  229. package/src/api-client-noti/api.ts +18 -0
  230. package/src/api-client-noti/base.ts +72 -0
  231. package/src/api-client-noti/common.ts +150 -0
  232. package/src/api-client-noti/configuration.ts +101 -0
  233. package/src/api-client-noti/git_push.sh +57 -0
  234. package/src/api-client-noti/index.ts +18 -0
  235. package/src/api-client-noti/models/index.ts +2 -0
  236. package/src/api-client-noti/models/notification-collection.ts +57 -0
  237. package/src/api-client-noti/models/notification.ts +101 -0
  238. package/src/api-client-transcode/.openapi-generator/FILES +129 -0
  239. package/src/api-client-transcode/.openapi-generator/VERSION +1 -0
  240. package/src/api-client-transcode/.openapi-generator-ignore +23 -0
  241. package/src/api-client-transcode/api/alert-logs-apiapi.ts +281 -0
  242. package/src/api-client-transcode/api/channel-package-inputs-apiapi.ts +650 -0
  243. package/src/api-client-transcode/api/channel-transcode-inputs-apiapi.ts +650 -0
  244. package/src/api-client-transcode/api/channels-crudapiapi.ts +869 -0
  245. package/src/api-client-transcode/api/channels-job-action-apiapi.ts +434 -0
  246. package/src/api-client-transcode/api/drm-credentials-api.ts +525 -0
  247. package/src/api-client-transcode/api/event-channel-action-apiapi.ts +363 -0
  248. package/src/api-client-transcode/api/event-channel-crudapiapi.ts +545 -0
  249. package/src/api-client-transcode/api/fast-channel-action-apiapi.ts +301 -0
  250. package/src/api-client-transcode/api/fast-channel-apiapi.ts +525 -0
  251. package/src/api-client-transcode/api/fast-channel-programs-api-api.ts +525 -0
  252. package/src/api-client-transcode/api/multi-channel-action-apiapi.ts +387 -0
  253. package/src/api-client-transcode/api/sigma-transcode-live-interactive-action-api.ts +152 -0
  254. package/src/api-client-transcode/api/single-channel-action-apiapi.ts +1155 -0
  255. package/src/api-client-transcode/api/transcode-templates-apiapi.ts +541 -0
  256. package/src/api-client-transcode/api.ts +32 -0
  257. package/src/api-client-transcode/base.ts +71 -0
  258. package/src/api-client-transcode/common.ts +138 -0
  259. package/src/api-client-transcode/configuration.ts +101 -0
  260. package/src/api-client-transcode/git_push.sh +57 -0
  261. package/src/api-client-transcode/index.ts +18 -0
  262. package/src/api-client-transcode/models/ads-dto.ts +137 -0
  263. package/src/api-client-transcode/models/alert-log-collection.ts +55 -0
  264. package/src/api-client-transcode/models/audio-watermark-dto.ts +59 -0
  265. package/src/api-client-transcode/models/blackout-slate-dto.ts +36 -0
  266. package/src/api-client-transcode/models/catchup-dto.ts +43 -0
  267. package/src/api-client-transcode/models/channel-collection.ts +55 -0
  268. package/src/api-client-transcode/models/channel-config-advance-dto-info.ts +25 -0
  269. package/src/api-client-transcode/models/channel-config-advance-dto.ts +121 -0
  270. package/src/api-client-transcode/models/channel-config-advance-info-dto.ts +78 -0
  271. package/src/api-client-transcode/models/channel-config-base.ts +69 -0
  272. package/src/api-client-transcode/models/channel-config-blackout-entity.ts +36 -0
  273. package/src/api-client-transcode/models/channel-config-dto.ts +72 -0
  274. package/src/api-client-transcode/models/channel-config-interactive-entity.ts +30 -0
  275. package/src/api-client-transcode/models/channel-config-template-dto.ts +66 -0
  276. package/src/api-client-transcode/models/channel-detail-catchup-dto.ts +37 -0
  277. package/src/api-client-transcode/models/channel-detail-dto.ts +69 -0
  278. package/src/api-client-transcode/models/channel-detail-input.ts +43 -0
  279. package/src/api-client-transcode/models/channel-detail-package.ts +50 -0
  280. package/src/api-client-transcode/models/channel-detail-transcode.ts +37 -0
  281. package/src/api-client-transcode/models/channel-job-detail.ts +84 -0
  282. package/src/api-client-transcode/models/channel-stats.ts +36 -0
  283. package/src/api-client-transcode/models/channel-template-data-dto.ts +59 -0
  284. package/src/api-client-transcode/models/channel-template-dto-data.ts +28 -0
  285. package/src/api-client-transcode/models/channel-template-dto.ts +63 -0
  286. package/src/api-client-transcode/models/channel.ts +168 -0
  287. package/src/api-client-transcode/models/create-alert-log-dto.ts +138 -0
  288. package/src/api-client-transcode/models/create-channel-dto.ts +84 -0
  289. package/src/api-client-transcode/models/create-drm-credential-dto.ts +63 -0
  290. package/src/api-client-transcode/models/create-event-channel-dto-targets.ts +26 -0
  291. package/src/api-client-transcode/models/create-event-channel-dto.ts +76 -0
  292. package/src/api-client-transcode/models/create-fast-channel-dto.ts +42 -0
  293. package/src/api-client-transcode/models/create-fast-program-dto.ts +72 -0
  294. package/src/api-client-transcode/models/drm-credential-collection.ts +55 -0
  295. package/src/api-client-transcode/models/drm-credential-entity.ts +87 -0
  296. package/src/api-client-transcode/models/drm-data-dto.ts +54 -0
  297. package/src/api-client-transcode/models/drm-data-entity.ts +54 -0
  298. package/src/api-client-transcode/models/drm-dto.ts +103 -0
  299. package/src/api-client-transcode/models/event-channel-collection.ts +55 -0
  300. package/src/api-client-transcode/models/event-channel-config-dto.ts +78 -0
  301. package/src/api-client-transcode/models/event-channel-config-entity.ts +75 -0
  302. package/src/api-client-transcode/models/event-channel-input-dto.ts +45 -0
  303. package/src/api-client-transcode/models/event-channel-input-entity.ts +45 -0
  304. package/src/api-client-transcode/models/event-channel-transcoder-dto.ts +56 -0
  305. package/src/api-client-transcode/models/event-channel.ts +147 -0
  306. package/src/api-client-transcode/models/event-profile-dto.ts +62 -0
  307. package/src/api-client-transcode/models/event-target-data-dto.ts +95 -0
  308. package/src/api-client-transcode/models/event-target-dto.ts +49 -0
  309. package/src/api-client-transcode/models/fast-channel-collection.ts +55 -0
  310. package/src/api-client-transcode/models/fast-channel.ts +75 -0
  311. package/src/api-client-transcode/models/fast-program-collection.ts +55 -0
  312. package/src/api-client-transcode/models/fast-program.ts +84 -0
  313. package/src/api-client-transcode/models/fingerprint-dto.ts +42 -0
  314. package/src/api-client-transcode/models/index.ts +104 -0
  315. package/src/api-client-transcode/models/input-collection.ts +55 -0
  316. package/src/api-client-transcode/models/input-data-dto.ts +104 -0
  317. package/src/api-client-transcode/models/input-data-item-dto.ts +42 -0
  318. package/src/api-client-transcode/models/input-dto.ts +30 -0
  319. package/src/api-client-transcode/models/input-entity.ts +30 -0
  320. package/src/api-client-transcode/models/input-info-response.ts +31 -0
  321. package/src/api-client-transcode/models/input-info.ts +123 -0
  322. package/src/api-client-transcode/models/input-machine-config.ts +45 -0
  323. package/src/api-client-transcode/models/input-program.ts +66 -0
  324. package/src/api-client-transcode/models/interactive-dto.ts +30 -0
  325. package/src/api-client-transcode/models/interactive-publish-dto.ts +30 -0
  326. package/src/api-client-transcode/models/job-entity.ts +102 -0
  327. package/src/api-client-transcode/models/low-latency-dto.ts +68 -0
  328. package/src/api-client-transcode/models/machine-config-dto.ts +75 -0
  329. package/src/api-client-transcode/models/main-input-dto.ts +62 -0
  330. package/src/api-client-transcode/models/main-input-entity.ts +54 -0
  331. package/src/api-client-transcode/models/maintenance-dto.ts +30 -0
  332. package/src/api-client-transcode/models/manifest-dto.ts +62 -0
  333. package/src/api-client-transcode/models/package-input-collection.ts +55 -0
  334. package/src/api-client-transcode/models/package-input-data-dto.ts +99 -0
  335. package/src/api-client-transcode/models/package-input-list.ts +36 -0
  336. package/src/api-client-transcode/models/package-input.ts +115 -0
  337. package/src/api-client-transcode/models/post-input-dto.ts +48 -0
  338. package/src/api-client-transcode/models/post-input-entity.ts +48 -0
  339. package/src/api-client-transcode/models/pre-input-dto.ts +54 -0
  340. package/src/api-client-transcode/models/pre-input-entity.ts +54 -0
  341. package/src/api-client-transcode/models/preset-dto.ts +247 -0
  342. package/src/api-client-transcode/models/profile-default-response-dto.ts +30 -0
  343. package/src/api-client-transcode/models/profile-dto.ts +62 -0
  344. package/src/api-client-transcode/models/profile-entity.ts +60 -0
  345. package/src/api-client-transcode/models/scte35-dto.ts +36 -0
  346. package/src/api-client-transcode/models/start-over-dto.ts +30 -0
  347. package/src/api-client-transcode/models/switch-input-dto.ts +56 -0
  348. package/src/api-client-transcode/models/switch-input-entity.ts +44 -0
  349. package/src/api-client-transcode/models/target-data-dto.ts +101 -0
  350. package/src/api-client-transcode/models/target-dto.ts +44 -0
  351. package/src/api-client-transcode/models/target-entity.ts +55 -0
  352. package/src/api-client-transcode/models/target-profile-dto.ts +71 -0
  353. package/src/api-client-transcode/models/target-profile.ts +71 -0
  354. package/src/api-client-transcode/models/target-template-dto.ts +44 -0
  355. package/src/api-client-transcode/models/target-update-dto.ts +50 -0
  356. package/src/api-client-transcode/models/transcode-input.ts +144 -0
  357. package/src/api-client-transcode/models/transcoder.ts +36 -0
  358. package/src/api-client-transcode/models/trick-play-dto.ts +54 -0
  359. package/src/api-client-transcode/models/update-channel-dto-targets.ts +27 -0
  360. package/src/api-client-transcode/models/update-channel-dto.ts +84 -0
  361. package/src/api-client-transcode/models/update-drm-management-dto.ts +63 -0
  362. package/src/api-client-transcode/models/update-event-channel-dto.ts +76 -0
  363. package/src/api-client-transcode/models/update-fast-channel-dto.ts +42 -0
  364. package/src/api-client-transcode/models/update-fast-program-dto.ts +30 -0
  365. package/src/api-client-transcode/models/watermark-dto.ts +66 -0
  366. package/src/api-client-transcode/models/watermark-entity.ts +102 -0
  367. package/src/app/spa-loading-template.html +127 -0
  368. package/src/app.config.ts +2 -0
  369. package/src/assets/global.css.ts +3 -0
  370. package/src/assets/scss/element/dark.scss +13 -0
  371. package/src/assets/scss/element/index.scss +26 -0
  372. package/src/assets/scss/index.scss +181 -0
  373. package/src/components/AdvancedFilter/SSAdvancedFilterItem.vue +180 -0
  374. package/src/components/AdvancedFilter/SSAdvancedFilterItemCustom.vue +165 -0
  375. package/src/components/AdvancedFilter/SSAdvancedFilterItemDefined.vue +298 -0
  376. package/src/components/AdvancedFilter/SSAdvancedFilterItemSchedule.vue +293 -0
  377. package/src/components/AdvancedFilter/SSAdvancedFilterMain.vue +196 -0
  378. package/src/components/AdvancedFilter/types.ts +37 -0
  379. package/src/components/AdvancedFilterReport/SSAdvancedFilterReportItem.vue +110 -0
  380. package/src/components/AdvancedFilterReport/SSAdvancedFilterReportItemDefined.vue +159 -0
  381. package/src/components/AdvancedFilterReport/SSAdvancedFilterReportMain.vue +197 -0
  382. package/src/components/AdvancedFilterReport/types.ts +19 -0
  383. package/src/components/AdvancedFilterSsai/SSAdvancedFilterSsaiItem.vue +102 -0
  384. package/src/components/AdvancedFilterSsai/SSAdvancedFilterSsaiItemDefined.vue +119 -0
  385. package/src/components/AdvancedFilterSsai/SSAdvancedFilterSsaiMain.vue +194 -0
  386. package/src/components/AdvancedFilterSsai/types.ts +19 -0
  387. package/src/components/Asset/AssetAddPlaylist.vue +169 -0
  388. package/src/components/Asset/AssetExtra.vue +46 -0
  389. package/src/components/Asset/AssetImportLinks.vue +281 -0
  390. package/src/components/Asset/AssetInfiniteSelect.vue +62 -0
  391. package/src/components/Asset/AssetItem.vue +194 -0
  392. package/src/components/Asset/AssetItemPreview.vue +117 -0
  393. package/src/components/Asset/AssetList.vue +869 -0
  394. package/src/components/Asset/AssetMeta.vue +97 -0
  395. package/src/components/Asset/AssetPicker.vue +204 -0
  396. package/src/components/Asset/AssetPlaylist.vue +414 -0
  397. package/src/components/Asset/AssetPlaylistInfiniteSelect.vue +136 -0
  398. package/src/components/Asset/AssetPlaylistModalAdd.vue +138 -0
  399. package/src/components/Asset/AssetPreview.vue +89 -0
  400. package/src/components/Asset/AssetShareModal.vue +131 -0
  401. package/src/components/Asset/AssetTable.vue +365 -0
  402. package/src/components/Asset/FormUploadAsset.vue +647 -0
  403. package/src/components/Asset/FormUploadAssetItem.vue +115 -0
  404. package/src/components/Asset/FormUploadAssetProgress.vue +161 -0
  405. package/src/components/Asset/Scrubber.vue +57 -0
  406. package/src/components/Asset/VideoPlayer.vue +226 -0
  407. package/src/components/Asset/VideoPreview.vue +102 -0
  408. package/src/components/Asset/VideoPreviewConfig.vue +329 -0
  409. package/src/components/Asset/VideoPreviewConfigMessage.vue +120 -0
  410. package/src/components/Asset/VideoPreviewConfigVod.vue +287 -0
  411. package/src/components/Asset/VideoPreviewNew.vue +66 -0
  412. package/src/components/Asset/VideoPreviewNewLoader.vue +144 -0
  413. package/src/components/Asset/VideoPreviewWrapper.vue +208 -0
  414. package/src/components/Asset/asset-context.ts +24 -0
  415. package/src/components/Asset/usePickerStore.ts +55 -0
  416. package/src/components/AuthLayout/AuthLayoutSimple.vue +150 -0
  417. package/src/components/AuthLayout/index.vue +151 -0
  418. package/src/components/AutoRefresh/AutoRefresh.vue +91 -0
  419. package/src/components/AutoRefresh/AutoRefreshOld.vue +87 -0
  420. package/src/components/AutoRefresh/useRefresh.ts +93 -0
  421. package/src/components/BackButton.vue +13 -0
  422. package/src/components/Card/CardInfo.vue +21 -0
  423. package/src/components/Channel/AIConfig.vue +101 -0
  424. package/src/components/Channel/AdvancedForm.vue +542 -0
  425. package/src/components/Channel/ChannelListGrid.vue +154 -0
  426. package/src/components/Channel/ConfigBlackout.vue +98 -0
  427. package/src/components/Channel/ConfigCensorship.vue +387 -0
  428. package/src/components/Channel/ConfigForensicWatermark.vue +152 -0
  429. package/src/components/Channel/ConfigForm.vue +102 -0
  430. package/src/components/Channel/ConfigInformation.vue +191 -0
  431. package/src/components/Channel/ConfigInteraction.vue +11 -0
  432. package/src/components/Channel/ConfigNameModifier.vue +15 -0
  433. package/src/components/Channel/ConfigOptionItem.vue +114 -0
  434. package/src/components/Channel/ConfigOptions.vue +181 -0
  435. package/src/components/Channel/ConfigPte.vue +368 -0
  436. package/src/components/Channel/ConfigScte.vue +442 -0
  437. package/src/components/Channel/ConfigTranscoder.vue +353 -0
  438. package/src/components/Channel/ConfigWaterMarkAudio.vue +52 -0
  439. package/src/components/Channel/ConfigWatermark.vue +76 -0
  440. package/src/components/Channel/ConfigWatermarkEventChannel.vue +86 -0
  441. package/src/components/Channel/ConfigWatermarkItem.vue +239 -0
  442. package/src/components/Channel/HeaderItem.vue +75 -0
  443. package/src/components/Channel/InputDetail.vue +68 -0
  444. package/src/components/Channel/InputForm.vue +175 -0
  445. package/src/components/Channel/InputList.vue +38 -0
  446. package/src/components/Channel/InputPackageDetail.vue +125 -0
  447. package/src/components/Channel/MediaProfileFormModal.vue +79 -0
  448. package/src/components/Channel/MediaProfileModify.vue +229 -0
  449. package/src/components/Channel/MessageButtonGetHelp.vue +30 -0
  450. package/src/components/Channel/MessageTooltipAi.vue +29 -0
  451. package/src/components/Channel/MultipleSelectProfile.vue +312 -0
  452. package/src/components/Channel/PackageInputItem.vue +13 -0
  453. package/src/components/Channel/PresetConfigItem.vue +1957 -0
  454. package/src/components/Channel/PresetConfigItemExtra.vue +59 -0
  455. package/src/components/Channel/PresetConfigItemPId.vue +145 -0
  456. package/src/components/Channel/ProfileConfigItem.vue +829 -0
  457. package/src/components/Channel/ProfileDetailsList.vue +160 -0
  458. package/src/components/Channel/ProfileForm.vue +134 -0
  459. package/src/components/Channel/ProfileList.vue +228 -0
  460. package/src/components/Channel/SelectServer.vue +134 -0
  461. package/src/components/Channel/SignalLoss.vue +92 -0
  462. package/src/components/Channel/SwitchInputButton.vue +38 -0
  463. package/src/components/Channel/TargetCatchup.vue +75 -0
  464. package/src/components/Channel/TargetDataInfo.vue +100 -0
  465. package/src/components/Channel/TargetDestination.vue +375 -0
  466. package/src/components/Channel/TargetDrm.vue +518 -0
  467. package/src/components/Channel/TargetForm.vue +136 -0
  468. package/src/components/Channel/TargetList.vue +159 -0
  469. package/src/components/Channel/TargetLowLatency.vue +107 -0
  470. package/src/components/Channel/TargetMabrOutput.vue +58 -0
  471. package/src/components/Channel/TargetMabrOutputItem.vue +91 -0
  472. package/src/components/Channel/TargetManifest.vue +94 -0
  473. package/src/components/Channel/TargetNetworkInterface.vue +95 -0
  474. package/src/components/Channel/TargetOutputMultiplex.vue +237 -0
  475. package/src/components/Channel/TargetOutputType.vue +201 -0
  476. package/src/components/Channel/TargetOutputUdp.vue +200 -0
  477. package/src/components/Channel/TargetPreset.vue +541 -0
  478. package/src/components/Channel/TargetProfileAudioGroup.vue +27 -0
  479. package/src/components/Channel/TargetProfileProgram.vue +43 -0
  480. package/src/components/Channel/TargetProfileURI.vue +68 -0
  481. package/src/components/Channel/TargetSrtOutput.vue +35 -0
  482. package/src/components/Channel/TargetSrtOutputItem.vue +83 -0
  483. package/src/components/Channel/TargetStartover.vue +40 -0
  484. package/src/components/Channel/WarningName.vue +39 -0
  485. package/src/components/Channel/WarningOutput.vue +40 -0
  486. package/src/components/CollapseTagsTooltip/CollapseTagsTooltip.vue +87 -0
  487. package/src/components/CollapseTagsTooltip/index.ts +1 -0
  488. package/src/components/CopyButton.vue +46 -0
  489. package/src/components/CopyText.vue +40 -0
  490. package/src/components/CopyTextButton.vue +40 -0
  491. package/src/components/DefaultLayout/DefaultLayout.vue +134 -0
  492. package/src/components/DefaultLayout/GlobalASide.vue +75 -0
  493. package/src/components/DefaultLayout/GlobalFooter.vue +15 -0
  494. package/src/components/DefaultLayout/GlobalHeader.vue +43 -0
  495. package/src/components/DefaultLayout/Logo.vue +35 -0
  496. package/src/components/DefaultLayout/Menu.vue +464 -0
  497. package/src/components/DefaultLayout/RightMenu.vue +93 -0
  498. package/src/components/DialogWarningAddLicense.vue +37 -0
  499. package/src/components/Epg/Epg.vue +24 -0
  500. package/src/components/Epg/components/Channel.vue +28 -0
  501. package/src/components/Epg/components/Channels.vue +33 -0
  502. package/src/components/Epg/components/Layout.vue +121 -0
  503. package/src/components/Epg/components/Line.vue +41 -0
  504. package/src/components/Epg/components/Loader.vue +23 -0
  505. package/src/components/Epg/components/Program.vue +101 -0
  506. package/src/components/Epg/components/SideBar.vue +18 -0
  507. package/src/components/Epg/components/Timeline.vue +72 -0
  508. package/src/components/Epg/helpers/common.ts +68 -0
  509. package/src/components/Epg/helpers/epg.ts +192 -0
  510. package/src/components/Epg/helpers/index.ts +5 -0
  511. package/src/components/Epg/helpers/interfaces.ts +54 -0
  512. package/src/components/Epg/helpers/time.ts +51 -0
  513. package/src/components/Epg/helpers/types.ts +26 -0
  514. package/src/components/Epg/helpers/variables.ts +33 -0
  515. package/src/components/Epg/hooks/index.ts +2 -0
  516. package/src/components/Epg/hooks/useEpg.ts +160 -0
  517. package/src/components/Epg/hooks/useLayout.ts +187 -0
  518. package/src/components/Epg/hooks/useProgram.ts +63 -0
  519. package/src/components/Epg/hooks/useTimeline.ts +35 -0
  520. package/src/components/Epg/index.ts +4 -0
  521. package/src/components/Epg/store.ts +85 -0
  522. package/src/components/Epg/theme.ts +44 -0
  523. package/src/components/Exception/403.png +0 -0
  524. package/src/components/Exception/403.vue +58 -0
  525. package/src/components/Exception/404.png +0 -0
  526. package/src/components/Exception/404.vue +59 -0
  527. package/src/components/Exception/500.png +0 -0
  528. package/src/components/Exception/500.vue +39 -0
  529. package/src/components/Exception/index.scss +30 -0
  530. package/src/components/Field.vue +193 -0
  531. package/src/components/FilterQuerySchema/FilterQuerySchemaForm.vue +200 -0
  532. package/src/components/FilterQuerySchema/QueryTag.vue +109 -0
  533. package/src/components/FilterQuerySchema/Tag.vue +68 -0
  534. package/src/components/FilterTimeDimensions.vue +265 -0
  535. package/src/components/FilterTimeDimensionsSingle.vue +214 -0
  536. package/src/components/HelpPanel.vue +87 -0
  537. package/src/components/HexagonPro.vue +7 -0
  538. package/src/components/IconCopyButton.vue +43 -0
  539. package/src/components/InformationLabel.vue +67 -0
  540. package/src/components/Input/InputTags.vue +136 -0
  541. package/src/components/Input/index.ts +1 -0
  542. package/src/components/MainDefaultLayout/index.vue +120 -0
  543. package/src/components/NoticeAddLicense.vue +20 -0
  544. package/src/components/NoticeRunningOutResources.vue +20 -0
  545. package/src/components/Pagination.vue +61 -0
  546. package/src/components/QueryBuilder/QueryBuilder.vue +141 -0
  547. package/src/components/QueryBuilder/components/inputs/DateInputField.vue +105 -0
  548. package/src/components/QueryBuilder/components/inputs/FieldSelect.vue +44 -0
  549. package/src/components/QueryBuilder/components/inputs/InputMultiSelect.vue +60 -0
  550. package/src/components/QueryBuilder/components/inputs/InputSelect.vue +39 -0
  551. package/src/components/QueryBuilder/components/inputs/NumberInputField.vue +91 -0
  552. package/src/components/QueryBuilder/components/inputs/OperatorSelect.vue +59 -0
  553. package/src/components/QueryBuilder/components/inputs/TextInput.vue +40 -0
  554. package/src/components/QueryBuilder/components/inputs/TimeInputField.vue +114 -0
  555. package/src/components/QueryBuilder/components/inputs/logics.ts +27 -0
  556. package/src/components/QueryBuilder/components/item/InputMultiOptions.vue +56 -0
  557. package/src/components/QueryBuilder/components/item/QueryGroup.vue +71 -0
  558. package/src/components/QueryBuilder/components/item/QueryGroupActions.vue +76 -0
  559. package/src/components/QueryBuilder/components/item/QueryRule.vue +233 -0
  560. package/src/components/QueryBuilder/useConfigStore.ts +27 -0
  561. package/src/components/QueryBuilder/utils/config.ts +194 -0
  562. package/src/components/QueryBuilder/utils/index.ts +3 -0
  563. package/src/components/QueryBuilder/utils/mongodb.ts +175 -0
  564. package/src/components/QueryBuilder/utils/rules.ts +213 -0
  565. package/src/components/RecommendedConfigurationPTE.vue +238 -0
  566. package/src/components/Server/MachineConfig.vue +333 -0
  567. package/src/components/Server/ServerConfig.vue +599 -0
  568. package/src/components/Server/useQueryMachine.ts +380 -0
  569. package/src/components/Server/validator.ts +13 -0
  570. package/src/components/SwitchDark.vue +19 -0
  571. package/src/components/SwitchLang.vue +31 -0
  572. package/src/components/TableEmpty.vue +50 -0
  573. package/src/components/Toast/ToastNoti.vue +52 -0
  574. package/src/components/Tool/ForensicWatermarkingDialog.vue +39 -0
  575. package/src/components/Tool/FormRecord.vue +162 -0
  576. package/src/components/Tool/FormUpload.vue +118 -0
  577. package/src/components/Tool/ResultChecking.vue +103 -0
  578. package/src/components/Tool/Watermarking.vue +159 -0
  579. package/src/components/Tool/record.js +92 -0
  580. package/src/components/Tooltip/Ellipsis.vue +52 -0
  581. package/src/components/Tooltip/index.vue +47 -0
  582. package/src/components/app/AppList.vue +50 -0
  583. package/src/components/button/Button.vue +27 -0
  584. package/src/components/button/index.ts +37 -0
  585. package/src/components/context-menu/ContextMenu.vue +15 -0
  586. package/src/components/context-menu/ContextMenuCheckboxItem.vue +39 -0
  587. package/src/components/context-menu/ContextMenuContent.vue +35 -0
  588. package/src/components/context-menu/ContextMenuGroup.vue +11 -0
  589. package/src/components/context-menu/ContextMenuItem.vue +33 -0
  590. package/src/components/context-menu/ContextMenuLabel.vue +24 -0
  591. package/src/components/context-menu/ContextMenuPortal.vue +11 -0
  592. package/src/components/context-menu/ContextMenuRadioGroup.vue +19 -0
  593. package/src/components/context-menu/ContextMenuRadioItem.vue +39 -0
  594. package/src/components/context-menu/ContextMenuSeparator.vue +19 -0
  595. package/src/components/context-menu/ContextMenuShortcut.vue +13 -0
  596. package/src/components/context-menu/ContextMenuSub.vue +19 -0
  597. package/src/components/context-menu/ContextMenuSubContent.vue +34 -0
  598. package/src/components/context-menu/ContextMenuSubTrigger.vue +33 -0
  599. package/src/components/context-menu/ContextMenuTrigger.vue +13 -0
  600. package/src/components/context-menu/index.ts +14 -0
  601. package/src/components/dashboard/SSDashboardChartRoot.vue +18 -0
  602. package/src/components/dashboard/SSDashboardDocument.vue +45 -0
  603. package/src/components/dashboard/SSDashboardEmpty.vue +16 -0
  604. package/src/components/dashboard/SSDashboardGuideline.vue +45 -0
  605. package/src/components/dashboard/SSDashboardInfo.vue +36 -0
  606. package/src/components/dashboard/SSDashboardInfoRoot.vue +9 -0
  607. package/src/components/dashboard/SSDashboardInfoTime.vue +38 -0
  608. package/src/components/markdown/Markdown.vue +295 -0
  609. package/src/components/tabs/Tabs.vue +15 -0
  610. package/src/components/tabs/TabsContent.vue +22 -0
  611. package/src/components/tabs/TabsList.vue +22 -0
  612. package/src/components/tabs/TabsTrigger.vue +26 -0
  613. package/src/composables/asset.ts +13 -0
  614. package/src/composables/channel.ts +333 -0
  615. package/src/composables/country.ts +788 -0
  616. package/src/composables/error.ts +24 -0
  617. package/src/composables/form.ts +351 -0
  618. package/src/composables/getBuildTime.ts +7 -0
  619. package/src/composables/micro.ts +113 -0
  620. package/src/composables/microState.ts +22 -0
  621. package/src/composables/notiGlobal.ts +19 -0
  622. package/src/composables/plan.ts +162 -0
  623. package/src/composables/refReset.ts +12 -0
  624. package/src/composables/resetInfiniteQueryPagination.ts +18 -0
  625. package/src/composables/route.ts +19 -0
  626. package/src/composables/toast.ts +21 -0
  627. package/src/composables/useApp.ts +6 -0
  628. package/src/composables/useAsyncSchema.ts +58 -0
  629. package/src/composables/useChannelActions.ts +151 -0
  630. package/src/composables/useComplexSearchParam.ts +293 -0
  631. package/src/composables/useFilterSchema.ts +106 -0
  632. package/src/composables/useGetInputDetail.ts +36 -0
  633. package/src/composables/useGetServerAddLicense.ts +21 -0
  634. package/src/composables/useJobPreview.ts +438 -0
  635. package/src/composables/useLayoutStore.ts +106 -0
  636. package/src/composables/usePermission.ts +5 -0
  637. package/src/composables/usePickerStore.ts +53 -0
  638. package/src/composables/useQueryAssets.ts +56 -0
  639. package/src/composables/useQueryParams.ts +20 -0
  640. package/src/composables/useRouteParams.ts +36 -0
  641. package/src/composables/useRouteQueries.ts +54 -0
  642. package/src/composables/useRouterHistory.ts +76 -0
  643. package/src/composables/useSearchQuery.ts +27 -0
  644. package/src/composables/useTooltipEllipsis.ts +12 -0
  645. package/src/constants/env.ts +11 -0
  646. package/src/constants/filterable.ts +32 -0
  647. package/src/constants/languageCode.ts +185 -0
  648. package/src/constants/micro.ts +1 -0
  649. package/src/constants/queryKeys.ts +11 -0
  650. package/src/constants/regex.ts +8 -0
  651. package/src/constants/storage.ts +41 -0
  652. package/src/enums/index.ts +24 -0
  653. package/src/layouts/empty.vue +7 -0
  654. package/src/modules/api-party/kit.ts +30 -0
  655. package/src/modules/api-party/module.ts +259 -0
  656. package/src/modules/api-party/openapi.ts +74 -0
  657. package/src/modules/api-party/runtime/composables/$api.ts +157 -0
  658. package/src/modules/api-party/runtime/composables/useApiData.ts +229 -0
  659. package/src/modules/api-party/runtime/constants.ts +1 -0
  660. package/src/modules/api-party/runtime/formData.ts +85 -0
  661. package/src/modules/api-party/runtime/server/$api.ts +29 -0
  662. package/src/modules/api-party/runtime/server/handler.ts +92 -0
  663. package/src/modules/api-party/runtime/types.ts +97 -0
  664. package/src/modules/api-party/runtime/utils.ts +43 -0
  665. package/src/pages/403.vue +11 -0
  666. package/src/pages/500.vue +11 -0
  667. package/src/pages/[...all].vue +11 -0
  668. package/src/pages/login.vue +67 -0
  669. package/src/plugins/auth.ts +10 -0
  670. package/src/plugins/build-time.ts +5 -0
  671. package/src/plugins/dayjs.ts +14 -0
  672. package/src/plugins/i18n.ts +6 -0
  673. package/src/plugins/router.ts +6 -0
  674. package/src/plugins/vue-json-pretty.ts +5 -0
  675. package/src/plugins/vue-query.ts +41 -0
  676. package/src/plugins/wujie.ts +19 -0
  677. package/src/public/apple-touch-icon.png +0 -0
  678. package/src/public/audio-recorder.js +31 -0
  679. package/src/public/build-time.json +1 -0
  680. package/src/public/favicon.ico +0 -0
  681. package/src/public/icon-block-free-app.png +0 -0
  682. package/src/public/maskable-icon.png +0 -0
  683. package/src/public/nuxt.svg +3 -0
  684. package/src/public/preview/step-1.png +0 -0
  685. package/src/public/preview/step-2.png +0 -0
  686. package/src/public/preview/step-3.png +0 -0
  687. package/src/public/pwa-192x192.png +0 -0
  688. package/src/public/pwa-512x512.png +0 -0
  689. package/src/public/robots.txt +2 -0
  690. package/src/public/vite.png +0 -0
  691. package/src/pwa/config.ts +61 -0
  692. package/src/pwa/index.ts +194 -0
  693. package/src/pwa/runtime/VitePwaManifest.ts +33 -0
  694. package/src/pwa/types.ts +56 -0
  695. package/src/pwa/utils.ts +16 -0
  696. package/src/schemas/authServiceApi.json +6709 -0
  697. package/src/schemas/billingApi.json +1083 -0
  698. package/src/schemas/chatApi.json +497 -0
  699. package/src/schemas/libraryApi.json +2009 -0
  700. package/src/schemas/licenseApi.json +772 -0
  701. package/src/schemas/livestreamApi.json +3354 -0
  702. package/src/schemas/lrmApi.json +2848 -0
  703. package/src/schemas/machineApi.json +4604 -0
  704. package/src/schemas/metricApi.json +141 -0
  705. package/src/schemas/notificationApi.json +1 -0
  706. package/src/schemas/playoutApi.json +8315 -0
  707. package/src/schemas/ssaiApi.json +1108 -0
  708. package/src/schemas/transcodeApi.json +9670 -0
  709. package/src/schemas/vastControlApi.json +961 -0
  710. package/src/schemas/vodApi.json +3974 -0
  711. package/src/server/plugins/loading.css +111 -0
  712. package/src/server/plugins/loading.html +12 -0
  713. package/src/server/plugins/loading.ts +134 -0
  714. package/src/templates/pwa.client.ts +136 -0
  715. package/src/utils/$apiOptions.ts +79 -0
  716. package/src/utils/app.ts +23 -0
  717. package/src/utils/cn.ts +3 -0
  718. package/src/utils/format.ts +88 -0
  719. package/src/utils/gen-routes.ts +100 -0
  720. package/src/utils/helper.ts +56 -0
  721. package/src/utils/micro.ts +207 -0
  722. package/src/utils/popoverSelectAttrs.ts +24 -0
  723. package/src/utils/popup.ts +96 -0
  724. package/src/utils/pwa.ts +86 -0
  725. package/src/utils/query-filter.ts +111 -0
  726. package/src/utils/table.ts +35 -0
  727. package/src/utils/tryCatch.ts +25 -0
  728. package/src/utils/utils.ts +58 -0
  729. package/src/utils/validator.ts +185 -0
  730. package/src/utils/videojs.ts +490 -0
  731. package/src/utils/wujie.ts +1 -0
  732. package/tsconfig.json +3 -0
  733. package/uno.config.ts +375 -0
@@ -0,0 +1,1957 @@
1
+ <script lang="ts" setup>
2
+ import { langOptions } from '@sigma-streaming/base/src/constants/languageCode'
3
+
4
+ const { schemaObj } = useAsyncSchema('/api/transcode/api-docs-json', 'CreatePresetDto')
5
+ const { schemaObj: schemaSCTE35 } = useAsyncSchema('/api/transcode/api-docs-json', 'PresetScte35OverwriteDto')
6
+
7
+ const { defaultMediaType, isPackage, prop, encoderOptions, videoCodecs, mode, isConfigEncoder, isShowType, scte35 } = definePropsRefs<{
8
+ defaultMediaType?: 'video' | 'audio' | 'data'
9
+ isPackage?: boolean
10
+ prop?: string
11
+ videoCodecs?: Record<string, string>
12
+ encoderOptions?: any
13
+ mode?: 'create' | 'edit' | 'clone'
14
+ isConfigEncoder?: boolean
15
+ isShowType?: boolean
16
+ scte35?: boolean
17
+ }>()
18
+
19
+ const { t } = useI18n()
20
+ const { formRef } = useElFormContext()
21
+
22
+ function getProp(key: string) {
23
+ return () => prop.value ? `${prop.value}.${key}` : key
24
+ }
25
+
26
+ const encoderIdValue = ref(inject('encoderIdValue'))
27
+ const mappingEncoder = {
28
+ open_h264: 'OpenH264',
29
+ open_hevc: 'OpenHEVC',
30
+ nvenc: 'NVENC',
31
+ passthrough: 'Passthrough',
32
+ }
33
+
34
+ const triggerAction = ref(inject('triggerAction'))
35
+ const optionsEncoder = computed(() => {
36
+ if (encoderOptions.value) {
37
+ return encoderOptions.value
38
+ }
39
+ const value = encoderIdValue.value
40
+
41
+ // TH1: encoderIdValue === -1
42
+ if ((value === -1 || value === 'cpu') && triggerAction.value !== 'edit') {
43
+ return [
44
+ { label: 'OpenH264', value: 'open_h264' },
45
+ { label: 'OpenHEVC', value: 'open_hevc' },
46
+ { label: 'Passthrough', value: 'passthrough' },
47
+ ]
48
+ }
49
+
50
+ // TH2: encoderIdValue là null, undefined, '' hoặc bất kỳ giá trị nào khác
51
+ if (value === null || value === undefined || value === '' || triggerAction.value === 'edit') {
52
+ return [
53
+ { label: 'OpenH264', value: 'open_h264' },
54
+ { label: 'OpenHEVC', value: 'open_hevc' },
55
+ { label: 'NVENC', value: 'nvenc' },
56
+ // { label: 'Aurora4', value: 'aurora4' },
57
+ { label: 'Passthrough', value: 'passthrough' },
58
+ ]
59
+ }
60
+
61
+ // Mặc định cho các giá trị khác (ví dụ: 0, 1, 2, 3,...)
62
+ return [
63
+ { label: 'NVENC', value: 'nvenc' },
64
+ { label: 'Passthrough', value: 'passthrough' },
65
+ ]
66
+ })
67
+
68
+ function findFirstMatchingEncoder(options) {
69
+ return options?.find(item =>
70
+ optionsEncoder.value?.some(option => option.value === item),
71
+ )
72
+ }
73
+
74
+ const profilesValue = ref(inject('profilesValue'))
75
+ function areAllEncoderTypesSame(profiles, newEncoderType?: string) {
76
+ const encoderTypes = newEncoderType ? [newEncoderType] : []
77
+
78
+ for (const profile of profiles) {
79
+ for (const preset of profile.presets || []) {
80
+ if (preset.encoderType)
81
+ encoderTypes.push(preset.encoderType)
82
+ }
83
+ }
84
+
85
+ if (encoderTypes.length === 0)
86
+ return true
87
+
88
+ return encoderTypes?.filter(Boolean)?.every(type => type === encoderTypes[0])
89
+ }
90
+
91
+ const isVisibleRecommend = ref(false)
92
+ const [typeValue, typeAttrs] = useElField<string>(getProp('type'), [
93
+ {
94
+ required: true,
95
+ message: t('library_preset.type_is_required'),
96
+ },
97
+ ])
98
+ const [encoderValue, encoderAttrs] = useElField<string | undefined>(getProp('encoderType'), [
99
+ {
100
+ required: true,
101
+ trigger: ['blur', 'change'],
102
+ validator: (_rule, value: string, callback: any) => {
103
+ const encoderTypes = profilesValue.value?.flatMap(profile =>
104
+ (profile.presets || []).map(preset => preset.encoderType),
105
+ )
106
+ const commonEncoder = findFirstMatchingEncoder(encoderTypes)
107
+
108
+ if (!value || value.trim().length === 0) {
109
+ callback(new Error(t('library_preset.preset_encoder_is_required')))
110
+ }
111
+ else if (!optionsEncoder.value.some(option => option.value === value)) {
112
+ callback(new Error(t('base_library.encoder_not_supported_please_select_encoder_again')))
113
+ }
114
+ else if (profilesValue.value && triggerAction.value !== 'edit' && value !== commonEncoder && !areAllEncoderTypesSame(profilesValue.value, value)) {
115
+ if (commonEncoder && encoderTypes.length > 0)
116
+ callback(new Error(t('base_libray.all_profiles_must_have_the_same_video_encoder_data_please_proceed_with_data_sync', [mappingEncoder[commonEncoder] ? `, ${$t('base_library.currently_is')} ${mappingEncoder[commonEncoder]}` : ''])))
117
+ else
118
+ callback(new Error($t('base_library.the_encoder_of_the_profile_that_was_previously_created_or_taken_from_the_template_is_not_supported_please_re-select_a_valid_encoder_outside_the_channel_configuration')))
119
+ }
120
+ else {
121
+ callback()
122
+ }
123
+ callback()
124
+ },
125
+ },
126
+ ])
127
+ const [presetValue, presetAttrs] = useElField<string | undefined>(getProp('videoPreset'), [
128
+ {
129
+ required: true,
130
+ message: t('library_preset.preset_is_required'),
131
+ },
132
+ ])
133
+ const [nameValue, nameAttrs] = useElField<string>(getProp('name'), [
134
+ {
135
+ required: true,
136
+ validator: nameValidatorLow(t('library_preset.name')),
137
+ trigger: ['blur', 'change'],
138
+ },
139
+ ])
140
+ const [groupIdValue, groupIdAttrs] = useElField<string>(getProp('audioGroup'), [
141
+ {
142
+ validator: (rule, value, callback) => {
143
+ if (!/^[\w-\s]*$/.test(value))
144
+ callback(new Error(t('library_preset.group_id')))
145
+ else
146
+ callback()
147
+ },
148
+ trigger: ['blur', 'change'],
149
+ },
150
+ ])
151
+ const [defaultPTEValue, defaultPTEAttrs] = useElField(getProp('pteEnabled'), [])
152
+ const [vmafMaxValue, vmafMaxAttrs] = useElField(getProp('vmafMax'), [
153
+ {
154
+ trigger: ['blur', 'change'],
155
+ required: true,
156
+ validator: (rule, value, callback) => {
157
+ if (!value)
158
+ callback(new Error(t('base_libarry.please_input_vmafmax')))
159
+ else if (value < 89 || value > 96)
160
+ callback(new Error(t('base_library.vmafmax_must_not_be_less_than_89_and_greater_than_96')))
161
+ else
162
+ callback()
163
+ },
164
+ },
165
+ ], { enabled: defaultPTEValue })
166
+ const [vmafMinValue, vmafMinAttrs] = useElField(getProp('vmafMin'), [
167
+ {
168
+ trigger: ['blur', 'change'],
169
+ required: true,
170
+ validator: (rule, value, callback) => {
171
+ if (!value)
172
+ callback(new Error(t('base_libarry.please_input_vmafmin')))
173
+ else if (value < 89 || value > 96)
174
+ callback(new Error(t('base_library.vmafmin_must_not_be_less_than_89_and_greater_than_96')))
175
+ else
176
+ callback()
177
+ },
178
+ },
179
+ ], { enabled: defaultPTEValue })
180
+ const [vmafThresValue, vmafThresAttrs] = useElField(getProp('vmafThres'), [
181
+ {
182
+ required: true,
183
+ validator: (rule, value, callback) => {
184
+ if (!value)
185
+ callback(new Error(t('base_libarry.please_input_vmafthres')))
186
+ else
187
+ callback()
188
+ },
189
+ trigger: ['blur', 'change'],
190
+ },
191
+ ], { enabled: defaultPTEValue })
192
+
193
+ const [videoCodecValue, videoCodecAttrs] = useElField<string | undefined>(getProp('videoCodec'), [
194
+ {
195
+ validator: (rule, value, callback) => {
196
+ if (!value)
197
+ callback(new Error(t('please_select_codec')))
198
+ else
199
+ callback()
200
+ },
201
+ trigger: ['blur', 'change'],
202
+ required: true,
203
+ },
204
+ ])
205
+ const [audioCodecValue, audioCodecAttrs] = useElField<string | undefined>(getProp('audioCodec'), [
206
+ {
207
+ validator: (rule, value, callback) => {
208
+ if (!value)
209
+ callback(new Error(t('please_select_codec')))
210
+ else
211
+ callback()
212
+ },
213
+ trigger: ['blur', 'change'],
214
+ required: true,
215
+ },
216
+ ])
217
+ const [dataCodecValue, dataCodecAttrs] = useElField<string | undefined>(getProp('dataCodec'), [
218
+ {
219
+ validator: (rule, value, callback) => {
220
+ if (!value)
221
+ callback(new Error(t('please_select_codec')))
222
+ else
223
+ callback()
224
+ },
225
+ trigger: ['blur', 'change'],
226
+ required: true,
227
+ },
228
+ ])
229
+
230
+ const enableValid = computed(() => {
231
+ return !!(audioCodecValue.value !== 'copy') as boolean
232
+ })
233
+ const [descriptionValue, descriptionAttrs] = useElField<string>(getProp('description'), [
234
+ {
235
+ validator: (rule, value, callback) => {
236
+ if (!/^[\w-\s]*$/.test(value))
237
+ callback(new Error(t('description.format_description')))
238
+ else
239
+ callback()
240
+ },
241
+ trigger: ['blur', 'change'],
242
+ },
243
+ ])
244
+
245
+ const [minrateValue, minrateAttrs] = useElField<number | undefined>(getProp('minrate'), [
246
+ {
247
+ trigger: ['blur', 'change'],
248
+ validator: (rule, value, callback) => {
249
+ if (typeValue.value === 'video' && (convertStringToNumber(value || 0) < 64000))
250
+ callback(new Error($t('minrate_khong_duoc_lon_hon_bitrate')))
251
+ else if (typeValue.value === 'video' && (convertStringToNumber(value) < 64000))
252
+ callback(new Error($t('minrate_khong_duoc_lon_hon_bitrate')))
253
+ else
254
+ callback()
255
+ },
256
+ },
257
+ ])
258
+
259
+ const [videoRateValue, videoRateAttrs] = useElField<number | undefined>(getProp('videoBitrate'), [
260
+ {
261
+ required: true,
262
+ trigger: ['blur', 'change'],
263
+ validator: (rule, value, callback) => {
264
+ if (!value)
265
+ callback(new Error(t('library_preset.video_is_required')))
266
+ else if (convertStringToNumber(minrateValue.value || 0) >= convertStringToNumber(value))
267
+ callback(new Error($t('bitrate_khong_duoc_be_hon_minrate')))
268
+ else if (convertStringToNumber(value) > 60000000)
269
+ callback(new Error($t('bitrate_khong_duoc_lon_hon_60m')))
270
+ else
271
+ callback()
272
+ },
273
+ },
274
+ ])
275
+ const [audioRateValue, audioRateAttrs] = useElField<number>(getProp('audioBitrate'), [
276
+ {
277
+ required: true,
278
+ trigger: ['blur', 'change'],
279
+ validator: (rule, value, callback) => {
280
+ if (!value)
281
+ callback(new Error(t('library_preset.bitrate_is_required')))
282
+
283
+ else if (convertStringToNumber(value) < 32000 || convertStringToNumber(value) > 2000000)
284
+ callback(new Error($t('SSConfig.audiorate_khong_duoc_be_hon_minrate')))
285
+ else
286
+ callback()
287
+ },
288
+ },
289
+ ])
290
+ const [maxrateValue, maxrateAttrs] = useElField<number | undefined>(getProp('maxrate'), [
291
+ {
292
+ trigger: ['blur', 'change'],
293
+ validator: (rule, value, callback) => {
294
+ if (convertStringToNumber(value || 0) < 64000)
295
+ callback(new Error(t('base_library.maxrate_cannot_be_less_than_64000')))
296
+ else if (convertStringToNumber(videoRateValue.value || 0) > convertStringToNumber(value || 0))
297
+ callback(new Error($t('SSConfig.maxrate_khong_duoc_lon_hon_bitrate')))
298
+ else if (convertStringToNumber(value) > 60000000)
299
+ callback(new Error($t('SSConfig.maxrate_khong_duoc_lon_hon_60m')))
300
+ else
301
+ callback()
302
+ },
303
+ },
304
+ ])
305
+ const [fpsValue, fpsAttrs] = useElField<number | undefined>(getProp('fps'), [
306
+ {
307
+ required: true,
308
+ trigger: ['blur', 'change'],
309
+ validator: (rule, value, callback) => {
310
+ if (!value) {
311
+ callback(new Error($t('SSConfig.fps_is_required')))
312
+ }
313
+ else if (convertStringToNumber(value) < 10 || convertStringToNumber(value) > 60) {
314
+ callback(new Error($t('SSConfig.fps_less_10_greater_60')))
315
+ }
316
+ else {
317
+ callback()
318
+ }
319
+ },
320
+ },
321
+ ])
322
+ const [widthValue, widthAttrs] = useElField<number | undefined>(getProp('width'), [
323
+ {
324
+ required: true,
325
+ trigger: ['blur', 'change'],
326
+ validator: (rule, value, callback) => {
327
+ if (!value && value !== 0) {
328
+ callback(new Error($t('SSConfig.width_is_required')))
329
+ }
330
+ else if (convertStringToNumber(value) < 0 || convertStringToNumber(value) > 7680) {
331
+ callback(new Error($t('SSConfig.width_less_0_greater_7680')))
332
+ }
333
+ else {
334
+ callback()
335
+ }
336
+ },
337
+ },
338
+ ])
339
+ const [heightValue, heightAttrs] = useElField<number | undefined>(getProp('height'), [
340
+ {
341
+ required: true,
342
+ trigger: ['blur', 'change'],
343
+ validator: (rule, value, callback) => {
344
+ if (!value && value !== 0) {
345
+ callback(new Error($t('SSConfig.height_is_required')))
346
+ }
347
+ else if (convertStringToNumber(value) < 0 || convertStringToNumber(value) > 4320) {
348
+ callback(new Error($t('SSConfig.height_less_0_greater_7680')))
349
+ }
350
+ else {
351
+ callback()
352
+ }
353
+ },
354
+ },
355
+ ])
356
+
357
+ const [aspectRatioModeValue, aspectRatioModeAttrs] = useElField<string>(getProp('aspectRatioMode'), [])
358
+ const isRequiredAspect = computed(() => {
359
+ return aspectRatioModeValue.value === 'custom'
360
+ })
361
+ const [aspectRatioWidthValue, aspectRatioWidthAttrs] = useElField<number | undefined>(getProp('aspectRatioWidth'), [
362
+ {
363
+ required: true,
364
+ trigger: ['blur', 'change'],
365
+ validator: (rule, value, callback) => {
366
+ if (convertStringToNumber(value) < 0 || convertStringToNumber(value) > 1000) {
367
+ callback(new Error($t('ratio_width_less_0_greater_1000')))
368
+ }
369
+ else {
370
+ callback()
371
+ }
372
+ },
373
+ },
374
+ ], { enabled: isRequiredAspect })
375
+ const [aspectRatioHeightValue, aspectRatioHeightAttrs] = useElField<number | undefined>(getProp('aspectRatioHeight'), [
376
+ {
377
+ required: true,
378
+ trigger: ['blur', 'change'],
379
+ validator: (rule, value, callback) => {
380
+ if (convertStringToNumber(value) < 0 || convertStringToNumber(value) > 1000) {
381
+ callback(new Error($t('ratio_height_less_0_greater_1000')))
382
+ }
383
+ else {
384
+ callback()
385
+ }
386
+ },
387
+ },
388
+ ], { enabled: isRequiredAspect })
389
+ const [bframeValue, bframeAttrs] = useElField<number | undefined>(getProp('bframe'), [])
390
+ const [pixelFormatValue, pixelFormatAttrs] = useElField<string | undefined>(getProp('pixelFormat'), [])
391
+ const [scaleTypeValue, scaleTypeAttrs] = useElField<string | undefined>(getProp('scaleType'), [])
392
+ const [scanTypeValue, scanTypeAttrs] = useElField<string | undefined>(getProp('scanType'), [])
393
+ const [rateControlModeValue, rateControlModeAttrs] = useElField<string | undefined>(getProp('rateControlMode'), [])
394
+ const [rcValue, rcAttrs] = useElField<string | undefined>(getProp('rc'), [])
395
+ const [gopModeValue, gopModeAttrs] = useElField<string | undefined>(getProp('gopMode'), [])
396
+ const [fixedGOPValue, fixedGOPAttrs] = useElField<boolean | undefined>(getProp('fixedGOP'), [])
397
+ const isRequiredGopSize = computed(() => {
398
+ return gopModeValue.value === 'fixed_frame' || gopModeValue.value === 'fixed_second'
399
+ })
400
+ const [gopValue, gopAttrs] = useElField<string | undefined>(getProp('gopValue'), [
401
+ {
402
+ required: true,
403
+ trigger: ['blur', 'change'],
404
+ validator: (rule, value, callback) => {
405
+ if (!value && (gopModeValue.value === 'fixed_frame' || gopModeValue.value === 'fixed_second')) {
406
+ callback(new Error($t('SSConfig.gop_value_required')))
407
+ }
408
+ else if (gopModeValue.value === 'fixed_frame' && (convertStringToNumber(value) < 17 || convertStringToNumber(value) > 300)) {
409
+ callback(new Error($t('SSConfig.gopsize_cannot_be_less_than_17_and_greater_than_300')))
410
+ }
411
+ else if (gopModeValue.value === 'fixed_second' && (convertStringToNumber(value) < 1 || convertStringToNumber(value) > 16)) {
412
+ callback(new Error($t('SSConfig.second_cannot_be_less_than_17_and_greater_than_300')))
413
+ }
414
+ else {
415
+ callback()
416
+ }
417
+ },
418
+ },
419
+ ], {
420
+ enabled: isRequiredGopSize,
421
+ })
422
+ const [bufsizeValue, bufsizeAttrs] = useElField<number | undefined>(getProp('bufsize'), [
423
+ {
424
+ trigger: ['blur', 'change'],
425
+ validator: (rule, value, callback) => {
426
+ if (convertStringToNumber(value) < 10000 || convertStringToNumber(value) > 60000000) {
427
+ callback(new Error($t('SSConfig.buffsize_cannot_be_less_than_64000_and_greater_than_60000000')))
428
+ }
429
+ else {
430
+ callback()
431
+ }
432
+ },
433
+ },
434
+ ])
435
+ const [hdrValue, hdrAttrs] = useElField<string | undefined>(getProp('hdr'), [])
436
+ const [cqValue, cqAttrs] = useElField<number | undefined>(getProp('cq'), [
437
+ {
438
+ trigger: ['blur', 'change'],
439
+ validator: (rule, value, callback) => {
440
+ if (convertStringToNumber(value) < 0 || convertStringToNumber(value) > 51) {
441
+ callback(new Error($t('SSConfig.cbr_less_0_greater_51')))
442
+ }
443
+ else {
444
+ callback()
445
+ }
446
+ },
447
+ },
448
+ ])
449
+
450
+ // Audio
451
+ const [sampleRateValue, sampleRateAttrs] = useElField<number | undefined>(getProp('sampleRate'), [])
452
+ const [channelValue, channelAttrs] = useElField<number | undefined>(getProp('channel'), [
453
+ {
454
+ required: true,
455
+ message: t('library_preset.preset_channel'),
456
+ trigger: ['blur', 'change'],
457
+ },
458
+ ], {
459
+ enabled: enableValid,
460
+ })
461
+ const [profileValue, profileAttrs] = useElField<string | undefined>(getProp('videoProfile'), [])
462
+ const [audioProfileValue, audioProfileAttrs] = useElField<string | undefined>(getProp('audioProfile'), [])
463
+ const [levelValue, levelAttrs] = useElField<string | undefined>(getProp('videoLevel'), [])
464
+ const [volumeValue, volumeAttrs] = useElField<string | undefined>(getProp('volume'), [])
465
+ const [languageValue, languageAttrs] = useElField<string | undefined>(getProp('language'), [])
466
+ const [labelValue, labelAttrs] = useElField<string | undefined>(getProp('label'), [])
467
+ const [defaultValue, defaultAttrs] = useElField<boolean | undefined>(getProp('audioDefault'), [])
468
+ const [scte35OverwriteConfigValue] = useElField(getProp('scte35OverwriteConfig'), [])
469
+ const isCopiedVideoCodec = computed(() => {
470
+ return videoCodecValue.value === 'copy'
471
+ })
472
+
473
+ const isCopiedAudioCodec = computed(() => {
474
+ return audioCodecValue.value === 'copy'
475
+ })
476
+ const isCreateChannel = ref(inject('isCreateChannel'))
477
+
478
+ function fillAudio() {
479
+ typeValue.value = 'audio'
480
+ nameValue.value = nameValue.value ?? ''
481
+ descriptionValue.value = descriptionValue.value ?? ''
482
+
483
+ audioCodecValue.value = 'aac'
484
+ videoCodecValue.value = undefined
485
+ dataCodecValue.value = undefined
486
+ audioProfileValue.value = undefined
487
+ profileValue.value = undefined
488
+ levelValue.value = undefined
489
+ rcValue.value = undefined
490
+ audioRateValue.value = 32000
491
+ videoRateValue.value = undefined
492
+ sampleRateValue.value = 44100
493
+ groupIdValue.value = undefined
494
+ defaultValue.value = undefined
495
+ minrateValue.value = undefined
496
+ maxrateValue.value = undefined
497
+ presetValue.value = undefined
498
+ fpsValue.value = undefined
499
+ widthValue.value = undefined
500
+ heightValue.value = undefined
501
+ pixelFormatValue.value = undefined
502
+ bframeValue.value = undefined
503
+ scaleTypeValue.value = undefined
504
+ scanTypeValue.value = undefined
505
+ gopModeValue.value = undefined
506
+ fixedGOPValue.value = undefined
507
+ rateControlModeValue.value = undefined
508
+ cqValue.value = undefined
509
+ channelValue.value = 2
510
+ volumeValue.value = undefined
511
+ languageValue.value = undefined
512
+ labelValue.value = undefined
513
+ defaultPTEValue.value = undefined
514
+ vmafMaxValue.value = undefined
515
+ vmafMinValue.value = undefined
516
+ vmafThresValue.value = undefined
517
+ }
518
+
519
+ function fillVideo() {
520
+ typeValue.value = 'video'
521
+ nameValue.value = nameValue.value ?? ''
522
+ descriptionValue.value = descriptionValue.value ?? ''
523
+ audioCodecValue.value = undefined
524
+ videoCodecValue.value = 'h264'
525
+ dataCodecValue.value = undefined
526
+ encoderValue.value = (encoderIdValue.value !== -1 && encoderIdValue.value !== null && encoderIdValue.value !== undefined && encoderIdValue.value !== '') ? 'nvenc' : 'open_h264'
527
+ presetValue.value = (encoderIdValue.value !== -1 && encoderIdValue.value !== null && encoderIdValue.value !== undefined && encoderIdValue.value !== '') ? 'llhp' : 'veryfast'
528
+ videoRateValue.value = 4000000
529
+ rateControlModeValue.value = 'vbr'
530
+ minrateValue.value = undefined
531
+ maxrateValue.value = undefined
532
+ sampleRateValue.value = undefined
533
+ fpsValue.value = 25
534
+ widthValue.value = 1920
535
+ heightValue.value = 1080
536
+ pixelFormatValue.value = undefined
537
+ bframeValue.value = undefined
538
+ scaleTypeValue.value = undefined
539
+ scanTypeValue.value = 'progressive'
540
+ cqValue.value = undefined
541
+ gopModeValue.value = 'auto'
542
+ gopValue.value = undefined
543
+ fixedGOPValue.value = undefined
544
+ hdrValue.value = undefined
545
+ rcValue.value = undefined
546
+ channelValue.value = undefined
547
+ profileValue.value = undefined
548
+ levelValue.value = undefined
549
+ volumeValue.value = undefined
550
+ defaultPTEValue.value = undefined
551
+ vmafMaxValue.value = undefined
552
+ vmafMinValue.value = undefined
553
+ vmafThresValue.value = undefined
554
+ }
555
+
556
+ function fillData() {
557
+ typeValue.value = 'data'
558
+ nameValue.value = nameValue.value ?? ''
559
+ descriptionValue.value = descriptionValue.value ?? ''
560
+ dataCodecValue.value = 'copy'
561
+ audioCodecValue.value = undefined
562
+ videoCodecValue.value = undefined
563
+ minrateValue.value = undefined
564
+ maxrateValue.value = undefined
565
+ sampleRateValue.value = undefined
566
+ fpsValue.value = undefined
567
+ widthValue.value = undefined
568
+ heightValue.value = undefined
569
+ rcValue.value = undefined
570
+ pixelFormatValue.value = undefined
571
+ bframeValue.value = undefined
572
+ scaleTypeValue.value = undefined
573
+ cqValue.value = undefined
574
+ channelValue.value = undefined
575
+ profileValue.value = undefined
576
+ levelValue.value = undefined
577
+ volumeValue.value = undefined
578
+ fixedGOPValue.value = undefined
579
+ defaultPTEValue.value = undefined
580
+ vmafMaxValue.value = undefined
581
+ vmafMinValue.value = undefined
582
+ vmafThresValue.value = undefined
583
+ }
584
+
585
+ const configPte = ref(inject('configPte'))
586
+ // disabled with PTE config
587
+ const disabledWithPTEConfig = computed(() => {
588
+ return isCreateChannel.value && defaultPTEValue.value && encoderValue.value === 'nvenc' && configPte.value?.pte?.enable
589
+ })
590
+
591
+ async function handleChangeType(type: string) {
592
+ if (type === 'data')
593
+ fillData()
594
+
595
+ else if (type === 'audio')
596
+ fillAudio()
597
+
598
+ else if (type === 'video')
599
+ fillVideo()
600
+
601
+ if (type === 'video')
602
+ await formRef.value?.validateField('videoBitrate')
603
+ else if (type === 'audio')
604
+ await formRef.value?.validateField('audioBitrate')
605
+ }
606
+
607
+ function setUndefined(type: string, value: any) {
608
+ switch (type) {
609
+ case 'volume':
610
+ !value ? volumeValue.value = undefined : volumeValue.value = value
611
+ break
612
+ case 'hdr':
613
+ !value ? hdrValue.value = undefined : hdrValue.value = value
614
+ break
615
+ case 'pixel':
616
+ !value ? pixelFormatValue.value = undefined : pixelFormatValue.value = value
617
+ break
618
+ case 'scale':
619
+ !value ? scaleTypeValue.value = undefined : scaleTypeValue.value = value
620
+ break
621
+ case 'scan':
622
+ !value ? scanTypeValue.value = undefined : scanTypeValue.value = value
623
+ break
624
+ case 'profile':
625
+ !value ? profileValue.value = undefined : profileValue.value = value
626
+ break
627
+ case 'audioProfile':
628
+ !value ? audioProfileValue.value = undefined : audioProfileValue.value = value
629
+ break
630
+ case 'level':
631
+ !value ? levelValue.value = undefined : levelValue.value = value
632
+ break
633
+ case 'label':
634
+ !value ? labelValue.value = undefined : labelValue.value = value
635
+ break
636
+ case 'rateControlMode':
637
+ !value ? rateControlModeValue.value = undefined : rateControlModeValue.value = value
638
+ rcValue.value = undefined
639
+ break
640
+ case 'rc':
641
+ !value ? rcValue.value = undefined : rcValue.value = value
642
+ break
643
+ }
644
+ }
645
+
646
+ const optionsPreset = computed(() => {
647
+ return encoderValue.value === 'nvenc'
648
+ ? [
649
+ {
650
+ label: 'SLOW',
651
+ value: 'slow',
652
+ },
653
+ {
654
+ label: 'MEDIUM',
655
+ value: 'medium',
656
+ },
657
+ {
658
+ label: 'FAST',
659
+ value: 'fast',
660
+ },
661
+ {
662
+ label: 'HP',
663
+ value: 'hp',
664
+ },
665
+ {
666
+ label: 'HQ',
667
+ value: 'hq',
668
+ },
669
+ {
670
+ label: 'BD',
671
+ value: 'bd',
672
+ },
673
+ {
674
+ label: 'LL',
675
+ value: 'll',
676
+ },
677
+ {
678
+ label: 'LLHQ',
679
+ value: 'llhq',
680
+ },
681
+ {
682
+ label: 'LLHP',
683
+ value: 'llhp',
684
+ },
685
+ ]
686
+ : [
687
+ {
688
+ label: 'MEDIUM',
689
+ value: 'medium',
690
+ },
691
+ {
692
+ label: 'FAST',
693
+ value: 'fast',
694
+ },
695
+ {
696
+ label: 'FASTER',
697
+ value: 'faster',
698
+ },
699
+ {
700
+ label: 'VERYFAST',
701
+ value: 'veryfast',
702
+ },
703
+ {
704
+ label: 'SUPERFAST',
705
+ value: 'superfast',
706
+ },
707
+ {
708
+ label: 'ULTRAFAST',
709
+ value: 'ultrafast',
710
+ },
711
+ ]
712
+ })
713
+
714
+ const codecSelection = computed(() => {
715
+ return {
716
+ video: (encoderValue.value === 'open_h264' || encoderValue.value === 'aurora4')
717
+ ? { H264: 'h264' }
718
+ : encoderValue.value === 'open_hevc'
719
+ ? { HEVC: 'hevc' }
720
+ : encoderValue.value === 'nvenc'
721
+ ? { H264: 'h264', HEVC: 'hevc' }
722
+ : { COPY: 'copy' },
723
+ audio: AUDIO_CODECS,
724
+ data: DATA_CODECS,
725
+ }[typeValue.value]
726
+ })
727
+
728
+ function defaultPTEConfig(_newValue) {
729
+ videoCodecValue.value = 'h264'
730
+ fixedGOPValue.value = false
731
+ if (_newValue) {
732
+ vmafMaxValue.value = 95
733
+ vmafMinValue.value = 91
734
+ vmafThresValue.value = 0.85
735
+ }
736
+ }
737
+
738
+ function getEncoderConfig(newEncoderType: string) {
739
+ const config = {
740
+ videoCodec: '',
741
+ videoPreset: '',
742
+ videoProfile: '',
743
+ videoLevel: '',
744
+ vmafMaxValue: undefined,
745
+ vmafMinValue: undefined,
746
+ vmafThresValue: undefined,
747
+ }
748
+
749
+ if (isPackage.value)
750
+ return config
751
+
752
+ switch (newEncoderType) {
753
+ case 'open_h264':
754
+ config.videoCodec = 'h264'
755
+ config.videoPreset = 'veryfast'
756
+ break
757
+ case 'open_hevc':
758
+ config.videoCodec = 'hevc'
759
+ config.videoPreset = 'veryfast'
760
+ break
761
+ case 'nvenc':
762
+ config.videoCodec = 'h264'
763
+ config.videoPreset = 'llhp'
764
+ if (isCreateChannel.value) {
765
+ config.vmafMaxValue = 95
766
+ config.vmafMinValue = 91
767
+ config.vmafThresValue = 0.85
768
+ }
769
+ break
770
+ case 'aurora4':
771
+ config.videoCodec = 'h264'
772
+ config.videoPreset = 'veryfast'
773
+ break
774
+ case 'passthrough':
775
+ config.videoCodec = 'copy'
776
+ break
777
+ }
778
+
779
+ return config
780
+ }
781
+
782
+ function updateAllEncoderTypes(newEncoderType: string) {
783
+ const config = getEncoderConfig(newEncoderType)
784
+
785
+ return profilesValue.value?.map((_profile) => {
786
+ const updatedPresets = _profile?.presets?.map(preset => ({
787
+ ...preset,
788
+ encoderType: newEncoderType,
789
+ videoPreset: config.videoPreset,
790
+ videoProfile: config.videoProfile,
791
+ videoLevel: config.videoLevel,
792
+ videoCodec: config.videoCodec,
793
+ }))
794
+ return {
795
+ ..._profile,
796
+ presets: updatedPresets,
797
+ }
798
+ })
799
+ }
800
+
801
+ const isVod = ref(inject('isVod'))
802
+ function handleChangeEncoder(newValue: string) {
803
+ const config = getEncoderConfig(newValue)
804
+ const isCheck = isVod.value ? !areAllEncoderTypesSame(profilesValue.value, newValue) : !areAllEncoderTypesSame(profilesValue.value)
805
+ if (profilesValue.value?.length > 0 && isCheck) {
806
+ ElMessageBox.alert(
807
+ $t('base_libray.less_than_strong_greater_than_all_profiles', [`<strong>${$t('base_libray.all_profiles_must_have_the_same_video_encoder_data')}</strong>`]),
808
+ $t('base_libray.encoder_sync'),
809
+ {
810
+ confirmButtonText: t('Actions.confirm'),
811
+ dangerouslyUseHTMLString: true,
812
+ showClose: false,
813
+ callback: () => {
814
+ profilesValue.value = updateAllEncoderTypes(newValue)
815
+ formRef.value.validate()
816
+ },
817
+ },
818
+ )
819
+ }
820
+ else {
821
+ formRef.value.validate()
822
+ }
823
+
824
+ defaultPTEValue.value = false
825
+
826
+ videoCodecValue.value = config.videoCodec
827
+ presetValue.value = config.videoPreset
828
+ profileValue.value = config.videoProfile
829
+ levelValue.value = config.videoLevel
830
+
831
+ vmafMaxValue.value = config.vmafMaxValue
832
+ vmafMinValue.value = config.vmafMinValue
833
+ vmafThresValue.value = config.vmafThresValue
834
+ }
835
+
836
+ function formatter(value: string) {
837
+ return value.replace(/\D/g, '').replace(/\B(?=(\d{3})+(?!\d))/g, '.')
838
+ }
839
+
840
+ function parser(value: string) {
841
+ return Number.parseInt(value.replace(/\D/g, '').replace(/\$\s?|(\.*)/g, ''))
842
+ }
843
+
844
+ const activeNames = ref(['general', 'aspect', 'frame', 'control', 'color', 'gop', 'codec', 'other', 'scte35', 'output_aspect', 'pte'])
845
+
846
+ const optionsProfile = computed(() => {
847
+ return videoCodecValue.value === 'h264' ? ['baseline', 'main', 'high'] : videoCodecValue.value === 'hevc' ? ['main'] : []
848
+ })
849
+ const optionsLevel = computed(() => {
850
+ return videoCodecValue.value === 'h264' ? ['H264_LEVEL_5_2', 'H264_LEVEL_5_1', 'H264_LEVEL_5', 'H264_LEVEL_4_2', 'H264_LEVEL_4_1', 'H264_LEVEL_4', 'H264_LEVEL_3_2', 'H264_LEVEL_3_1', 'H264_LEVEL_3', 'H264_LEVEL_2_2', 'H264_LEVEL_2_1', 'H264_LEVEL_2', 'H264_LEVEL_1_3', 'H264_LEVEL_1_2', 'H264_LEVEL_1_1', 'H264_LEVEL_1'] : videoCodecValue.value === 'hevc' ? ['H265_LEVEL_6_2', 'H265_LEVEL_6_1', 'H265_LEVEL_6', 'H265_LEVEL_5_2', 'H265_LEVEL_5_1', 'H265_LEVEL_5', 'H265_LEVEL_4_1', 'H265_LEVEL_4', 'H265_LEVEL_3_1', 'H265_LEVEL_3', 'H265_LEVEL_2_1', 'H265_LEVEL_2', 'H265_LEVEL_1'] : []
851
+ })
852
+ const isDisabledGopSize = computed(() => {
853
+ return !!(gopModeValue.value === 'auto' || gopModeValue.value === 'from_source')
854
+ })
855
+ const isDisabledRc = computed(() => {
856
+ return !!(encoderValue.value !== 'nvenc') as boolean
857
+ })
858
+
859
+ const optionRc = computed(() => {
860
+ return rateControlModeValue.value === 'cbr' ? ['cbr_hq', 'cbr_hp'] : rateControlModeValue.value === 'vbr' ? ['vbr_hq', 'vbr_hp'] : []
861
+ })
862
+
863
+ const optionGopMode = [
864
+ { label: 'Auto', value: 'auto' },
865
+ { label: 'Source', value: 'from_source' },
866
+ { label: 'Seconds', value: 'fixed_second' },
867
+ { label: 'Frames', value: 'fixed_frame' },
868
+ ]
869
+
870
+ function handleChangeVideoCodec() {
871
+ profileValue.value = ''
872
+ levelValue.value = ''
873
+ }
874
+
875
+ const optionScanType = [
876
+ { label: 'Progressive mode', value: 'progressive' },
877
+ { label: 'Interlaced mode', value: 'interlaced' },
878
+ ]
879
+
880
+ const optionsLang = computed(() => {
881
+ return langOptions.value?.map(item => ({
882
+ label: `${item[0]} (${item[1]})`,
883
+ value: item[1],
884
+ }))
885
+ })
886
+
887
+ async function handleApplyConfig(_value) {
888
+ defaultPTEValue.value = true
889
+ nameValue.value = _value?.name
890
+ bframeValue.value = _value?.bframe
891
+ // encoderValue.value = _value?.encoder
892
+ pixelFormatValue.value = _value?.format
893
+ fpsValue.value = _value?.fps
894
+ maxrateValue.value = _value?.maxrate
895
+ profileValue.value = _value?.profile
896
+ presetValue.value = _value?.preset
897
+ videoCodecValue.value = 'h264'
898
+ fixedGOPValue.value = false
899
+
900
+ await formRef.value?.validate()
901
+ }
902
+ </script>
903
+
904
+ <template>
905
+ <template v-if="typeValue === 'data'">
906
+ <el-collapse
907
+ v-model="activeNames"
908
+ class="[&_.el-collapse-item\_\_content]:pb-0 [&_.el-collapse-item\_\_header]:(text-16px) ![&_.el-collapse-item\_\_header]:font-600"
909
+ >
910
+ <el-collapse-item name="general">
911
+ <template #title>
912
+ <label for="" class="flex items-center gap-2 text-16px font-semibold">
913
+ {{ $t('channel_input.general_information') }}
914
+ </label>
915
+ </template>
916
+ <div class="flex gap-2">
917
+ <el-form-item class="w-full" v-bind="nameAttrs">
918
+ <template #label>
919
+ <SSInformationLabel :label="$t('general.name')" :info="schemaObj.name" />
920
+ </template>
921
+ <el-input
922
+ v-model="nameValue"
923
+ :placeholder="$t('library_preset.enter_name')"
924
+ autocomplete="off"
925
+ clearable
926
+ :minlength="1"
927
+ :maxlength="50"
928
+ show-word-limit
929
+ />
930
+ </el-form-item>
931
+ <el-form-item v-if="isShowType" class="w-full" v-bind="typeAttrs">
932
+ <template #label>
933
+ <SSInformationLabel :label="$t('library_preset.type')" :info="schemaObj.type" />
934
+ </template>
935
+ <el-select
936
+ v-model="typeValue"
937
+ class="w-full"
938
+ :disabled="!!defaultMediaType || mode === 'edit'"
939
+ @change="handleChangeType"
940
+ >
941
+ <el-option
942
+ v-for="(type, idx) in ['video', 'audio', 'data']"
943
+ :key="type + idx"
944
+ :value="type"
945
+ :label="type"
946
+ />
947
+ </el-select>
948
+ </el-form-item>
949
+ <el-form-item class="w-full" label="Codec" v-bind="dataCodecAttrs">
950
+ <template #label>
951
+ <SSInformationLabel label="Codec" :info="schemaObj.dataCodec" />
952
+ </template>
953
+ <el-select
954
+ v-model="dataCodecValue"
955
+ class="w-full"
956
+ default-first-option
957
+ :disabled="isPackage && typeValue !== 'data'"
958
+ >
959
+ <el-option
960
+ v-for="(type, idx) in codecSelection"
961
+ :key="type + idx"
962
+ :value="type"
963
+ :label="type"
964
+ />
965
+ </el-select>
966
+ </el-form-item>
967
+ </div>
968
+ </el-collapse-item>
969
+ <el-collapse-item v-if="scte35 && dataCodecValue === 'copy'" name="scte35">
970
+ <template #title>
971
+ <label for="" class="flex items-center gap-2 text-16px font-semibold">
972
+ Overwrite SCTE35
973
+ </label>
974
+ </template>
975
+
976
+ <div class="w-1/2 flex justify-between gap-2">
977
+ <el-form-item class="w-full">
978
+ <template #label>
979
+ <SSInformationLabel :label="$t('EventChannel.form.label.enable')" :info="schemaSCTE35.enabled" />
980
+ </template>
981
+ <el-switch
982
+ v-model="scte35OverwriteConfigValue.enabled"
983
+ />
984
+ </el-form-item>
985
+ <el-form-item class="w-full">
986
+ <template #label>
987
+ <SSInformationLabel :label="$t('fast_channel.duration')" :info="schemaSCTE35.overwriteDuration" />
988
+ </template>
989
+ <el-input-number
990
+ v-model="scte35OverwriteConfigValue.overwriteDuration"
991
+ :disabled="!scte35OverwriteConfigValue.enabled"
992
+ :min="1"
993
+ :max="180"
994
+ :precision="0"
995
+ class="w-full"
996
+ />
997
+ </el-form-item>
998
+
999
+ <el-form-item class="w-full" label="Delay">
1000
+ <template #label>
1001
+ <SSInformationLabel :label="$t('EventChannel.form.label.delay')" :info="schemaSCTE35.overwriteDelayTime" />
1002
+ </template>
1003
+ <el-input-number
1004
+ v-model="scte35OverwriteConfigValue.overwriteDelayTime"
1005
+ :disabled="!scte35OverwriteConfigValue.enabled"
1006
+ :min="0"
1007
+ :max="60"
1008
+ :precision="0"
1009
+ class="w-full"
1010
+ />
1011
+ </el-form-item>
1012
+ </div>
1013
+ </el-collapse-item>
1014
+ </el-collapse>
1015
+ </template>
1016
+ <template v-else>
1017
+ <div v-if="!typeValue && isShowType" class="flex gap-2">
1018
+ <el-form-item class="flex-1" v-bind="nameAttrs">
1019
+ <template #label>
1020
+ <SSInformationLabel :label="$t('general.name')" :info="schemaObj.name" />
1021
+ </template>
1022
+ <el-input
1023
+ v-model="nameValue"
1024
+ :placeholder="$t('library_preset.enter_name')"
1025
+ autocomplete="off"
1026
+ clearable
1027
+ :minlength="1"
1028
+ :maxlength="50"
1029
+ show-word-limit
1030
+ />
1031
+ </el-form-item>
1032
+ <el-form-item v-if="isShowType" class="flex-1" v-bind="typeAttrs">
1033
+ <template #label>
1034
+ <SSInformationLabel :label="$t('library_preset.type')" :info="schemaObj.type" />
1035
+ </template>
1036
+ <el-select
1037
+ v-model="typeValue"
1038
+ class="w-full"
1039
+ :disabled="!!defaultMediaType || mode === 'edit'"
1040
+ @change="handleChangeType"
1041
+ >
1042
+ <el-option
1043
+ v-for="(type, idx) in ['video', 'audio', 'data']"
1044
+ :key="type + idx"
1045
+ :value="type"
1046
+ :label="type"
1047
+ />
1048
+ </el-select>
1049
+ </el-form-item>
1050
+ </div>
1051
+
1052
+ <el-collapse
1053
+ v-model="activeNames"
1054
+ class="[&_.el-collapse-item\_\_content]:pb-0 [&_.el-collapse-item\_\_header]:(text-16px) ![&_.el-collapse-item\_\_header]:font-600"
1055
+ >
1056
+ <el-collapse-item v-if="typeValue" name="general">
1057
+ <template #title>
1058
+ <label for="" class="flex items-center gap-2 text-16px font-semibold">
1059
+ {{ $t('SSConfig.general_information') }}
1060
+ </label>
1061
+ </template>
1062
+ <div class="flex flex-wrap gap-2">
1063
+ <el-form-item class="w-586px" v-bind="nameAttrs">
1064
+ <template #label>
1065
+ <SSInformationLabel :label="$t('general.name')" :info="schemaObj.name" />
1066
+ </template>
1067
+ <el-input
1068
+ v-model="nameValue"
1069
+ :placeholder="$t('library_preset.enter_name')"
1070
+ autocomplete="off"
1071
+ clearable
1072
+ :minlength="1"
1073
+ :maxlength="50"
1074
+ show-word-limit
1075
+ />
1076
+ </el-form-item>
1077
+ <el-form-item v-if="isShowType" class="max-w-190px min-w-190px" v-bind="typeAttrs">
1078
+ <template #label>
1079
+ <SSInformationLabel :label="$t('library_preset.type')" :info="schemaObj.type" />
1080
+ </template>
1081
+ <el-select
1082
+ v-model="typeValue"
1083
+ class="w-full"
1084
+ :disabled="!!defaultMediaType || mode === 'edit'"
1085
+ @change="handleChangeType"
1086
+ >
1087
+ <el-option
1088
+ v-for="(type, idx) in ['video', 'audio', 'data']"
1089
+ :key="type + idx"
1090
+ :value="type"
1091
+ :label="type"
1092
+ />
1093
+ </el-select>
1094
+ </el-form-item>
1095
+ <el-form-item v-if="isConfigEncoder && typeValue === 'video'" class="[&_.el-form-item\_\_content]:block" v-bind="encoderAttrs">
1096
+ <template #label>
1097
+ <SSInformationLabel :label="$t('library_preset.encoder')" :info="schemaObj.encoderType" />
1098
+ </template>
1099
+ <el-select
1100
+ v-model="encoderValue"
1101
+ :disabled="isPackage"
1102
+ class="max-w-190px min-w-190px"
1103
+ @change="handleChangeEncoder"
1104
+ >
1105
+ <el-option
1106
+ v-for="(e, idx) in optionsEncoder"
1107
+ :key="e + idx"
1108
+ :value="e.value"
1109
+ :label="e.label"
1110
+ />
1111
+ </el-select>
1112
+ </el-form-item>
1113
+ <el-form-item
1114
+ v-if="typeValue === 'video'"
1115
+ class="max-w-190px min-w-190px"
1116
+ label="Codec"
1117
+ v-bind="videoCodecAttrs"
1118
+ >
1119
+ <template #label>
1120
+ <SSInformationLabel label="Codec" :info="schemaObj.videoCodec" />
1121
+ </template>
1122
+ <el-select
1123
+ v-model="videoCodecValue"
1124
+ class="max-w-190px min-w-190px"
1125
+ default-first-option
1126
+ :disabled="(isPackage && typeValue !== 'data' || disabledWithPTEConfig)"
1127
+ @change="handleChangeVideoCodec"
1128
+ >
1129
+ <el-option
1130
+ v-for="(type, idx) in codecSelection"
1131
+ :key="type + idx"
1132
+ :value="type"
1133
+ :label="type"
1134
+ />
1135
+ </el-select>
1136
+ </el-form-item>
1137
+
1138
+ <el-form-item
1139
+ v-if="typeValue === 'audio'"
1140
+ class="max-w-190px min-w-190px"
1141
+ label="Codec"
1142
+ v-bind="audioCodecAttrs"
1143
+ >
1144
+ <template #label>
1145
+ <SSInformationLabel label="Codec" :info="schemaObj.audioCodec" />
1146
+ </template>
1147
+ <el-select
1148
+ v-model="audioCodecValue"
1149
+ class="max-w-190px min-w-190px"
1150
+ default-first-option
1151
+ :disabled="isPackage"
1152
+ >
1153
+ <el-option
1154
+ v-for="(type, idx) in codecSelection"
1155
+ :key="type + idx"
1156
+ :value="type"
1157
+ :label="type"
1158
+ />
1159
+ </el-select>
1160
+ </el-form-item>
1161
+ <el-form-item
1162
+ v-if="typeValue === 'data'"
1163
+ class="max-w-190px min-w-190px"
1164
+ label="Codec"
1165
+ v-bind="dataCodecAttrs"
1166
+ >
1167
+ <template #label>
1168
+ <SSInformationLabel label="Codec" :info="schemaObj.dataCodec" />
1169
+ </template>
1170
+ <el-select
1171
+ v-model="dataCodecValue"
1172
+ class="max-w-190px min-w-190px"
1173
+ default-first-option
1174
+ :disabled="isPackage"
1175
+ >
1176
+ <el-option
1177
+ v-for="(type, idx) in codecSelection"
1178
+ :key="type + idx"
1179
+ :value="type"
1180
+ :label="type"
1181
+ />
1182
+ </el-select>
1183
+ </el-form-item>
1184
+ </div>
1185
+ </el-collapse-item>
1186
+ <el-collapse-item v-if="typeValue === 'video' && encoderValue === 'nvenc' && isCreateChannel && encoderValue !== 'passthrough' && configPte?.pte?.enable" name="pte">
1187
+ <template #title>
1188
+ <label class="flex items-center gap-2 text-16px font-semibold">
1189
+ PTE Config <span class="text-13px font-normal">({{ $t('base_library.used_in_video_encoding_with_ai-based_quality_assessment_to_optimize_efficiency_while_maintaining_visual_quality') }})</span>
1190
+ <el-tooltip
1191
+ class="box-item"
1192
+ effect="dark"
1193
+ content="Recommended Configuration"
1194
+ placement="top"
1195
+ >
1196
+ <div v-if="configPte?.pte?.path" class="h-20px w-20px flex items-center justify-center rounded-full bg-primary">
1197
+ <div class="i-carbon:thumbs-up-filled mb-1px cursor-pointer text-light" @click.prevent.stop="isVisibleRecommend = true" />
1198
+ </div>
1199
+ </el-tooltip>
1200
+ </label>
1201
+ </template>
1202
+ <div class="flex gap-2">
1203
+ <el-form-item class="max-w-190px min-w-190px" label="Enable" v-bind="defaultPTEAttrs">
1204
+ <template #label>
1205
+ <SSInformationLabel label="Enable" :info="schemaObj.pteEnabled" />
1206
+ </template>
1207
+ <el-switch
1208
+ v-model="defaultPTEValue"
1209
+ :disabled="!configPte?.pte?.enable"
1210
+ @change="defaultPTEConfig"
1211
+ />
1212
+ </el-form-item>
1213
+ <el-form-item label="vmafMax" class="max-w-190px min-w-190px" v-bind="vmafMaxAttrs">
1214
+ <template #label>
1215
+ <SSInformationLabel label="vmafMax" :info="schemaObj.vmafMax" />
1216
+ </template>
1217
+ <el-input-number
1218
+ v-model="vmafMaxValue"
1219
+ :disabled="!defaultPTEValue"
1220
+ class="w-full [&_.el-input\_\_inner]:text-start"
1221
+ :controls="false"
1222
+ :precision="2"
1223
+ :max="96"
1224
+ :min="vmafMinValue || 89"
1225
+ />
1226
+ </el-form-item>
1227
+ <el-form-item label="vmafMin" class="max-w-190px min-w-190px" v-bind="vmafMinAttrs">
1228
+ <template #label>
1229
+ <SSInformationLabel label="vmafMin" :info="schemaObj.vmafMin" />
1230
+ </template>
1231
+ <el-input-number
1232
+ v-model="vmafMinValue"
1233
+ :disabled="!defaultPTEValue"
1234
+ class="w-full [&_.el-input\_\_inner]:text-start"
1235
+ :controls="false"
1236
+ :precision="2"
1237
+ :max="vmafMaxValue || 96"
1238
+ :min="89"
1239
+ />
1240
+ </el-form-item>
1241
+ <el-form-item label="vmafThres" class="max-w-190px min-w-190px" v-bind="vmafThresAttrs">
1242
+ <template #label>
1243
+ <SSInformationLabel label="vmafThres" :info="schemaObj.vmafThres" />
1244
+ </template>
1245
+ <el-input-number
1246
+ v-model="vmafThresValue"
1247
+ :disabled="!defaultPTEValue"
1248
+ class="w-full [&_.el-input\_\_inner]:text-start"
1249
+ :controls="false"
1250
+ :max="1"
1251
+ :min="0.5"
1252
+ :precision="2"
1253
+ />
1254
+ </el-form-item>
1255
+ </div>
1256
+ </el-collapse-item>
1257
+ <el-collapse-item v-if="scte35 && ['copy', 'scte35'].includes(dataCodecValue) && encoderValue !== 'passthrough'" name="scte35">
1258
+ <template #title>
1259
+ <label for="" class="flex items-center gap-2 text-16px font-semibold">
1260
+ Overwrite SCTE35
1261
+ </label>
1262
+ </template>
1263
+
1264
+ <div class="w-1/2 flex justify-between gap-2">
1265
+ <el-form-item class="w-full">
1266
+ <template #label>
1267
+ <SSInformationLabel :label="$t('EventChannel.form.label.enable')" :info="schemaSCTE35.enabled" />
1268
+ </template>
1269
+ <el-switch
1270
+ v-model="scte35OverwriteConfigValue.enabled"
1271
+ />
1272
+ </el-form-item>
1273
+ <el-form-item class="w-full">
1274
+ <template #label>
1275
+ <SSInformationLabel :label="$t('fast_channel.duration')" :info="schemaSCTE35.overwriteDuration" />
1276
+ </template>
1277
+ <el-input-number
1278
+ v-model="scte35OverwriteConfigValue.overwriteDuration"
1279
+ :disabled="!scte35OverwriteConfigValue.enabled"
1280
+ :min="1"
1281
+ :max="180"
1282
+ :precision="0"
1283
+ class="w-full"
1284
+ />
1285
+ </el-form-item>
1286
+
1287
+ <el-form-item class="w-full" :label="$t('EventChannel.form.label.delay')">
1288
+ <template #label>
1289
+ <SSInformationLabel :label="$t('EventChannel.form.label.delay')" :info="schemaSCTE35.overwriteDelayTime" />
1290
+ </template>
1291
+ <el-input-number
1292
+ v-model="scte35OverwriteConfigValue.overwriteDelayTime"
1293
+ :disabled="!scte35OverwriteConfigValue.enabled"
1294
+ :min="0"
1295
+ :max="60"
1296
+ :precision="0"
1297
+ class="w-full"
1298
+ />
1299
+ </el-form-item>
1300
+ </div>
1301
+ </el-collapse-item>
1302
+ <el-collapse-item v-if="typeValue && !isPackage && encoderValue !== 'passthrough'" name="codec">
1303
+ <template #title>
1304
+ <label for="" class="flex items-center gap-2 text-16px font-semibold">
1305
+ {{ $t('SSConfig.codec_detail') }}
1306
+ </label>
1307
+ </template>
1308
+
1309
+ <div class="flex flex-wrap gap-2">
1310
+ <el-form-item v-if="isConfigEncoder && typeValue === 'video' && encoderValue !== 'passthrough' && !isPackage" class="max-w-190px min-w-190px" v-bind="presetAttrs">
1311
+ <template #label>
1312
+ <SSInformationLabel label="Preset" :info="schemaObj.videoPreset" />
1313
+ </template>
1314
+ <el-select v-model="presetValue" class="w-full">
1315
+ <el-option
1316
+ v-for="(e) in optionsPreset"
1317
+ :key="e.value"
1318
+ :value="e.value"
1319
+ :label="e.label"
1320
+ />
1321
+ </el-select>
1322
+ </el-form-item>
1323
+ <el-form-item
1324
+ v-if="typeValue === 'video'"
1325
+ label="Pixel format"
1326
+ class="max-w-190px min-w-190px"
1327
+ v-bind="pixelFormatAttrs"
1328
+ >
1329
+ <template #label>
1330
+ <SSInformationLabel label="Pixel format" :info="schemaObj.pixelFormat" />
1331
+ </template>
1332
+ <el-select
1333
+ v-model="pixelFormatValue"
1334
+ :disabled="isCopiedVideoCodec"
1335
+ class="w-full"
1336
+ clearable
1337
+ @change="(value) => setUndefined('pixel', value)"
1338
+ >
1339
+ <el-option
1340
+ v-for="(type, idx) in ['yuv420p', 'yuv444p', 'yuv420p10le', 'yuv444p10le']"
1341
+ :key="type + idx"
1342
+ :value="type"
1343
+ :label="type"
1344
+ />
1345
+ </el-select>
1346
+ </el-form-item>
1347
+ <el-form-item
1348
+ v-if="typeValue === 'video'"
1349
+ class="max-w-190px min-w-190px"
1350
+ label="Profile"
1351
+ v-bind="profileAttrs"
1352
+ >
1353
+ <template #label>
1354
+ <SSInformationLabel label="Profile" :info="schemaObj.videoProfile" />
1355
+ </template>
1356
+ <el-select
1357
+ v-model="profileValue"
1358
+ :disabled="isCopiedVideoCodec"
1359
+ class="w-full"
1360
+ default-first-option
1361
+ clearable
1362
+ @change="(value) => setUndefined('profile', value)"
1363
+ >
1364
+ <el-option
1365
+ v-for="(type, idx) in optionsProfile"
1366
+ :key="type + idx"
1367
+ :value="type"
1368
+ :label="type"
1369
+ />
1370
+ </el-select>
1371
+ </el-form-item>
1372
+ <el-form-item
1373
+ v-if="typeValue === 'audio'"
1374
+ class="max-w-190px min-w-190px"
1375
+ label="Profile"
1376
+ v-bind="audioProfileAttrs"
1377
+ >
1378
+ <template #label>
1379
+ <SSInformationLabel label="Profile" :info="schemaObj.audioProfile" />
1380
+ </template>
1381
+ <el-select
1382
+ v-model="audioProfileValue"
1383
+ :disabled="isCopiedVideoCodec"
1384
+ class="w-full"
1385
+ default-first-option
1386
+ clearable
1387
+ @change="(value) => setUndefined('audioProfile', value)"
1388
+ >
1389
+ <el-option
1390
+ v-for="(type, idx) in ['aac_low', 'aac_he', 'aac_he_v2', 'aac_main', 'aac_ld', 'aac_eld']"
1391
+ :key="type + idx"
1392
+ :value="type"
1393
+ :label="type"
1394
+ />
1395
+ </el-select>
1396
+ </el-form-item>
1397
+ <el-form-item
1398
+ v-if="typeValue === 'video'"
1399
+ class="max-w-190px min-w-190px"
1400
+ label="Level"
1401
+ v-bind="levelAttrs"
1402
+ >
1403
+ <template #label>
1404
+ <SSInformationLabel label="Level" :info="schemaObj.videoLevel" />
1405
+ </template>
1406
+ <el-select
1407
+ v-model="levelValue"
1408
+ :disabled="isCopiedVideoCodec"
1409
+ class="w-full"
1410
+ default-first-option
1411
+ clearable
1412
+ @change="(value) => setUndefined('level', value)"
1413
+ >
1414
+ <el-option
1415
+ v-for="(type, idx) in optionsLevel"
1416
+ :key="type + idx"
1417
+ :value="type"
1418
+ :label="type"
1419
+ />
1420
+ </el-select>
1421
+ </el-form-item>
1422
+ </div>
1423
+ </el-collapse-item>
1424
+ <el-collapse-item v-if="typeValue === 'video' && !isPackage && encoderValue !== 'passthrough'" title="Detail Information" name="output_aspect">
1425
+ <template #title>
1426
+ <label class="flex items-center gap-2 text-16px font-semibold">
1427
+ {{ $t('SSConfig.aspect_ratio') }}
1428
+ </label>
1429
+ </template>
1430
+
1431
+ <div class="flex gap-2">
1432
+ <el-form-item label="Aspect Ratio Mode" class="max-w-190px min-w-190px" v-bind="aspectRatioModeAttrs">
1433
+ <template #label>
1434
+ <SSInformationLabel label="Aspect Ratio Mode" :info="schemaObj.aspectRatioMode" />
1435
+ </template>
1436
+ <el-select
1437
+ v-model="aspectRatioModeValue"
1438
+ class="w-full"
1439
+ :disabled="isCopiedVideoCodec"
1440
+ >
1441
+ <el-option
1442
+ v-for="(type, idx) in [
1443
+ 'auto', 'custom', 'source',
1444
+ ]"
1445
+ :key="type + idx"
1446
+ :value="type"
1447
+ :label="type"
1448
+ />
1449
+ </el-select>
1450
+ </el-form-item>
1451
+
1452
+ <el-form-item label="Aspect Ratio Width" class="max-w-190px min-w-190px" v-bind="aspectRatioWidthAttrs">
1453
+ <template #label>
1454
+ <SSInformationLabel label="Aspect Ratio Width" :info="schemaObj.aspectRatioWidth" />
1455
+ </template>
1456
+ <el-input-number
1457
+ v-model="aspectRatioWidthValue"
1458
+ :min="1"
1459
+ :max="1000"
1460
+ class="w-full [&_.el-input\_\_inner]:text-start"
1461
+ :disabled="aspectRatioModeValue !== 'custom'"
1462
+ :precision="0"
1463
+ :controls="false"
1464
+ step-strictly
1465
+ />
1466
+ </el-form-item>
1467
+ <el-form-item label="Aspect Ratio Height" class="max-w-190px min-w-190px" v-bind="aspectRatioHeightAttrs">
1468
+ <template #label>
1469
+ <SSInformationLabel label="Aspect Ratio Height" :info="schemaObj.aspectRatioHeight" />
1470
+ </template>
1471
+ <el-input-number
1472
+ v-model="aspectRatioHeightValue"
1473
+ :min="1"
1474
+ :max="1000"
1475
+ class="w-full [&_.el-input\_\_inner]:text-start"
1476
+ :disabled="aspectRatioModeValue !== 'custom'"
1477
+ :precision="0"
1478
+ :controls="false"
1479
+ step-strictly
1480
+ />
1481
+ </el-form-item>
1482
+ </div>
1483
+ </el-collapse-item>
1484
+ <el-collapse-item v-if="typeValue === 'video' && !isPackage && encoderValue !== 'passthrough'" title="Detail Information" name="aspect">
1485
+ <template #title>
1486
+ <label class="flex items-center gap-2 text-16px font-semibold">
1487
+ {{ $t('Channel.output_aspect_ratio') }}
1488
+ </label>
1489
+ </template>
1490
+ <div class="flex gap-2">
1491
+ <el-form-item label="Width" class="max-w-190px min-w-190px" v-bind="widthAttrs">
1492
+ <template #label>
1493
+ <SSInformationLabel label="Width" :info="schemaObj.width" />
1494
+ </template>
1495
+ <el-input-number
1496
+ v-model="widthValue"
1497
+ :min="0"
1498
+ :max="7680"
1499
+ class="w-full [&_.el-input\_\_inner]:text-start"
1500
+ :disabled="isCopiedVideoCodec"
1501
+ :precision="0"
1502
+ :controls="false"
1503
+ step-strictly
1504
+ />
1505
+ </el-form-item>
1506
+
1507
+ <el-form-item label="Height" class="max-w-190px min-w-190px" v-bind="heightAttrs">
1508
+ <template #label>
1509
+ <SSInformationLabel label="Height" :info="schemaObj.height" />
1510
+ </template>
1511
+ <el-input-number
1512
+ v-model="heightValue"
1513
+ :min="0"
1514
+ :max="4320"
1515
+ class="w-full [&_.el-input\_\_inner]:text-start"
1516
+ :disabled="isCopiedVideoCodec"
1517
+ :precision="0"
1518
+ :controls="false"
1519
+ step-strictly
1520
+ />
1521
+ </el-form-item>
1522
+ <el-form-item label="Scale Type" class="max-w-190px min-w-190px" v-bind="scaleTypeAttrs">
1523
+ <template #label>
1524
+ <SSInformationLabel label="Scale Type" :info="schemaObj.scaleType" />
1525
+ </template>
1526
+ <el-select
1527
+ v-model="scaleTypeValue"
1528
+ class="w-full"
1529
+ :disabled="isCopiedVideoCodec"
1530
+ clearable
1531
+ @change="(value) => setUndefined('scale', value)"
1532
+ >
1533
+ <el-option
1534
+ v-for="(type, idx) in [
1535
+ 'fitWidth',
1536
+ 'fitHeight',
1537
+ 'fitInside',
1538
+ 'fitCrop',
1539
+ 'fitBoth',
1540
+ 'source',
1541
+ ]"
1542
+ :key="type + idx"
1543
+ :value="type"
1544
+ :label="type"
1545
+ />
1546
+ </el-select>
1547
+ </el-form-item>
1548
+ </div>
1549
+ </el-collapse-item>
1550
+
1551
+ <el-collapse-item v-if="typeValue === 'video' && !isPackage && encoderValue !== 'passthrough'" name="frame">
1552
+ <template #title>
1553
+ <label for="" class="flex items-center gap-2 text-16px font-semibold">
1554
+ {{ $t('SSConfig.frame_rate') }}
1555
+ </label>
1556
+ </template>
1557
+
1558
+ <div class="flex gap-2">
1559
+ <el-form-item v-bind="fpsAttrs" label="FPS" class="max-w-190px min-w-190px">
1560
+ <template #label>
1561
+ <SSInformationLabel label="FPS" :info="schemaObj.fps" />
1562
+ </template>
1563
+ <el-input-number
1564
+ v-model="fpsValue"
1565
+ class="w-full [&_.el-input\_\_inner]:text-start"
1566
+ :disabled="isCopiedVideoCodec"
1567
+ :precision="0"
1568
+ :controls="false"
1569
+ step-strictly
1570
+ />
1571
+ </el-form-item>
1572
+ <el-form-item label="Scan Type" class="max-w-190px min-w-190px" v-bind="scanTypeAttrs">
1573
+ <template #label>
1574
+ <SSInformationLabel label="Scan Type" :info="schemaObj.scanType" />
1575
+ </template>
1576
+ <el-select
1577
+ v-model="scanTypeValue"
1578
+ class="w-full"
1579
+ :disabled="isCopiedVideoCodec"
1580
+ clearable
1581
+ @change="(value) => setUndefined('scan', value)"
1582
+ >
1583
+ <el-option
1584
+ v-for="(type) in optionScanType"
1585
+ :key="type.value"
1586
+ :value="type.value"
1587
+ :label="type.value"
1588
+ />
1589
+ </el-select>
1590
+ </el-form-item>
1591
+ </div>
1592
+ </el-collapse-item>
1593
+ <el-collapse-item v-if="typeValue && !isPackage && encoderValue !== 'passthrough'" name="control">
1594
+ <template #title>
1595
+ <label class="flex items-center gap-2 text-16px font-semibold">
1596
+ {{ $t('SSConfig.rate_control') }}
1597
+ </label>
1598
+ </template>
1599
+
1600
+ <div v-if="typeValue === 'video'" class="flex flex-wrap gap-2">
1601
+ <el-form-item label="Rate control mode" class="max-w-190px min-w-190px flex-1" v-bind="rateControlModeAttrs">
1602
+ <template #label>
1603
+ <SSInformationLabel label="Rate control mode" :info="schemaObj.rateControlMode" />
1604
+ </template>
1605
+ <el-select
1606
+ v-model="rateControlModeValue"
1607
+ class="max-w-190px min-w-190px flex-1"
1608
+ :disabled="isCopiedVideoCodec"
1609
+ clearable
1610
+ @change="(value) => setUndefined('rateControlMode', value)"
1611
+ >
1612
+ <el-option
1613
+ v-for="(type, idx) in [
1614
+ 'cbr',
1615
+ 'vbr',
1616
+ ]"
1617
+ :key="type + idx"
1618
+ :value="type"
1619
+ :label="type"
1620
+ />
1621
+ </el-select>
1622
+ </el-form-item>
1623
+
1624
+ <el-form-item label="Constant quality" class="max-w-190px min-w-190px flex-1" v-bind="cqAttrs">
1625
+ <template #label>
1626
+ <SSInformationLabel label="Constant quality" min-width="min-w-112px" :info="schemaObj.cq" />
1627
+ </template>
1628
+ <el-input-number
1629
+ v-model="cqValue"
1630
+ :controls="false"
1631
+ :precision="0"
1632
+ class="w-full [&_.el-input\_\_inner]:text-start"
1633
+ :disabled="isCopiedVideoCodec || rateControlModeValue !== 'vbr'"
1634
+ :min="0"
1635
+ :max="51"
1636
+ />
1637
+ </el-form-item>
1638
+ <el-form-item label="RC" class="max-w-190px min-w-190px flex-1" v-bind="rcAttrs">
1639
+ <template #label>
1640
+ <SSInformationLabel label="RC" :info="schemaObj.rc" />
1641
+ </template>
1642
+ <el-select
1643
+ v-model="rcValue"
1644
+ class="max-w-190px min-w-190px flex-1"
1645
+ :disabled="isCopiedVideoCodec || isDisabledRc"
1646
+ clearable
1647
+ @change="(value) => setUndefined('rc', value)"
1648
+ >
1649
+ <el-option
1650
+ v-for="(type, idx) in optionRc"
1651
+ :key="type + idx"
1652
+ :value="type"
1653
+ :label="type"
1654
+ />
1655
+ </el-select>
1656
+ </el-form-item>
1657
+ <el-form-item v-if="encoderValue !== 'passthrough' && !isPackage" class="max-w-190px min-w-190px flex-1" v-bind="videoRateAttrs">
1658
+ <template #label>
1659
+ <SSInformationLabel label="Bitrate" :info="schemaObj.videoBitrate" />
1660
+ </template>
1661
+ <el-input
1662
+ v-model="videoRateValue"
1663
+ class="max-w-190px min-w-190px flex-1"
1664
+ :disabled="isCopiedVideoCodec"
1665
+ :formatter="formatter"
1666
+ :parser="parser"
1667
+ />
1668
+ </el-form-item>
1669
+ <el-form-item v-bind="minrateAttrs" class="max-w-190px min-w-190px flex-1">
1670
+ <template #label>
1671
+ <SSInformationLabel label="Minrate" :info="schemaObj.minrate" />
1672
+ </template>
1673
+ <el-input
1674
+ v-model="minrateValue"
1675
+ class="max-w-190px min-w-190px flex-1"
1676
+ :disabled="isCopiedVideoCodec"
1677
+ :formatter="formatter"
1678
+ :parser="parser"
1679
+ />
1680
+ </el-form-item>
1681
+
1682
+ <el-form-item v-bind="maxrateAttrs" class="max-w-190px min-w-190px flex-1">
1683
+ <template #label>
1684
+ <SSInformationLabel label="Maxrate" :info="schemaObj.maxrate" />
1685
+ </template>
1686
+ <el-input
1687
+ v-model="maxrateValue"
1688
+ class="max-w-190px min-w-190px flex-1"
1689
+ :disabled="isCopiedVideoCodec"
1690
+ :formatter="formatter"
1691
+ :parser="parser"
1692
+ />
1693
+ </el-form-item>
1694
+ <el-form-item v-bind="bufsizeAttrs" class="max-w-190px min-w-190px flex-1">
1695
+ <template #label>
1696
+ <SSInformationLabel label="Bufsize" :info="schemaObj.bufsize" />
1697
+ </template>
1698
+ <el-input
1699
+ v-model="bufsizeValue"
1700
+ class="max-w-190px min-w-190px flex-1"
1701
+ :disabled="isCopiedVideoCodec"
1702
+ :formatter="formatter"
1703
+ :parser="parser"
1704
+ />
1705
+ </el-form-item>
1706
+ </div>
1707
+ <div v-if="typeValue === 'audio'" class="flex flex-wrap gap-2">
1708
+ <el-form-item class="max-w-190px min-w-190px flex-1" v-bind="audioRateAttrs">
1709
+ <template #label>
1710
+ <SSInformationLabel label="Bitrate" :info="schemaObj.audioBitrate" />
1711
+ </template>
1712
+ <el-input
1713
+ v-model="audioRateValue"
1714
+ class="max-w-190px min-w-190px flex-1"
1715
+ :disabled="isCopiedVideoCodec"
1716
+ :formatter="formatter"
1717
+ :parser="parser"
1718
+ />
1719
+ </el-form-item>
1720
+
1721
+ <el-form-item
1722
+ v-if="!isPackage"
1723
+ class="max-w-190px min-w-190px flex-1"
1724
+ label="Sample rate"
1725
+ v-bind="sampleRateAttrs"
1726
+ >
1727
+ <template #label>
1728
+ <SSInformationLabel label="Sample rate" :info="schemaObj.sampleRate" />
1729
+ </template>
1730
+ <el-select
1731
+ v-model="sampleRateValue"
1732
+ :disabled="isCopiedAudioCodec"
1733
+ class="w-full"
1734
+ default-first-option
1735
+ >
1736
+ <el-option
1737
+ v-for="(type, idx) in [44100, 48000]"
1738
+ :key="type + idx"
1739
+ :value="type"
1740
+ :label="type"
1741
+ />
1742
+ </el-select>
1743
+ </el-form-item>
1744
+ <el-form-item
1745
+ v-if="!isPackage"
1746
+ class="max-w-190px min-w-190px flex-1"
1747
+ label="Channel"
1748
+ v-bind="channelAttrs"
1749
+ >
1750
+ <template #label>
1751
+ <SSInformationLabel label="Channel" :info="schemaObj.channel" />
1752
+ </template>
1753
+ <el-select
1754
+ v-model="channelValue"
1755
+ :disabled="isCopiedAudioCodec"
1756
+ class="w-full"
1757
+ >
1758
+ <el-option
1759
+ v-for="(type, idx) in [1, 2, 6]"
1760
+ :key="type + idx"
1761
+ :value="type"
1762
+ :label="type"
1763
+ />
1764
+ </el-select>
1765
+ </el-form-item>
1766
+ </div>
1767
+ </el-collapse-item>
1768
+ <el-collapse-item v-if="typeValue === 'video' && !isPackage && encoderValue !== 'passthrough'" name="color">
1769
+ <template #title>
1770
+ <label class="flex items-center gap-2 text-16px font-semibold">
1771
+ {{ $t('SSConfig.color_space') }}
1772
+ </label>
1773
+ </template>
1774
+
1775
+ <div class="flex gap-2">
1776
+ <el-form-item label="Hdr" class="max-w-190px min-w-190px" v-bind="hdrAttrs">
1777
+ <template #label>
1778
+ <SSInformationLabel label="Hdr" :info="schemaObj.hdr" />
1779
+ </template>
1780
+ <el-select
1781
+ v-model="hdrValue"
1782
+ :disabled="isCopiedVideoCodec"
1783
+ clearable
1784
+ @change="(value) => setUndefined('hdr', value)"
1785
+ >
1786
+ <el-option
1787
+ v-for="(type, idx) in ['COPY', 'NONE', 'HDR10', 'HLG10', 'PQ10']"
1788
+ :key="type + idx"
1789
+ :value="type"
1790
+ :label="type"
1791
+ />
1792
+ </el-select>
1793
+ </el-form-item>
1794
+ </div>
1795
+ </el-collapse-item>
1796
+
1797
+ <el-collapse-item v-if="typeValue === 'video' && !isPackage && encoderValue !== 'passthrough'" name="gop">
1798
+ <template #title>
1799
+ <label for="" class="flex items-center gap-2 text-16px font-semibold">
1800
+ {{ $t('SSConfig.gop_size') }}
1801
+ </label>
1802
+ </template>
1803
+
1804
+ <div class="flex gap-2">
1805
+ <el-form-item label="Bframe" class="max-w-190px min-w-190px" v-bind="bframeAttrs">
1806
+ <template #label>
1807
+ <SSInformationLabel label="Bframe" :info="schemaObj.bframe" />
1808
+ </template>
1809
+ <el-input-number
1810
+ v-model="bframeValue"
1811
+ class="w-full [&_.el-input\_\_inner]:text-start"
1812
+ :disabled="isCopiedVideoCodec"
1813
+ :controls="false"
1814
+ :precision="1"
1815
+ :step="0.1"
1816
+ :max="3"
1817
+ :min="0"
1818
+ />
1819
+ </el-form-item>
1820
+ <el-form-item label="Gop structure mode" class="max-w-190px min-w-190px" v-bind="gopModeAttrs">
1821
+ <template #label>
1822
+ <SSInformationLabel label="Gop structure mode" :info="schemaObj.gopMode" />
1823
+ </template>
1824
+ <el-select
1825
+ v-model="gopModeValue"
1826
+ class="w-full"
1827
+ :disabled="isCopiedVideoCodec"
1828
+ clearable
1829
+ @change="gopValue = undefined"
1830
+ >
1831
+ <el-option
1832
+ v-for="(type, idx) in optionGopMode"
1833
+ :key="type + idx"
1834
+ :value="type.value"
1835
+ :label="type.label"
1836
+ />
1837
+ </el-select>
1838
+ </el-form-item>
1839
+ <el-form-item label="Gop size" class="max-w-190px min-w-190px" v-bind="gopAttrs">
1840
+ <template #label>
1841
+ <SSInformationLabel label="Gop size" :info="schemaObj.gopMode" />
1842
+ </template>
1843
+ <el-input
1844
+ v-model="gopValue"
1845
+ :disabled="isCopiedVideoCodec || isDisabledGopSize"
1846
+ :formatter="formatter"
1847
+ :parser="parser"
1848
+ />
1849
+ </el-form-item>
1850
+ <el-form-item label="FixedGOP" class="max-w-190px min-w-190px" v-bind="fixedGOPAttrs">
1851
+ <template #label>
1852
+ <SSInformationLabel label="FixedGOP" :info="schemaObj.fixedGOP" />
1853
+ </template>
1854
+ <el-switch
1855
+ v-model="fixedGOPValue"
1856
+ :disabled="disabledWithPTEConfig"
1857
+ />
1858
+ </el-form-item>
1859
+ </div>
1860
+ </el-collapse-item>
1861
+ <el-collapse-item v-if="typeValue === 'audio'" name="other">
1862
+ <template #title>
1863
+ <label class="flex items-center gap-2 text-16px font-semibold">
1864
+ {{ $t('SSConfig.other') }}
1865
+ </label>
1866
+ </template>
1867
+
1868
+ <div class="flex flex-wrap gap-2">
1869
+ <el-form-item class="max-w-190px min-w-190px" v-bind="groupIdAttrs">
1870
+ <template #label>
1871
+ <SSInformationLabel :label="$t('general.groupId')" :info="schemaObj.name" />
1872
+ </template>
1873
+ <el-input
1874
+ v-model="groupIdValue"
1875
+ :placeholder="$t('library_preset.enter_group_id')"
1876
+ autocomplete="off"
1877
+ clearable
1878
+ :maxlength="50"
1879
+ show-word-limit
1880
+ />
1881
+ </el-form-item>
1882
+ <el-form-item
1883
+ v-if="!isPackage"
1884
+ class="max-w-190px min-w-190px"
1885
+ label="Volume"
1886
+ v-bind="volumeAttrs"
1887
+ >
1888
+ <template #label>
1889
+ <SSInformationLabel label="Volume" :info="schemaObj.volume" />
1890
+ </template>
1891
+ <el-select
1892
+ v-model="volumeValue"
1893
+ :disabled="isCopiedAudioCodec"
1894
+ class="w-full"
1895
+ default-first-option
1896
+ clearable
1897
+ @change="(value) => setUndefined('volume', value)"
1898
+ >
1899
+ <el-option
1900
+ v-for="(type, idx) in ['+5dB', '-10dB', '0.5', '2', 'loudnorm']"
1901
+ :key="type + idx"
1902
+ :value="type"
1903
+ :label="type"
1904
+ />
1905
+ </el-select>
1906
+ </el-form-item>
1907
+ <el-form-item class="max-w-190px min-w-190px" :label="$t('profile.language')" v-bind="languageAttrs">
1908
+ <template #label>
1909
+ <SSInformationLabel :label="$t('profile.language')" :info="schemaObj.language" />
1910
+ </template>
1911
+ <el-select-v2
1912
+ v-model="languageValue"
1913
+ :options="optionsLang"
1914
+ placeholder="Select"
1915
+ />
1916
+ </el-form-item>
1917
+ <el-form-item class="max-w-190px min-w-190px" :label="$t('profile.label')" v-bind="labelAttrs">
1918
+ <template #label>
1919
+ <SSInformationLabel :label="$t('profile.label')" :info="schemaObj.label" />
1920
+ </template>
1921
+ <el-input
1922
+ v-model="labelValue"
1923
+ :disabled="isCopiedAudioCodec && !isPackage"
1924
+ :placeholder="$t('profile.placeholder_label')"
1925
+ autocomplete="off"
1926
+ clearable
1927
+ show-word-limit
1928
+ maxlength="50"
1929
+ @change="(value) => setUndefined('label', value)"
1930
+ />
1931
+ </el-form-item>
1932
+ <el-form-item class="max-w-190px min-w-190px" :label="$t('profile.default')" v-bind="defaultAttrs">
1933
+ <template #label>
1934
+ <SSInformationLabel :label="$t('profile.default')" :info="schemaObj.audioDefault" />
1935
+ </template>
1936
+ <el-switch
1937
+ v-model="defaultValue"
1938
+ />
1939
+ </el-form-item>
1940
+ </div>
1941
+ </el-collapse-item>
1942
+ </el-collapse>
1943
+ </template>
1944
+ <DevOnly>
1945
+ <el-button @click="fillVideo">
1946
+ Fill Video
1947
+ </el-button>
1948
+ <el-button @click="fillAudio">
1949
+ Fill Audio
1950
+ </el-button>
1951
+ <el-button @click="fillData">
1952
+ Fill Data
1953
+ </el-button>
1954
+ </DevOnly>
1955
+
1956
+ <SSRecommendedConfigurationPTE v-if="isVisibleRecommend" v-model:visible="isVisibleRecommend" @apply-config="handleApplyConfig" />
1957
+ </template>