Tencent CloudのTRTCは、Androidシステムでの画面共有をサポートしており、現在のシステムの画面コンテンツは、TRTC SDKを介してルーム内の他のユーザーと共有されます。この機能については、次のような2つの注意点があります。
Androidデバイスでの画面共有は、TRTCCloud
のstartScreenCapture()インターフェースを呼び出すだけで開始することができます。ただし、明瞭で安定した共有効果を実現するには、次の3つの点に注意する必要があります。
次のactivityをmanifestファイルに貼り付けます(項目コードに存在する場合は追加する必要はありません)。
<activity
android:name="com.tencent.rtmp.video.TXScreenCapture$TXScreenCaptureAssistantActivity"
android:theme="@android:style/Theme.Translucent"/>
startScreenCapture()で最初のパラメータencParams
を設定することにより、画面共有のエンコード品質を指定することができます。encParams
をnullに指定した場合、SDKは以前に設定されたエンコードパラメータを自動的に使用します。推奨されるパラメータの設定は、次のとおりです。
パラメータ項目 | パラメータ名 | 通常の推奨値 | テキスト教育シナリオ |
---|---|---|---|
解像度 | videoResolution | 1280 × 720 | 1920 × 1080 |
フレームレート | videoFps | 10 FPS | 8 FPS |
最高ビットレート | videoBitrate | 1600 kbps | 2000 kbps |
解像度アダプティブ | enableAdjustRes | NO | NO |
説明:
- 画面共有されるコンテンツには通常、大幅な変更がなく、FPSを高く設定するのは経済的ではないため、10FPSを推奨します。
- 共有したい画面コンテンツに大量のテキストが含まれている場合、解像度とビットレートを適宜引き上げることができます。
- 最高ビットレート(videoBitrate)とは、画面が大きく変化したときの最高出力ビットレートのことです。画面コンテンツの変化が少ない場合、実際のエンコードビットレートは低くなります。
注意:注意すべき点としては、モバイル版のTRTC SDKは、デスクトップ版のように、「サブストリームの共有」をサポートしていません。これは、iOSとAndroidシステムは、どちらもバックグラウンドで実行されているアプリに対し、カメラの使用権を制限しているからです。従って、サブストリームの共有をサポートする意義はあまりありません。
アプリ内共有のソリューションは非常にシンプルです。TRTC SDKが提供するインターフェースstartScreenCaptureを呼び出し、エンコードパラメータTRTCVideoEncParam
とappGroup
を渡して''
にセットするだけです。TRTCVideoEncParam
パラメータはnullに設定することができます。この場合、SDKは画面共有が開始される前のエンコードパラメータを引き続き使用します。
iOS画面共有に推奨されるエンコードパラメータは次のとおりです。
パラメータ項目 | パラメータ名 | 通常の推奨値 | テキスト教育シナリオ |
---|---|---|---|
解像度 | videoResolution | 1280 × 720 | 1920 × 1080 |
フレームレート | videoFps | 10 FPS | 8 FPS |
最高ビットレート | videoBitrate | 1600 kbps | 2000 kbps |
解像度アダプティブ | enableAdjustRes | NO | NO |
説明:
- 画面共有されるコンテンツには通常、大幅な変更がなく、FPSを高く設定するのは経済的ではないため、10FPSを推奨します。
- 共有したい画面コンテンツに大量のテキストが含まれている場合、解像度とビットレートを適宜引き上げることができます。
- 最高ビットレート(videoBitrate)とは、画面が大きく変化したときの最高出力ビットレートのことです。画面コンテンツの変化が少ない場合、実際のエンコードビットレートは低くなります。
Githubのtrtc_demo/iosディレクトリに、アプリケーション間共有用のサンプルコードを設置しています。これには、次のようなテキストが含まれています。
├── Broadcast.Upload //スクリーンキャプチャのプロセスBroadcast Upload Extensionコードの詳細は手順2をご参照ください。
│ ├── Broadcast.Upload.entitlements //プロセス間通信の設定に使用されるAppGroup情報
│ ├── Broadcast.UploadDebug.entitlements //プロセス間通信の設定に使用されるAppGroup情報(debug環境)
│ ├── Info.plist
│ └── SampleHandler.swift // システムからのスクリーンキャプチャデータを受信するために使用されます
├── Resource // リソースファイル
├── Runner // TRTC簡易化Demo
├── TXLiteAVSDK_ReplayKitExt.framework //TXLiteAVSDK_ReplayKitExt SDK
READMEのガイドによって、このサンプルDemoを実行することができます。
iOSシステムでアプリケーション間画面共有を行うには、Extensionスクリーンキャプチャプロセスを追加し、メインアプリプロセスと連携してプッシュを行う必要があります。Extensionスクリーンキャプチャプロセスは、システムによってスクリーンキャプチャが必要なときに作成され、システムが収集した画面イメージの受信を担当します。従って、次の事項を行う必要があります。
TXLiteAVSDK_ReplayKitExt.framework
をSDK圧縮パッケージに統合します。pubspec.yaml
ファイルを編集してreplay_kit_launcher
プラグインを導入し、TRTC Demo Screenのようにボタンをクリックすれば画面共有の呼び出しを実現します(オプション)。# trtc sdkとreplay_kit_launcherの導入
dependencies:
tencent_trtc_cloud: ^0.2.1
replay_kit_launcher: ^0.2.0+1
注意:手順1をスキップした場合、すなわちApp Groupを設定しない場合は(インターフェースはnullを渡します)、画面共有は実行できますが、安定性が若干損なわれます。手順はやや多いですが、できる限り正しいApp Groupを設定して、画面共有機能の安定性を確保してください。
お客様のアカウントを使用してhttps://developer.apple.com/にログインし、次の操作を実行します。完了後は、対応するProvisioning Profileを再ダウンロードする必要がありますので、ご注意ください。
Target名.entitlements
という名前のファイルが生成されます。このファイルを選択し、+記号をクリックして上記の手順のApp Groupを入力すればOKです。import ReplayKit
import TXLiteAVSDK_ReplayKitExt
let APPGROUP = "group.com.tencent.comm.trtc.demo"
class SampleHandler: RPBroadcastSampleHandler, TXReplayKitExtDelegate {
let recordScreenKey = Notification.Name.init("TRTCRecordScreenKey")
override func broadcastStarted(withSetupInfo setupInfo: [String : NSObject]?) {
// User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional.
TXReplayKitExt.sharedInstance().setup(withAppGroup: APPGROUP, delegate: self)
}
override func broadcastPaused() {
// User has requested to pause the broadcast. Samples will stop being delivered.
}
override func broadcastResumed() {
// User has requested to resume the broadcast. Samples delivery will resume.
}
override func broadcastFinished() {
// User has requested to finish the broadcast.
TXReplayKitExt.sharedInstance() .finishBroadcast()
}
func broadcastFinished(_ broadcast: TXReplayKitExt, reason: TXReplayKitExtReason) {
var tip = ""
switch reason {
case TXReplayKitExtReason.requestedByMain:
tip = 「画面共有は終了しました」
break
case TXReplayKitExtReason.disconnected:
tip = 「アプリケーションは切断されました」
break
case TXReplayKitExtReason.versionMismatch:
tip = 「統合エラー(SDKバージョン番号が一致しません)」
break
default:
break
}
let error = NSError(domain: NSStringFromClass(self.classForCoder), code: 0, userInfo: [NSLocalizedFailureReasonErrorKey:tip])
finishBroadcastWithError(error)
}
override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) {
switch sampleBufferType {
case RPSampleBufferType.video:
// Handle video sample buffer
TXReplayKitExt.sharedInstance() .sendVideoSampleBuffer(sampleBuffer)
break
case RPSampleBufferType.audioApp:
// Handle audio sample buffer for app audio
break
case RPSampleBufferType.audioMic:
// Handle audio sample buffer for mic audio
break
@unknown default:
// Handle other sample buffer types
fatalError("Unknown type of sample buffer")
}
}
}
以下の手順に従って、メインアプリ側の受信ロジックと結合します。すなわち、ユーザーが画面共有をトリガーする前に、メインアプリを「待機」状態にして、Broadcast Upload Extensionプロセスからスクリーンキャプチャデータをいつでも受信できるようにします。
TRTCCloudがカメラのキャプチャをオフにしていることを確認します。オフになっていない場合は、 stopLocalPreview を呼び出して、カメラのキャプチャをオフにしてください。
startScreenCaptureメソッドを呼び出し、手順1で設定したAppGroupを渡して、SDKを「待機」状態にします。
ユーザーが画面共有をトリガーするまで待機します。手順4における「トリガーボタン」が実装されていない場合、ユーザーがiOSシステムのコントロールセンターにおいて、スクリーンキャプチャボタンを長押しして画面共有をトリガーする必要があります。
stopScreenCaptureインターフェースを呼び出すことにより、いつでも画面共有を停止できます。
// 画面共有を開始するには、APPGROUPを上記の手順で作成したApp Groupに置き換える必要があります
trtcCloud.startScreenCapture(
TRTCVideoEncParam(
videoFps: 10,
videoResolution: TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1280_720,
videoBitrate: 1600,
videoResolutionMode: TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT,
),
iosAppGroup,
);
// 画面共有を停止します
await trtcCloud.stopScreenCapture();
// 画面共有の開始イベントの通知は、TRTCCloudListenerを介して受信できます
onRtcListener(type, param){
if (type == TRTCCloudListener.onScreenCaptureStarted) {
//画面共有の開始
}
}
手順3までに、ユーザーがコントロールセンターからスクリーンキャプチャボタンを長押しして、画面共有を手動で開始する必要があります。以下の方法で、TRTC Demo Screenのように、ボタンをクリックすることでトリガーする効果を実現できます。
replay_kit_launcher
プラグインをご使用のプロジェクトに導入します。ReplayKitLauncher.launchReplayKitBroadcast(iosExtensionName);
関数を呼び出すと、画面共有機能を呼び出すことができます。// カスタムボタンによる応答メソッド
onShareClick() async {
if (Platform.isAndroid) {
if (await SystemAlertWindow.requestPermissions) {
MeetingTool.showOverlayWindow();
}
} else {
//画面共有機能は実機でのみテストすることができます
ReplayKitLauncher.launchReplayKitBroadcast(iosExtensionName);
}
}
1つのルームで同時にいくつの画面を共有できますか。
現在、1つの TRTC オーディオ・ビデオルームで共有できる画面は1つだけです。
この記事はお役に立ちましたか?