Tencent CloudのTRTCは、iOSプラットフォームで2つの異なる画面共有ソリューションをサポートしています:
iOS | Android | Mac OS | Windows | Electron | Chromeブラウザ |
---|---|---|---|---|---|
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
アプリケーション内の共有ソリューションは非常にシンプルです。TRTC SDKが提供するインターフェースstartScreenCaptureInAppを呼び出し、エンコードパラメータTRTCVideoEncParam
を渡すだけでOKです。このパラメータはnilに設定することができます。この場合、SDKは画面共有が開始される前のエンコードパラメータを引き続き使用します。
iOS画面共有に推奨されるエンコードパラメータは次のとおりです:
パラメータ項目 | パラメータ名 | 通常の推奨値 | テキスト教育シナリオ |
---|---|---|---|
解像度 | videoResolution | 1280 × 720 | 1920 × 1080 |
フレームレート | videoFps | 10 FPS | 8 FPS |
最高ビットレート | videoBitrate | 1600 kbps | 2000 kbps |
解像度アダプティブ | enableAdjustRes | NO | NO |
iOSシステムでアプリケーション間画面共有を行うには、Broadcast Upload Extensionスクリーンキャプチャプロセスを追加して、メインAppプロセスと連携してプッシュを行う必要があります。Extensionスクリーンキャプチャプロセスは、システムによってスクリーンキャプチャが必要なときに作成され、システムが収集した画面イメージの受信を担当します。従って、以下を実行してください:
TXLiteAVSDK_ReplayKitExt.framework
を統合します。注意:手順1をスキップした場合、すなわちApp Groupsを設定しない場合は(インターフェースはnilを渡します)、画面共有は実行できますが、安定性が若干損なわれます。手順はやや多いですが、できる限り正しいApp Groupsを設定して、画面共有機能の安定性を確保してください。
お客様のアカウントを使用してhttps://developer.apple.com/にログインし、次の操作を実行します。完了後は、対応するProvisioning Profileを再ダウンロードする必要がありますので、ご注意ください。
Target名.entitlements
という名前のファイルが生成されます。このファイルを選択し、+記号をクリックして上記の手順のApp Groupを入力してください。#import "SampleHandler.h"
@import TXLiteAVSDK_ReplayKitExt;
#define APPGROUP @"group.com.tencent.liteav.RPLiveStreamShare"
@interface SampleHandler() <txreplaykitextdelegate>
@end
@implementation SampleHandler
// 注意:ここでのAPPGROUPは、先ほど作成したApp Group Identifierに変更してください。
- (void)broadcastStartedWithSetupInfo:(NSDictionary<nsstring *,nsobject="" *=""> *)setupInfo {
[[TXReplayKitExt sharedInstance] setupWithAppGroup:APPGROUP delegate:self];
}
- (void)broadcastPaused {
// User has requested to pause the broadcast. Samples will stop being delivered.
}
- (void)broadcastResumed {
// User has requested to resume the broadcast. Samples delivery will resume.
}
- (void)broadcastFinished {
[[TXReplayKitExt sharedInstance] finishBroadcast];
// User has requested to finish the broadcast.
}
#pragma mark - TXReplayKitExtDelegate
- (void)broadcastFinished:(TXReplayKitExt *)broadcast reason:(TXReplayKitExtReason)reason
{
NSString *tip = @"";
switch (reason) {
case TXReplayKitExtReasonRequestedByMain:
tip = @"画面共有は終了しました";
break;
case TXReplayKitExtReasonDisconnected:
tip = @"アプリケーションは切断されました";
break;
case TXReplayKitExtReasonVersionMismatch:
tip = @"統合エラー(SDKバージョン番号が一致しません)";
break;
}
NSError *error = [NSError errorWithDomain:NSStringFromClass(self.class)
code:0
userInfo:@{
NSLocalizedFailureReasonErrorKey:tip
}];
[self finishBroadcastWithError:error];
}
- (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType {
switch (sampleBufferType) {
case RPSampleBufferTypeVideo:
[[TXReplayKitExt sharedInstance] sendVideoSampleBuffer:sampleBuffer];
break;
case RPSampleBufferTypeAudioApp:
// Handle audio sample buffer for app audio
break;
case RPSampleBufferTypeAudioMic:
// Handle audio sample buffer for mic audio
break;
default:
break;
}
}
@end
以下の手順に従って、メインアプリ側の受信ロジックと結合します。すなわち、ユーザーが画面共有をトリガーする前に、メインアプリを「待機」状態にして、Broadcast Upload Extensionプロセスからスクリーンキャプチャデータをいつでも受信できるようにします。
TRTCCloudがカメラのキャプチャをオフにしていることを確認します。オフになっていない場合は、stopLocalPreviewを呼び出して、カメラのキャプチャをオフにしてください。
startScreenCaptureByReplaykit:appGroup:メソッドを呼び出し、手順1で設定したAppGroupを渡して、SDKを「待機」状態にします。
ユーザーが画面共有をトリガーするまで待機します。手順4における「トリガーボタン」が実装されていない場合、ユーザーがiOSシステムのコントロールセンターにおいて、スクリーンキャプチャボタンを長押しして画面共有をトリガーしてください。この操作手順は下図のようになります:
stopScreenCaptureインターフェースを呼び出すことにより、いつでも画面共有を停止できます。
// 画面共有を開始するには、APPGROUPを上記の手順で作成したApp Group Identifierに置き換えてください。
- (void)startScreenCapture {
TRTCVideoEncParam *videoEncConfig = [[TRTCVideoEncParam alloc] init];
videoEncConfig.videoResolution = TRTCVideoResolution_1280_720;
videoEncConfig.videoFps = 10;
videoEncConfig.videoBitrate = 2000;
//APPGROUPを上記の手順で作成したApp Group Identifierに置き換えてください。
[[TRTCCloud sharedInstance] startScreenCaptureByReplaykit:videoEncConfig
appGroup:APPGROUP];
}
// 画面共有を停止します
- (void)stopScreenCapture {
[[TRTCCloud sharedInstance] stopScreenCapture];
}
// 画面共有の開始イベントの通知は、TRTCCloudDelegateを介して受信できます
- (void)onScreenCaptureStarted {
[self showTip:@"画面共有の開始"];
}
手順3までに、ユーザーがコントロールセンターからスクリーンキャプチャボタンを長押しして、画面共有を手動で開始する必要があります。以下の方法で、VooVMeetingのように、ボタンをクリックすることでトリガーする効果を実現できます:
TRTCBroadcastExtensionLauncher
のlaunch
関数を呼び出すと、画面共有機能を呼び出すことができます。// カスタムボタンによる応答メソッド
- (IBAction)onScreenButtonTapped:(id)sender {
[TRTCBroadcastExtensionLauncher launch];
}
注意:
- AppleはiOS12.0に
RPSystemBroadcastPickerView
を追加しました。これによって、ユーザーがアプリケーションからランチャーをポップアップして、画面共有の開始を確認することができます。現時点では、RPSystemBroadcastPickerView
はインターフェースのカスタマイズをサポートしておらず、公式の呼び出しメソッドもありません。- TRTCBroadcastExtensionLauncherの原理とは、
RPSystemBroadcastPickerView
のサブViewをスキャンしてUIButtonを見つけ、そのクリックイベントをトリガーするというものです。- ただし、このソリューションはAppleで公式に推奨されているものではなく、システムが新たにアップデートされた場合、無効になる可能性があります。従って、手順4はオプションのソリューションにすぎず、お客様の自己責任でこのソリューションをご利用ください。
Mac / Windows画面共有の確認
ルームにいるMac/Windowsユーザーが画面共有を起動し、サブストリームを介して共有を実行します。ルームにいるその他のユーザーは、TRTCCloudDelegate内のonUserSubStreamAvailableイベントを介してこの通知を受け取ります。
画面共有を確認したいユーザーはstartRemoteSubStreamViewインターフェースを介してリモートユーザーのサブストリーム画面のレンダリングを起動することができます。
Android / iOS画面共有の確認
ユーザーがAndroid / iOSを介して画面共有を実行する場合は、メインストリームを介して共有を実行します。ルームにいるその他ユーザーはTRTCCloudDelegateの中のonUserVideoAvailableイベントを介してこの通知を受け取ります。
画面共有を確認したいユーザーはstartRemoteViewインターフェースを介してリモートユーザーのメインストリーム画面のレンダリングを起動することができます。
この記事はお役に立ちましたか?