TUIVoiceRoomはオープンソースのオーディオビデオUIコンポーネントであり、プロジェクトにTUIVoiceRoomコンポーネントを統合することにより、数行のコードを書くだけで、Appに「多人数ボイスチャット」などのシーンを組み込むことができます。TUIVoiceRoomはAndroidなどのプラットフォームをサポートしています。基本機能は下図のとおりです:
説明:TUIKitシリーズコンポーネントはTencent CloudのTRTCとIMという2つの基本的なPaaSサービスを同時に使用し、TRTCをアクティブにした後、IMサービスを同期的にアクティブにすることができます。IMサービスの課金ルールの詳細については、Instant Messagingの料金説明をご参照ください。TRTCをアクティブにすると、デフォルトでは、100DAUまでサポートするIM SDK体験版もアクティブになりますs。
xcodeプロジェクトのPodfile
ファイルと同一階層のディレクトリ下にTUIVoiceRoom
フォルダを作成し、Githubリポジトリ iOSディレクトリ下のTXAppBasic、Resources、Source、TUIVoiceRoom.podspecなどのファイルを、ご自身のプロジェクトで作成したTUIVoiceRoom
ディレクトリ下にコピーします。さらに、次のようにインポート動作を完了します:
プロジェクトのPodfileファイルを開き、TUIVocieRoom.podspecをインポートします。次をご参照ください:
# pathはTXAppBasic.podspecのPodfileファイルに対する相対パスです
pod 'TXAppBasic', :path => "TUIVoiceRoom/TXAppBasic/"
# pathはTUIVoiceRoom.podspecのPodfileファイルに対する相対パスです
pod 'TUIVoiceRoom', :path => "TUIVoiceRoom/", :subspecs => ["TRTC"]
端末でPodfileのあるディレクトリ下に入り、pod install
を実行します。次をご参照ください:
pod install
info.plistファイルにおいて、Privacy > Microphone Usage Description
を追加して、マイクの権限を申請してください。
<key>NSMicrophoneUsageDescription</key>
<string>VoiceRoomAppはマイクへのアクセス権限が必要です。有効にした後にレコーディングしたビデオでなければ音声は出ません</string>
// 初期化
let mTRTCVoiceRoom = TRTCVoiceRoom.shared()
// ログイン
mTRTCVoiceRoom.login(sdkAppID: SDKAppID, userId: userId, userSig: userSig) { code, message in
if code == 0 {
//ログイン成功
}
}
パラメータの説明:
管理者によるボイスチャットルーム作成の実装TRTCVoiceRoom#createRoom
// ボイスチャットルームパラメータの初期化
let roomParam = VoiceRoomParam()
roomParam.roomName = "ルーム名"
roomParam.needRequest = false // リスナーのマイク・オンに対する管理者の同意の要否
roomParam.coverUrl = "ルームカバー図のURL"
roomParam.seatCount = 7 // ルームの座席数。ここでは計7席あり、管理者が1席を占め、残り6席がリスナーとなります
roomParam.seatInfoList = []
// マイク情報の初期化
for _ in 0..< param.seatCount {
let seatInfo = VoiceRoomSeatInfo()
param.seatInfoList.append(seatInfo)
}
// 管理者側でルームを作成
mTRTCVoiceRoom.createRoom(roomID: yourRoomID, roomParam: roomParam) { (code, message) in
if code == 0 {
// 作成に成功
}
}
リスナーのボイスチャットルーム入室の実装TRTCVoiceRoom#enterRoom
// 1.リスナーが呼び出して入室
mTRTCVoiceRoom.enterRoom(roomID: roomID) { (code, message) in
// 入室結果コールバック
if code == 0 {
// 入室に成功
}
}
リスナーの自主的なマイク・オンの実装TRTCVoiceRoom#enterRoom
// 1: リスナーが呼び出してマイク・オン
let seatIndex = 2; //マイクのindex
mTRTCVoiceRoom.enterSeat(seatIndex: 2) { (code, message) in
if code == 0 {
// マイク・オン成功
}
}
// 2. onSeatListChangeコールバックを受信し、マイクリストを更新します
@Override
func onSeatListChange(seatInfoList: [VoiceRoomSeatInfo]) {
// 更新したマイクリスト
}
管理者による視聴者発言招待の実装TRTCVoiceRoom#pickSeat
// 1: 管理者が呼び出して、視聴者が発言できるように招待
let seatIndex = 2; //マイクのindex
let userId = "123"; //マイク・オンが必要なユーザーid
mTRTCVoiceRoom.pickSeat(seatIndex: 1, userId: "123") { (code, message) in
if code == 0 {
}
}
// 2. onSeatListChangeコールバックを受信し、マイクリストを更新します
func onSeatListChange(seatInfoList: [VoiceRoomSeatInfo]) {
// 更新したマイクリスト
}
リスナーによるマイク・オン申請の実装 TRTCVoiceRoom#sendInvitation
// リスナー側の視点
// 1.リスナーが呼び出してマイク・オンを申請
let seatIndex = "1"; //マイクのindex
let userId = "123"; //ユーザーid
let inviteId = mTRTCVoiceRoom.sendInvitation(cmd: "takeSeat", userId: ownerUserId, content: "1") { (code, message) in
// 発信結果のコールバック
}
// 2.招待のリクエスト同意を受信し、正式にマイク・オンになります
func onInviteeAccepted(identifier: String, invitee: String) {
if identifier == selfID {
self.mTRTCVoiceRoom.enterSeat(seatIndex: ) { (code, message) in
// マイク・オン結果のコールバック
}
}
}
// 管理者側の視点
// 1.管理者がリクエストを受信します
func onReceiveNewInvitation(identifier: String, inviter: String, cmd: String, content: String) {
if cmd == "takeSeat" {
// 2.管理者がリスナーのリクエストに同意します
self.mTRTCVoiceRoom.acceptInvitation(identifier: identifier, callback: nil)
}
}
管理者によるマイク・オンへの招待の実装 TRTCVoiceRoom#sendInvitation
// 管理者側の視点
// 1.管理者はsendInvitationを呼び出して、リスナー「123」をピックして2号マイクのマイク・オンをリクエストします
let inviteId = self.mTRTCVoiceRoom.sendInvitation(cmd: "pickSeat", userId: ownerUserId, content: "2") { (code, message) in
// 発信結果のコールバック
}
// 2.招待のリクエスト同意を受信し、正式にマイク・オンになります
func onInviteeAccepted(identifier: String, invitee: String) {
if identifier == selfID {
self.mTRTCVoiceRoom.pickSeat(seatIndex: ) { (code, message) in
// マイク・オン結果のコールバック
}
}
}
// リスナー側の視点
// 1.リスナーがリクエストを受信します
func onReceiveNewInvitation(identifier: String, inviter: String, cmd: String, content: String) {
if cmd == "pickSeat" {
// 2.リスナーが管理者のリクエストに同意します
self.mTRTCVoiceRoom.acceptInvitation(identifier: identifier, callback: nil)
}
}
テキストチャットの実装 TRTCVoiceRoom#sendRoomTextMsg
// 発信側:テキストメッセージの発信
self.mTRTCVoiceRoom.sendRoomTextMsg(message: message) { (code, message) in
}
// 受信側:テキストメッセージのモニタリング
func onRecvRoomTextMsg(message: String, userInfo: VoiceRoomUserInfo) {
// 受信したmessage情報の処理方法
}
弾幕コメントの実装 TRTCVoiceRoom#sendRoomCustomMsg
// 例:発信側:カスタマイズCmdによって、弾幕と「いいね」情報を区分することができます
// eg:「CMD_DANMU」は弾幕コメントを表し、「CMD_LIKE」は「いいね」情報を表します
self.mTRTCVoiceRoom.sendRoomCustomMsg(cmd: "CMD_DANMU", message: "hello world", callback: nil)
self.mTRTCVoiceRoom.sendRoomCustomMsg(cmd: "CMD_LIKE", message: "", callback: nil)
// 受信側:カスタムメッセージのモニタリング
func onRecvRoomCustomMsg(cmd: String, message: String, userInfo: VoiceRoomUserInfo) {
if cmd == "CMD_DANMU" {
// 弾幕コメントの受信
}
if cmd == "CMD_LIKE" {
// 「いいね」情報の受信
}
}
ご要望やフィードバックなどがございましたら、colleenyu@tencent.comまでご連絡ください。
この記事はお役に立ちましたか?