tencent cloud

피드백

TUIVoiceRoom (Android) 통합

마지막 업데이트 시간:2022-09-06 14:19:54

    컴포넌트 개요

    TUIVoiceRoom은 오픈 소스 오디오/비디오 UI 컴포넌트입니다. 프로젝트에 통합한 후 몇 줄의 코드 작성만으로 App에서 ‘그룹 오디오 채팅’ 시나리오를 지원하도록 할 수 있습니다. iOS 플랫폼도 지원합니다. 기본 기능은 다음과 같습니다.

    설명:

    TUIKit 시리즈 컴포넌트는 Tencent Cloud의 두 가지 기본 PaaS 서비스, 즉 Tencent Real-Time CommunicationInstant Messaging을 사용합니다. TRTC를 활성화하면 IM과 IM SDK 평가판(100 DAU만 지원)이 자동으로 활성화됩니다. IM 과금 내역은 요금 안내를 참고하십시오.

    컴포넌트 통합

    1단계: TUIVoiceRoom 컴포넌트 다운로드 및 가져오기

    Github로 이동하여 코드를 복제하거나 다운로드하고 Android/Source 디렉터리를 프로젝트에 복사하고 다음 가져오기 작업을 완료합니다.

    • 아래와 같이 setting.gradle에서 가져오기 완료:

      include ':Source'
      
    • app의 build.gradle 파일에 Source에 대한 종속성을 추가합니다.

      api project(':Source')
      
    • 루트 디렉터리의 build.gradle 파일에 TRTC SDKIM SDK에 대한 종속성 추가:

      ext {
       liteavSdk = "com.tencent.liteav:LiteAVSDK_TRTC:latest.release"
       imSdk = "com.tencent.imsdk:imsdk-plus:latest.release"
      }
      

    2단계: 권한 요청 및 난독화 규칙 구성

    AndroidManifest.xml에서 App 권한을 설정합니다. SDK에는 다음 권한이 필요합니다(Android 6.0 이상에서는 런타임 시 마이크 액세스를 요청해야 함).

    <uses-permission android:name="android.permission.INTERNET" />              
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    

    proguard-rules.pro 파일에서 SDK 클래스를 난독화 금지 목록에 추가합니다.

    -keep class com.tencent.** { *; }
    
    

    3단계: 컴포넌트 초기화 및 로그인

       // 1. 초기화,
       TRTCVoiceRoom mTRTCVoiceRoom = TRTCVoiceRoom.sharedInstance(this);
       mTRTCVoiceRoom.setDelegate(new TRTCVoiceRoomDelegate() {
       );
          // 2. 로그인,
       mTRTCVoiceRoom.login(SDKAppID, userId, userSig, new TRTCVoiceRoomCallback.ActionCallback() {
           @Override
           public void onCallback(int code, String msg) {
               if (code == 0) {
               //로그인 성공
               }
           }
       });
    

    매개변수 설명:

    • SDKAppID: TRTC 애플리케이션 ID입니다. TRTC 서비스를 활성화하지 않은 경우 TRTC 콘솔에 로그인하여 TRTC 애플리케이션을 생성하고 애플리케이션 정보를 클릭합니다. SDKAppID는 아래와 같습니다.
    • Secretkey: SDKAppID에 해당하는 TRTC 애플리케이션 키. TRTC 콘솔의 애플리케이션 관리 페이지에서 SecretKey는 아래와 같습니다.
    • userId: 현재 사용자의 ID로, 문자(a-z 및 A-Z), 숫자(0-9), 하이픈(-) 및 언더바(_)만 포함할 수 있는 문자열입니다. 사용자 계정 시스템과 일관성을 유지하는 것이 좋습니다.
    • userSig: SDKAppId, userId 및 Secretkey를 기반으로 계산된 보안 보호 서명입니다. 여기를 클릭하여 디버깅 userSig를 온라인으로. 자세한 내용은 UserSig를 참고하십시오.

    4단계: 음성 채팅방 구현

    1. 방 주인은 TRTCVoiceRoom#createRoom을 통해 음성 대화방 생성

      // 1.방주인은 API를 호출하여 방 생성
      int roomId = 12345; //방 id
      final TRTCVoiceRoomDef.RoomParam roomParam = new TRTCVoiceRoomDef.RoomParam();
      roomParam.roomName = "방 이름";
      roomParam.needRequest = false; // 마이크 연결 시 방주인 확인 필요 여부
      roomParam.seatCount = 7; // 방의 자리 수, 총 7개로 설정하고 방주인이 한 개를 점유한 후 시청자가 남은 6개 자리 점유
      roomParam.coverUrl = "방 표지 이미지의 URL";
      mTRTCVoiceRoom.createRoom(roomId, roomParam, new TRTCVoiceRoomCallback.ActionCallback() {
      @Override
      public void onCallback(int code, String msg) {
          if (code == 0) {
               //방 생성 성공
          }
      }
      });
      
    2. 청취자는 TRTCVoiceRoom#enterRoom을 통해 오디오 대화방에 입장

      // 1.청취자가 API를 호출하여 방에 입장
      mTRTCVoiceRoom.enterRoom(roomId, new TRTCVoiceRoomCallback.ActionCallback() {
          @Override
          public void onCallback(int code, String msg) {
              if (code == 0) {
              //방 들어가기 성공
              }
          }
      });
      
    3. 청취자는 TRTCVoiceRoom#enterSeat를 통해 마이크 켬

      // 1: 청취자가 마이크를 켜기 위해 API 호출
      int seatIndex = 2; //좌석 index
      mTRTCVoiceRoom.enterSeat(seatIndex, new TRTCVoiceRoomCallback.ActionCallback() {
      @Override
      public void onCallback(int code, String msg) {
          if (code == 0) {
          //작업 완료
          }
      }
      });
      // 2.onSeatListChange 콜백 수신, 마이크 위치 리스트 새로고침
      @Override
      public void onSeatListChange(final List<TRTCVoiceRoomDef.SeatInfo> seatInfoList) {
      }
      
    4. 방 주인이 TRTCVoiceRoom#pickSeat를 통해 청취자 마이크 활성화

      // 1: 방 주인이 청취자를 초대
      int seatIndex = 2; //좌석 index
      String userId = "123"; //발언할 사용자의 id
      mTRTCVoiceRoom.pickSeat(1, userId, new TRTCVoiceRoomCallback.ActionCallback() {
      @Override
      public void onCallback(int code, String msg) {
          if (code == 0) {
               //작업 완료
          }
      }
      });
      // 2.onSeatListChange 콜백 수신, 마이크 위치 리스트 새로고침
      @Override
      public void onSeatListChange(final List<TRTCVoiceRoomDef.SeatInfo> seatInfoList) {
      }
      
    5. 청취자는 TRTCVoiceRoom#sendInvitation을 통해 발언 요청

      // 청취자 앵글
      // 1.청취자가 API를 호출하여 말하기 요청
      String seatIndex = "1"; //좌석 index
      String userId = "123"; //사용자 id
      String inviteId = mTRTCVoiceRoom.sendInvitation("takeSeat", userId, seatIndex, null);
      // 2.초대가 수락된 후 사용자를 자리에 앉힘
      @Override
      public void onInviteeAccepted(String id, String invitee) {
      if(id.equals(inviteId)) {
          mTRTCVoiceRoom.enterSeat(index, null);
      }
      }
      // 방 주인 앵글
      // 1. 방 주인이 요청을 수신함
      @Override
      public void onReceiveNewInvitation(final String id, String inviter, String cmd, final String content) {
      if (cmd.equals("takeSeat")) {
          // 2.방 주인이 청취자 요청에 동의
           mTRTCVoiceRoom.acceptInvitation(id, null);
      }
      }
      
    6. 방 주인은 TRTCVoiceRoom#sendInvitation을 통해 청취자 초대

      // 방 주인 앵글
      // 1.방 주인은 API를 호출하여 청취자에게 발언 요청
      String seatIndex = "1"; //좌석 index
      String userId = "123"; //사용자 id
      String inviteId = mTRTCVoiceRoom.sendInvitation("pickSeat", userId, seatIndex, null);
      // 2.초대가 수락된 후 사용자를 자리에 앉힘
      @Override
      public void onInviteeAccepted(String id, String invitee) {
      if(id.equals(inviteId)) {
          mTRTCVoiceRoom.pickSeat(index, null);
      }
      }
      // 청취자 앵글
      // 1.청취자가 요청을 수신함
      @Override
      public void onReceiveNewInvitation(final String id, String inviter, String cmd, final String content) {
      if (cmd.equals("pickSeat")) {
          // 2.청취자의 방 주인 요청 수락
           mTRTCVoiceRoom.acceptInvitation(id, null);
      }
      }
      
    7. TRTCVoiceRoom#sendRoomTextMsg를 통한 문자 채팅 구현

      // 발신측: 텍스트 메시지 발송
      mTRTCVoiceRoom.sendRoomTextMsg("Hello Word!", null);
      // 수신측: 텍스트 메시지 수신
      mTRTCVoiceRoom.setDelegate(new TRTCVoiceRoomDelegate() {
      @Override
      public void onRecvRoomTextMsg(String message, TRTCVoiceRoomDef.UserInfo userInfo) {
        Log.d(TAG, userInfo.userName + "님이 발송한 메시지:" + message);
      }
      });
      
    8. TRTCVoiceRoom#sendRoomCustomMsg를 통한 화면 댓글 구현

      // 발신 측: 사용자 정의 Cmd를 통해 댓글 자막과 '좋아요' 메시지 구분 가능
      // eg: "CMD_DANMU": 댓글 자막 메시지, "CMD_LIKE": '좋아요' 메시지
      mTRTCVoiceRoom.sendRoomCustomMsg("CMD_DANMU", "Hello world", null);
      mTRTCVoiceRoom.sendRoomCustomMsg("CMD_LIKE", "", null);
      // 수신측: 사용자 정의 메시지 수신
      mTRTCVoiceRoom.setDelegate(new TRTCVoiceRoomDelegate() {
      @Override
      public void onRecvRoomCustomMsg(String cmd, String message, TRTCVoiceRoomDef.UserInfo userInfo) {
          if ("CMD_DANMU".equals(cmd)) {
              // 댓글 자막 메시지 수신
              Log.d(TAG, userInfo.userName + "님이 발송한 댓글 자막 메시지:" + message);
          } else if ("CMD_LIKE".equals(cmd)) {
              // '좋아요' 메시지 수신
              Log.d(TAG, userInfo.userName + "좋아요를 눌렀습니다!");
          }
      }
      });
      

    FAQ

    요구 사항이나 피드백은 colleenyu@tencent.com으로 문의하십시오.

    문의하기

    고객의 업무에 전용 서비스를 제공해드립니다.

    기술 지원

    더 많은 도움이 필요하시면, 티켓을 통해 연락 바랍니다. 티켓 서비스는 연중무휴 24시간 제공됩니다.

    연중무휴 24시간 전화 지원