



npm create vite@latest TUIRoom-demo -- --template vue
cd TUIRoom-demonpm installnpm run dev
// vue-cli를 설치, Vue CLI 4.x는 Node.js가 v10 이상이어야 함npm install -g @vue/cli// Vue3 + Webpack + TS 템플릿 프로젝트 생성vue create TUIRoom-demo

cd TUIRoom-demonpm run serve
TUIRoom/Web/src/TUIRoom 폴더를 프로젝트의 src/ 디렉터리에 복사합니다.<template><room ref="TUIRoomRef"></room></template><script setup lang="ts">import { ref, onMounted } from 'vue';// TUIRoom 컴포넌트를 가져옵니다. 올바른 가져오기 경로를 사용해야 함import Room from './TUIRoom/index.vue';// 컴포넌트의 메소드를 호출하는 데 사용되는 TUIRoom 컴포넌트 요소 가져오기const TUIRoomRef = ref();onMounted(async () => {// TUIRoom 컴포넌트 초기화// 호스트는 방을 만들기 전에 TUIRoom 컴포넌트를 초기화해야 함// 참석자는 방에 들어가기 전에 TUIRoom 컴포넌트를 초기화해야 함await TUIRoomRef.value.init({// sdkAppId 가져오기(1단계 참고)sdkAppId: 0,// 귀하의 비즈니스에서 사용자의 고유 IduserId: '',// 로컬 개발 및 디버깅을 위해 https://console.tencentcloud.com/trtc/usersigtool 에서 userSig를 빠르게 생성할 수 있습니다. userSig 와 userId는 일대일 대응 관계임userSig: '',// 귀하의 비즈니스에서 사용자의 사용자 이름userName: '',// 비즈니스에 있는 사용자의 프로필 사진에 연결userAvatar: '',// 화면 공유에 사용되는 사용자의 고유 Id입니다. shareUserId = `share_${userId}`여야 합니다. 화면 공유 기능이 필요하지 않은 경우 이 매개변수 불필요shareUserId: '',// 이 문서의 1단계 > 3단계를 참고하여 sdkAppId 및 shareUserId 를 사용하여 shareUserSig 발행shareUserSig: '',})// 기본적으로 방이 생성됩니다. 실제 연결 시 필요에 따라 handleCreateRoom 메소드를 실행할 수 있음await handleCreateRoom();})// 호스트가 방을 만듭니다. 이 메소드는 방을 생성할 때만 호출됨async function handleCreateRoom() {// roomId는 사용자가 입력한 roomId로 숫자여야 함// roomMode에는 ‘FreeSpeech’(자유롭게 말하기) 및 ‘ApplySpeech’(손 들고 말하기) 포함, 기본값은 ‘FreeSpeech’이며 현재 유일하게 지원되는 모드임// roomParam은 방에 들어가는 사용자의 기본 동작을 지정함(기본적으로 마이크를 켤지 여부, 기본적으로 카메라를 켤지 여부, 기본 미디어 장치 Id)const roomId = 123456;const roomMode = 'FreeSpeech';const roomParam = {isOpenCamera: true,isOpenMicrophone: true,}await TUIRoomRef.value.createRoom(roomId, roomMode, roomParam);}// 참석자 방 입장. 이 메소드는 참석자가 생성된 방에 들어갈 때 호출됨async function handleEnterRoom() {// roomId는 사용자가 입력한 roomId로 숫자여야 함// roomParam은 방에 들어가는 사용자의 기본 동작을 지정함(기본적으로 마이크를 켤지 여부, 기본적으로 카메라를 켤지 여부, 기본 미디어 장치 Id)const roomId = 123456;const roomParam = {isOpenCamera: true,isOpenMicrophone: true,}await TUIRoomRef.value.enterRoom(roomId, roomParam);}</script><style>html, body {width: 100%;height: 100%;margin: 0;}#app {width: 100%;height: 100%;}</style>
npm install sass typescript unplugin-auto-import unplugin-vue-components -S -D
npm install element-plus events mitt pinia rtc-beauty-plugin tim-js-sdk trtc-js-sdk tsignaling -S
src/main.ts에 Pinia를 등록해야 합니다.// src/main.ts 파일import { createPinia } from 'pinia';const app = createApp(App);// pinia 등록app.use(createPinia());app.mount('#app');
vite.config.ts에서 구성해야 합니다.// vite.config.tsimport AutoImport from 'unplugin-auto-import/vite';import Components from 'unplugin-vue-components/vite';import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';export default defineConfig({// ...plugins: [AutoImport({resolvers: [ElementPlusResolver()],}),Components({resolvers: [ElementPlusResolver({importStyle: 'sass',})],}),],css: {preprocessorOptions: {scss: {// ...additionalData: `@use "./src/TUIRoom/assets/style/element.scss" as *;`,},},},});
src/main.ts에 element-plus 컴포넌트 스타일을 로딩해야 합니다.// src/main.tsimport 'element-plus/theme-chalk/el-message.css';import 'element-plus/theme-chalk/el-message-box.css';
npm install sass sass-loader typescript unplugin-auto-import unplugin-vue-components unplugin-element-plus @types/events -S -D
npm install element-plus events mitt pinia rtc-beauty-plugin tim-js-sdk trtc-js-sdk tsignaling -S
src/main.ts에 Pinia를 등록해야 합니다.// src/main.ts 파일import { createPinia } from 'pinia';const app = createApp(App);// pinia 등록app.use(createPinia());app.mount('#app');
vue.config.js에서 구성해야 합니다.// vue.config.jsconst { defineConfig } = require('@vue/cli-service')const AutoImport = require('unplugin-auto-import/webpack')const Components = require('unplugin-vue-components/webpack')const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')const ElementPlus = require('unplugin-element-plus/webpack')module.exports = defineConfig({transpileDependencies: true,css: {loaderOptions: {scss: {additionalData: '@use "./src/TUIRoom/assets/style/element.scss" as *;'}}},configureWebpack: {plugins: [AutoImport({resolvers: [ElementPlusResolver({ importStyle: 'sass' })]}),Components({resolvers: [ElementPlusResolver({ importStyle: 'sass' })]}),// 주문형으로 가져올 때 테마 색상 사용자 지정ElementPlus({useSource: true})]}})
src/main.ts에 element-plus 컴포넌트 스타일을 로딩해야 합니다.// src/main.tsimport 'element-plus/theme-chalk/el-message.css';import 'element-plus/theme-chalk/el-message-box.css';
src/shims-vue.d.ts 파일에 다음 구성을 추가합니다.declare module 'tsignaling/tsignaling-js' {import TSignaling from 'tsignaling/tsignaling-js';export default TSignaling;}declare module 'tim-js-sdk' {import TIM from 'tim-js-sdk';export default TIM;}declare const Aegis: any;
npm run dev
http://localhost:3000/에 접속합니다.npm run serve
http://localhost:8080/에 접속합니다.npm run build

TUIRoomRef.value.init(roomData);
매개변수 | 유형 | 의미 |
roomData | object | |
roomData.sdkAppId | number | 고객 SDKAppId |
roomData.userId | string | 사용자 고유 ID |
roomData.userSig | string | 사용자 UserSig |
roomData.userName | string | 사용자 닉네임 |
roomData.userAvatar | string | 사용자 프로필 |
roomData.shareUserId | string | 선택 사항, 화면 공유에 사용되는 UserId, shareUserId = share_${userId}여야 하며, 화면 공유 기능이 없는 경우 불필요 |
roomData.shareUserSig | string | 선택 사항, 화면 공유에 사용되는 UserSig |
TUIRoomRef.value.createRoom(roomId, roomMode, roomParam);
매개변수 | 유형 | 의미 |
roomId | number | 방 ID |
roomMode | string | ‘FreeSpeech’(자유롭게 말하기) 및 ‘ApplySpeech’(손 들고 말하기)를 포함한 방 모드, 기본값은 ‘FreeSpeech’이며 현재 유일하게 지원되는 모드임 |
roomParam | Object | 선택 사항 |
roomParam.isOpenCamera | string | 선택 사항, 방에 입장할 때 카메라 켜기 여부, 기본값은 No |
roomParam.isOpenMicrophone | string | 선택 사항, 방 입장 시 마이크 켜기 여부, 기본값은 No |
roomParam.defaultCameraId | string | 선택 사항, 기본 카메라의 ID |
roomParam.defaultMicrophoneId | string | 선택 사항, 기본 마이크의 ID |
roomParam.defaultSpeakerId | String | 선택 사항, 기본 스피커의 ID |
TUIRoomRef.value.enterRoom(roomId, roomParam);
매개변수 | 유형 | 의미 |
roomId | number | 방 ID |
roomParam | Object | 선택 사항 |
roomParam.isOpenCamera | string | 선택 사항, 방에 입장할 때 카메라 켜기 여부, 기본값은 No |
roomParam.isOpenMicrophone | string | 선택 사항, 방 입장 시 마이크 켜기 여부, 기본값은 No |
roomParam.defaultCameraId | string | 선택 사항, 기본 카메라의 ID |
roomParam.defaultMicrophoneId | string | 선택 사항, 기본 마이크의 ID |
roomParam.defaultSpeakerId | String | 선택 사항, 기본 스피커의 ID |
<template><room ref="TUIRoomRef" @on-room-create="handleRoomCreate"></room></template><script setup lang="ts">// TUIRoom 컴포넌트를 가져옵니다. 올바른 가져오기 경로를 사용해야 함import Room from './TUIRoom/index.vue';function handleRoomCreate(info) {if (info.code === 0) {console.log(‘방 생성 완료’)}}</script>
<template><room ref="TUIRoomRef" @on-room-enter="handleRoomEnter"></room></template><script setup lang="ts">// TUIRoom 컴포넌트를 가져옵니다. 올바른 가져오기 경로를 사용해야 함import Room from './TUIRoom/index.vue';function handleRoomEnter(info) {if (info.code === 0) {console.log(‘방 입장 완료’)}}</script>
<template><room ref="TUIRoomRef" @on-room-destory="handleRoomDestory"></room></template><script setup lang="ts">// TUIRoom 컴포넌트를 가져옵니다. 올바른 가져오기 경로를 사용해야 함import Room from './TUIRoom/index.vue';function handleRoomDestory(info) {if (info.code === 0) {console.log(‘호스트가 방 종료 완료’)}}</script>
<template><room ref="TUIRoomRef" @on-room-exit="handleRoomExit"></room></template><script setup lang="ts">// TUIRoom 컴포넌트를 가져옵니다. 올바른 가져오기 경로를 사용해야 함import Room from './TUIRoom/index.vue';function handleRoomExit(info) {if (info.code === 0) {console.log(‘참석자 방 퇴장 완료’)}}</script>
<template><room ref="TUIRoomRef" @on-kick-off="handleKickOff"></room></template><script setup lang="ts">// TUIRoom 컴포넌트를 가져옵니다. 올바른 가져오기 경로를 사용해야 함import Room from './TUIRoom/index.vue';function handleKickOff(info) {if (info.code === 0) {console.log(‘호스트에 의해 참석자 방 강제 퇴장’)}}</script>
피드백