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

ビデオレシーバー

ビデオレシーバー機能を使用すると、実際のビデオストリームに影響を与えることなく、ビデオデータを取得できます。アプリケーションでは、この機能を利用してビデオデータのコピーを受け取り、さまざまな用途に使用できます。

対応する通話タイプSDKの最低バージョン
1対1通話、グループ通話(カンファレンス)PlanetKit 7.0

活用事例

ビデオレシーバーの主な活用例は次のとおりです。

  • ビデオ分析と品質のモニタリング
  • 通話分析と指標の収集
  • サムネイルの作成

実装段階

ビデオレシーバー機能を実装するには、次の手順に従います。

ローカルユーザー向けビデオレシーバー

ローカルユーザー向けビデオレシーバーの実装

ローカルユーザーのビデオデータを受信するためにPlanetKitVideoOutputDelegateを実装するクラスを作成します。

import PlanetKit

class LocalVideoReceiver: NSObject, PlanetKitVideoOutputDelegate {
func videoOutput(_ videoBuffer: PlanetKitVideoBuffer) {
// Access video buffer properties
let sampleBuffer = videoBuffer.sampleBuffer // CMSampleBuffer?: video sample buffer
let timestamp = videoBuffer.timestamp // CMTime: timestamp
let rotation = videoBuffer.rotation // PlanetKitVideoRotation: rotation angle
let position = videoBuffer.position // PlanetKitCameraPosition: camera position
let source = videoBuffer.source // PlanetKitVideoSource: video source
let sender = videoBuffer.sender // PlanetKitUserId?: sender (nil for local user)

// Extract pixel buffer from sample buffer if needed
guard let sampleBuffer = sampleBuffer,
let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else {
return
}

// Get video dimensions from pixel buffer
let width = CVPixelBufferGetWidth(pixelBuffer)
let height = CVPixelBufferGetHeight(pixelBuffer)

// Use the video buffer for your use case
// Note: The buffer is only valid during this callback
// Retain the sample buffer if you need it beyond this callback
}
}

ビデオレシーバーの設定

ビデオデータの受信を開始するには、ローカルビデオストリームにビデオレシーバーを登録します。

// For 1-to-1 call
let localReceiver = LocalVideoReceiver()
call.myVideoStream.addReceiver(localReceiver)

// For group call
let localReceiver = LocalVideoReceiver()
conference.myVideoStream.addReceiver(localReceiver)

ビデオレシーバーの解除

ビデオの受信を中止するには、ビデオレシーバーの登録を解除します。

// For 1-to-1 call
call.myVideoStream.removeReceiver(localReceiver)

// For group call
conference.myVideoStream.removeReceiver(localReceiver)

ピア向けビデオレシーバー

ピア向けビデオレシーバーの実装

ピアのビデオデータを受信するためにPlanetKitVideoOutputDelegateを実装するクラスを作成します。

import PlanetKit

class PeerVideoReceiver: NSObject, PlanetKitVideoOutputDelegate {
func videoOutput(_ videoBuffer: PlanetKitVideoBuffer) {
// Access video buffer properties
let sampleBuffer = videoBuffer.sampleBuffer // CMSampleBuffer?: video sample buffer
let timestamp = videoBuffer.timestamp // CMTime: timestamp
let rotation = videoBuffer.rotation // PlanetKitVideoRotation: rotation angle
let position = videoBuffer.position // PlanetKitCameraPosition: camera position
let source = videoBuffer.source // PlanetKitVideoSource: video source
let sender = videoBuffer.sender // PlanetKitUserId?: sender (identifies the peer)

// Extract pixel buffer from sample buffer if needed
guard let sampleBuffer = sampleBuffer,
let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else {
return
}

// Get video dimensions from pixel buffer
let width = CVPixelBufferGetWidth(pixelBuffer)
let height = CVPixelBufferGetHeight(pixelBuffer)

// Use the video buffer for your use case
// Note: The buffer is only valid during this callback
// Retain the sample buffer if you need it beyond this callback
}
}

ビデオレシーバーの設定

1対1通話とグループ通話ではアプローチが異なります。

1対1通話の場合

ピアのビデオストリームにビデオレシーバーを登録します。

let peerReceiver = PeerVideoReceiver()
call.peerVideoStream.addReceiver(peerReceiver)
グループ通話の場合

特定のピアのビデオを受信するには、PlanetKitPeerControlstartVideo()をビデオレシーバーと共に呼び出します。

// Create the peer control instance for the target peer
guard let peerControl = conference.createPeerControl(peer: peer) else {
print("Failed to create peer control")
return
}

// Create receiver instance
let peerReceiver = PeerVideoReceiver()

// Start receiving video with specified maximum resolution
peerControl.startVideo(
maxResolution: .vga640x480,
delegate: peerReceiver,
subgroupName: nil
) { success in
if success {
print("Successfully started receiving peer video")
} else {
print("Failed to start receiving peer video")
}
}

// Alternative: Use the callback with resolution details
peerControl.startVideo(
maxResolution: .vga640x480,
delegate: peerReceiver,
subgroupName: nil
) { success, requestedResolution, receivedResolution, failReason in
if success {
print("Started receiving peer video")
print("Requested resolution: \(requestedResolution)")
print("Actual resolution: \(receivedResolution)")
} else {
print("Failed to start receiving peer video: \(failReason)")
}
}

ビデオレシーバーの解除

1対1通話の場合

ピアのビデオストリームでビデオレシーバーの登録を解除します。

call.peerVideoStream.removeReceiver(peerReceiver)
グループ通話の場合

ピアからのビデオ受信を中止するには、PlanetKitPeerControlstopVideo()を呼び出します。

peerControl.stopVideo { success in
if success {
print("Successfully stopped receiving peer video")
} else {
print("Failed to stop receiving peer video")
}
}

関連API

ビデオレシーバー機能とこれに関連するAPIは以下のとおりです。

共通

1対1通話

グループ通話