TUILiveRoomはオープンソースのビデオライブストリーミングUIコンポーネントであり、プロジェクトにTUILiveRoomコンポーネントを統合することにより、数行のコードを書くだけで、Appに「ビデオインタラクティブストリーミング」のシーンを組み込むことができます。TUILiveRoomにはAndroid、iOSなどのプラットフォーム用のソースコードが含まれます。基本機能は下図のとおりです:
説明:TUIKitシリーズコンポーネントはTencent CloudのTRTCとIMという2つの基本的なPaaSサービスを同時に使用し、TRTCをアクティブにした後、IMサービスを同期的にアクティブにすることができます。IMサービスの課金ルールの詳細については、Instant Messagingの料金説明をご参照ください。TRTCをアクティブにすると、デフォルトでは、100DAUまでサポートするIM SDK体験版もアクティブになります。
cocoapodsによってコンポーネントをインポートします。具体的な手順については、以下のとおりです:
Podfile
ファイルと同じ階層のディレクトリ下にTUILiveRoom
フォルダを作成します。Source
、Resources
、TUIBeauty
、TUIAudioEffect
、TUIBarrage
、TUIGift
、TXAppBasic
フォルダとTUILiveRoom.podspec
ファイルを、ステップ1
で作成したTUILiveRoomフォルダ下にコピーします。pod install
コマンドを実行すると、インポートが完了します。# :path => "TUILiveRoom.podspecを指定する相対パス"
pod 'TUILiveRoom', :path => "./TUILiveRoom/TUILiveRoom.podspec", :subspecs => ["TRTC"]
# :path => "TXAppBasic.podspecを指定する相対パス"
pod 'TXAppBasic', :path => "./TUILiveRoom/TXAppBasic/"
# :path => "TUIBeauty.podspecを指定する相対パス"
pod 'TUIBeauty', :path => "./TUILiveRoom/TUIBeauty/"
# :path => "TUIAudioEffect.podspecを指定する相対パス"
pod 'TUIAudioEffect', :path => "./TUILiveRoom/TUIAudioEffect/"
# :path => "TUIBarrage.podspecを指定する相対パス"
pod 'TUIBarrage', :path => "./TUILiveRoom/TUIBarrage/"
# :path => "TUIGift.podspecを指定する相対パス"
pod 'TUIGift', :path => "./TUILiveRoom/TUIGift/"
注意:
Source
、Resources
フォルダとTUILiveRoom.podspec
ファイルは同一のディレクトリ下にある必要があります。- TXAppBasic.podspecはTXAppBasicフォルダ下にあります。
オーディオビデオ機能を使用するには、マイクおよびカメラの使用権限を付与する必要があります。AppのInfo.plistで以下の2項を追加します。これらはシステムが権限付与ダイアログボックスをポップアップする際に表示される、マイクとカメラのメッセージにそれぞれ対応します。
<key>NSCameraUsageDescription</key>
<string>RoomAppはカメラへのアクセス権限が必要です。有効にした後にレコーディングしたビデオでなければ画面は出ません</string>
<key>NSMicrophoneUsageDescription</key>
<string>RoomAppはマイクへのアクセス権限が必要です。有効にした後にレコーディングしたビデオでなければ音声は出ません</string>
@import TUILiveRoom;
@import TUICore;
// 1.コンポーネントのログイン
[TUILogin login:@"あなたのSDKAppID" userID:@あなたのUserID" userSig:@"あなたのUserSig" succ:^{
} fail:^(int code, NSString *msg) {
}];
// 2.TUILiveRoomインスタンスの初期化
TUILiveRoom *mLiveRoom = [TUILiveRoom sharedInstance];
<dx-code-holder data-codeindex="2"></dx-code-holder>
パラメータの説明:
キャスター側の配信開始
[mLiveRoom createRoomWithRoomId:123 roomName:@"test room" coverUrl:@""];
視聴者側の視聴
[mLiveRoom enterRoomWithRoomId:123];
視聴者とキャスターがマイク接続 TRTCLiveRoom#requestJoinAnchor
// 1.視聴者側がマイク接続のリクエストを送信します
[TRTCLiveRoom shareInstance].delegate = self;
// @param mSelfUserId String 現在のユーザーid
NSString *mSelfUserId = @"1314";
[[TRTCLiveRoom shareInstance] requestJoinAnchor:[NSString stringWithFormat:@"%@ マイク接続をリクエスト", mSelfUserId] timeout:30 responseCallback:^(BOOL agreed, NSString * _Nullable reason) {
if (agreed) {
// キャスターが視聴者のリクエストを受け入れます
UIView *playView = [UIView new];
[self.view addSubView:playView];
// 視聴者がプレビューを起動し、プッシュを開始します
[[TRTCLiveRoom shareInstance] startCameraPreviewWithFrontCamera:YES view:playView callback:nil];
[[TRTCLiveRoom shareInstance] startPublishWithStreamID:[NSString stringWithFormat:@"%@_stream", mSelfUserId] callback:nil];
}
}];
// 2.キャスター側がマイク接続のリクエストを受信します
#pragma mark - TRTCLiveRoomDelegate
- (void)trtcLiveRoom:(TRTCLiveRoom *)trtcLiveRoom onRequestJoinAnchor:(TRTCLiveUserInfo *)user reason:(NSString *)reason {
// 相手のマイク接続のリクエストに同意します
[[TRTCLiveRoom shareInstance] responseJoinAnchor:user.userId agree:YES reason:@"マイク接続に同意"];
}
- (void)trtcLiveRoom:(TRTCLiveRoom *)trtcLiveRoom onAnchorEnter:(NSString *)userID {
// キャスターがマイク接続の視聴者のマイク・オンの通知を受信します
UIView *playView = [UIView new];
[self.view addSubview:playView];
// キャスターが視聴者の画面を再生します
[[TRTCLiveRoom shareInstance] startPlayWithUserID:userID view:playView callback:nil];
}
キャスター間のPK TRTCLiveRoom#requestRoomPK
// キャスターAがルーム12345を作成します
[[TUILiveRoom sharedInstance] createRoomWithRoomId:12345 roomName:@"roomA" coverUrl:@"roomA coverUrl"];
// キャスターBがルーム54321を作成します
[[TUILiveRoom sharedInstance] createRoomWithRoomId:54321 roomName:@"roomB" coverUrl:@"roomB coverUrl"];
// キャスターA
// キャスターAがキャスターBにPKのリクエストを送信します
[[TRTCLiveRoom shareInstance] requestRoomPKWithRoomID:543321 userID:@"roomB userId" timeout:30 responseCallback:^(BOOL agreed, NSString * _Nullable reason) {
if (agreed) {
// ユーザーBが受け入れます
}else{
// ユーザーBが拒否します
}
}];
// キャスターB:
// 2.キャスターBがキャスターAのメッセージを受信します
#pragma mark - TRTCLiveRoomDelegate
- (void)trtcLiveRoom:(TRTCLiveRoom *)trtcLiveRoom onRequestRoomPK:(TRTCLiveUserInfo *)user {
// 3.キャスターBがキャスターAに回答し、リクエストを受け入れます
[[TRTCLiveRoom shareInstance] responseRoomPKWithUserID:user.userId agree:YES reason:@""];
}
- (void)trtcLiveRoom:(TRTCLiveRoom *)trtcLiveRoom onAnchorEnter:(NSString *)userID {
// 4.キャスターBがキャスターAのルーム参加の通知を受信し、キャスターAの画面を再生します
[[TRTCLiveRoom shareInstance] startPlayWithUserID:userID view:playAView callback:nil];
}
ご要望やフィードバックなどがございましたら、colleenyu@tencent.comまでご連絡ください。
この記事はお役に立ちましたか?