Swift
動画統計情報の取り扱い
このステップでは、以下を実装します。 OTSubscriberKitNetworkStatsDelegate アプリ内のスタッターを診断し、ネットワークの状態を把握するため。
| 監視対象 | 配送方法 | 活用方法 |
|---|---|---|
videoPacketsLost / videoBytesReceived | 定期的 — videoNetworkStatsUpdated | 受信経路に問題があることを確認する(途切れやフリーズなど) |
transport (ローカルダウンリンク帯域幅) | 定期的 — mediaLinkStatsUpdated | 提案する 「接続が弱いようです」 |
remotePublisherTransport (リモートアップリンク) | 定期的 — mediaLinkStatsUpdated | 提案する 「他の参加者のネットワークが不安定な可能性があります」 |
networkDegradationSource | 定期的な そして 変更時 | ローカルとリモートのメッセージングの選択 |
| ネットワークの大幅な変更 | イベント - networkConditionChanged | バナー、乾杯、サポートログ |
iOS限定: 定期的な統計情報とネットワークの状態 イベント は、のメソッドです 同じ OTSubscriberKitNetworkStatsDelegate—独立したリスナー型ではありません。
拡張機能内でデリゲートを採用する:
extension VonageVideoManager: OTSubscriberKitNetworkStatsDelegate {
// ...
}
1. チャンネル登録者の動画統計情報の取り扱い
func subscriber(_ subscriber: OTSubscriberKit, videoNetworkStatsUpdated stats: OTSubscriberKitVideoNetworkStats) {
print("videoBytesReceived=\(stats.videoBytesReceived)")
print("videoPacketsLost=\(stats.videoPacketsLost)")
print("videoPacketsReceived=\(stats.videoPacketsReceived)")
DispatchQueue.main.async {
self.latestObservabilityStats = ObservabilityStats.fromVideoStats(
stats,
mediaLink: self.latestMediaLinkSnapshot
)
}
}
コールバックはメインキュー以外から届く場合があります。更新 @Published 上の メイン キュー。
2. メディアリンクの統計情報の定期的な処理
func subscriber(_ subscriber: OTSubscriberKit, mediaLinkStatsUpdated mediaLinkStats: OTSubscriberKitMediaLinkStats) {
applyMediaLinkStats(mediaLinkStats)
}
3. ネットワーク状態イベントの処理
実施 subscriber(_:networkConditionChanged:reason:) 大幅な変更については、以下を参照してください— ネットワーク状況:
func subscriber(
_ subscriber: OTSubscriberKit,
networkConditionChanged mediaLinkStats: OTSubscriberKitMediaLinkStats,
reason: OTNetworkReason
) {
print("networkConditionChanged reason=\(reason.rawValue)")
applyMediaLinkStats(mediaLinkStats, networkConditionChangeReason: reason)
handleNetworkDegradation(mediaLinkStats)
}
共有マージヘルパー:
private func applyMediaLinkStats(
_ mediaLinkStats: OTSubscriberKitMediaLinkStats,
networkConditionChangeReason: OTNetworkReason? = nil
) {
let localBandwidth = mediaLinkStats.transport?.connectionEstimatedBandwidth
let remoteBandwidth = mediaLinkStats.remotePublisherTransport?.connectionEstimatedBandwidth
let localCondition = mediaLinkStats.transport?.networkCondition
let remoteCondition = mediaLinkStats.remotePublisherTransport?.networkCondition
DispatchQueue.main.async {
self.latestMediaLinkSnapshot = MediaLinkSnapshot(
localEstimatedBandwidth: localBandwidth,
remoteEstimatedBandwidth: remoteBandwidth,
networkDegradationSource: mediaLinkStats.networkDegradationSource,
localNetworkCondition: localCondition,
remoteNetworkCondition: remoteCondition,
lastNetworkConditionChangeReason: networkConditionChangeReason
)
if var current = self.latestObservabilityStats {
current.merge(mediaLink: self.latestMediaLinkSnapshot)
self.latestObservabilityStats = current
}
}
}
4. ネットワーク状態の悪化に関するイベントへの対応
private func handleNetworkDegradation(_ mediaLinkStats: OTSubscriberKitMediaLinkStats) {
let localCondition = mediaLinkStats.transport?.networkCondition ?? .unknown
let remoteCondition = mediaLinkStats.remotePublisherTransport?.networkCondition ?? .unknown
switch mediaLinkStats.networkDegradationSource {
case .local:
print("Local network degraded (condition=\(localCondition.rawValue))")
// e.g. show: "Your connection looks weak"
case .remote:
print("Remote publisher network degraded (condition=\(remoteCondition.rawValue))")
// e.g. show: "The other participant's network may be unstable"
case .bothOrUnclear:
print("Degradation unclear — local=\(localCondition.rawValue) remote=\(remoteCondition.rawValue)")
default:
break
}
}
定義 ObservabilityStats, MediaLinkSnapshot、およびプロジェクト内のヘルパー(Androidのサンプルにあるモデルを参考に)です。もし remotePublisherTransport が 0 のままの場合は、次のことを確認してください。 リモート 使用された出版社 settings.senderStatsTrack = true.
次へ: マージされた統計データをSwiftUIに渡して、オーバーレイを描画します。
クライアントの観測可能性
Vonage Video SDK を使用して、クライアントの可観測性を活用し、ビデオ通話の品質メトリクスをリアルタイムで監視する方法をご紹介します。
手順
1
はじめに2
はじめに3
新規プロジェクトの作成4
iOS SDKの追加5
認証の設定6
カメラとマイクへのアクセス7
パブリッシャーで「送信者統計」を有効にする8
オブザーバビリティ・リスナーの登録とサブスクライブ9
動画統計情報の取り扱い10
UIに統計情報を表示する11
アプリの実行12
結論