本文にスキップする
Version: 6.1

グループビデオ通話を始める

PlanetKitを使用することで、1対1通話またはグループ通話のための音声およびビデオ通話機能をアプリに連携できます。このガイドでは、iOSアプリでグループビデオ通話の実装を開始する方法を説明します。

Note

より迅速な開発のために、クイックスタートに基づいてアプリを実装できます。

前提条件

プロジェクト作成

Xcodeを開き、次のように新しいプロジェクトを作成します。

  1. Welcome to Xcode]ウィンドウで[Create a new Xcode Project]をクリックします。
  2. iOS]タブで[App]を選択し、[Next]をクリックします。
  3. プロジェクト作成ウィンドウで以下のように設定します。
    1. Product Name]フィールドに製品名を入力します。
    2. Team]フィールドで開発チームを選択します。
    3. Organization Identifier]フィールドに組織識別子を入力します。
    4. Interface]フィールドで[Storyboard]を選択します。
    5. Next]をクリックします。 iOSプロジェクトを作成する
  4. プロジェクトが作成される場所を選択し、[Create]をクリックします。

SDKインストール

Swift Package Managerを使用してSDKをインストールします。

  1. Xcodeメニューバーで[File]>[Add Packages...]を選択します。
  2. Search or Enter Package URL]フィールドにPlanetKitリポジトリURL(https://github.com/line/planet-kit-apple)を入力します。
  3. Add Package]ボタンをクリックします。

システム権限のリクエスト

ビデオ通話機能を有効にするには、ユーザーがアプリにマイクとカメラへのアクセス権限を与える必要があります。この手順が実行されるようにNSMicrophoneUsageDescriptionおよび NSCameraUsageDescriptionキーをアプリのInfo.plistファイルに追加します。

info.plistファイルに権限キーを追加する

SDK初期化

PlanetKit APIを呼び出すには、まずPlanetKitを初期化する必要があります。PlanetKitInitialSettingBuilderオブジェクトでPlanetKitManagerinitialize()を使ってPlanetKitを初期化します。

initialize()を呼び出すときは、PlanetKitInitialSettingBuilderオブジェクトにサーバーURL(planet_base_url)を設定する必要があります。利用している開発環境に応じて、適切なplanet_base_urlを使用してください。

// AppDelegate.swift

// Import PlanetKit SDK
import PlanetKit

PlanetKitManager.shared.initialize(initialSettings: PlanetKitInitialSettingBuilder()
.withSetKitServerKey(serverUrl: planet_base_url)
.build())
Note

アプリでinitialize()メソッドを最初に一度呼び出す必要があります。UIApplicationDelegateを採用し遵守しているAppDelegateapplication(_:didFinishLaunchingWithOptions:)メソッドでSDKを初期化することをお勧めします。

アクセストークン取得

クライアントアプリからアプリサーバーにアクセストークンの作成をリクエストしてください。

Note

joinConference()を呼び出す度に新しいアクセストークンを受け取って使用する必要があります。

グループビデオ通話の参加

グループビデオ通話に参加するには、以下の引数でPlanetKitManagerjoinConference()を呼び出します。

  • 以下のプロパティを含むPlanetKitConferenceParamオブジェクト
    • myUserId:ローカルユーザーのユーザーID
    • roomId:ルームID
    • roomServiceId:ルームのサービスID
    • delegatePlanetKitConferenceDelegateを採用し、準拠するイベントデリゲート(delegate)
    • mediaType:ビデオ通話のために.audiovideoに設定
    • accessToken:アクセストークン
  • 特定のCallKitタイプが指定されたPlanetKitCallKitSettingを使用して作成したグループ通話の参加用設定
import PlanetKit

class YourClass {
func joinConference() {
let callKitSetting = PlanetKitCallKitSetting(type: .none, param: nil)
var settingsBuilder = PlanetKitJoinConferenceSettingBuilder().withCallKitSettingsKey(setting: callKitSetting)
let joinConferenceSettings = try! settingsBuilder.build()

let param = PlanetKitConferenceParam(myUserId: myUserId, roomId: roomId, roomServiceId: serviceId, displayName: nil, delegate: self, accessToken: accessToken)
param.mediaType = .audiovideo
let result = PlanetKitManager.shared.joinConference(param: param, settings: joinConferenceSettings)

if (result.reason == PlanetKitStartFailReason.none && result.conference != null) {
// The "result.conference" instance is the main instance to call APIs from now on.
// You must keep it to control this call.
}
else {
// Handle an error by referring to result.reason.
}
}
}

extension YourClass: PlanetKitConferenceDelegate {
func didConnect(_ conference: PlanetKitConference, connected: PlanetKitConferenceConnectedParam) {
// This is called when the call is connected.
// Write your own code here.
}

func didDisconnect(_ conference: PlanetKitConference, disconnected: PlanetKitDisconnectedParam) {
// This is called when the call is disconnected.
// Write your own code here.
}

func peerListDidUpdate(_ conference: PlanetKitConference, updated: PlanetKitConferencePeerListUpdateParam) {
// This is called when the list of peers is updated.
// Write your own code here.
}

func peersVideoDidUpdate(_ conference: PlanetKitConference, updated: PlanetKitConferenceVideoUpdateParam) {

// This is called when the video of one or more peers is updated.
// Write your own code here.

}
}
Note

ユーザーがクライアントアプリでグループ通話ルームに参加するには、ルームのIDが必要なため、アプリケーションで定義した通信チャンネルを通じてルームIDを他のユーザーと共有する必要があります。

ローカルユーザーのためのビデオビュー追加

ローカルユーザーのためのビデオビューを追加するには、PlanetKitMTKViewmyVideoView)を作成し、ローカルビューにサブビューとして追加した後、startPreview(delegate:)を使用してカメラプレビューのビデオストリームのデリゲートに設定します。

class YourViewController: UIViewController {
...

private var myVideoView: PlanetKitMTKView = {
PlanetKitMTKView(frame: .zero, device: nil)
}()

override func viewDidLoad() {
super.viewDidLoad()

view.addSubview(myVideoView)
PlanetKitCameraManager.shared.startPreview(delegate: myVideoView)
}

override func viewDidDisappear() {
super.viewDidDisappear()

PlanetKitCameraManager.shared.stopPreview(delegate: myVideoView)
}
}

ピアのためのビデオビュー追加

ピアのためのビデオビューを追加するには、PlanetKitMTKViewpeerVideoView)を作成し、ピアビューにサブビューとして追加します。

class YourViewController: UIViewController {
...

private var peerVideoView: PlanetKitMTKView = {
PlanetKitMTKView(frame: .zero, device: nil)
}()

override func viewDidLoad() {
super.viewDidLoad()

view.addSubview(peerVideoView)
}
}

各ピアに対するピアコントロールの作成

ピアリストが更新されたら、新たに追加されたピアに対してPlanetKitPeerControlを作成し、PlanetKitPeerControlDelegateオブジェクトを登録してください。PlanetKitPeerControlDelegateを使用して各ピアのステータス変更を処理できます。

class YourViewController: UIViewController {
...
private var peerControl: PlanetKitPeerControl?

private func showPeerVideo(_ peerId: String) {
guard let peer = conference.getPeer(peerId: PlanetKitUserId(id: peerId, serviceId: serviceId)) else {
// Handle an error by getting a peer instance.
return
}
guard let peerControl = conference.createPeerControl(peer: peer) else {
// Handle an error by creating peer control.
return
}
self.peerControl = peerControl

peerControl.register(self) { success in
guard success else {
// Handle an error by registering peer control.
return
}
peerControl.startVideo(maxResolution: .recommended, delegate: self.peerVideoView) { success in
if !success {
// Handle an error by starting video.
}
}
}
}
}

次のステップ

以下のドキュメントを参照して、PlanetKitが提供するさまざまな機能と各機能の詳しい使い方を確認してください。

  • 通話フロー:通話タイプ別の通話フローを確認してください。
  • サブグループ:複数の下位グループがあるルームや通訳ルームのような高級機能を実装できるサブグループ機能を確認してください。
  • 拡張機能:画面共有、データセッションなどのさまざまな拡張機能を確認してください。
  • サンプルコード:アプリの実装に参考となるサンプルコードを確認してください。
  • 参照ドキュメント:APIリファレンス、API変更履歴、リリースノートを確認してください。