Sora
public final class Sora : @unchecked Sendable
サーバーへのインターフェースです。
Sora オブジェクトを使用してサーバーへの接続を行います。
-
SDK の終了処理を行います。 アプリケーションの終了と同時に SDK の使用を終了する場合、 この関数を呼ぶ必要はありません。
Declaration
Swift
public static func finish() -
ログレベル。指定したレベルより高いログは出力されません。 デフォルトは
infoです。Declaration
Swift
public static var logLevel: LogLevel { get set }
-
接続中のメディアチャネルのリスト
Declaration
Swift
public var mediaChannels: [MediaChannel] { get } -
イベントハンドラ
Declaration
Swift
public let handlers: SoraHandlers
-
Soraインスタンスのイベントを購読します。購読者ごとに独立した
AsyncStreamを返します。購読ごとに buffer / drop 方針 / 終端が 独立しており、1 つの購読を解除しても他の購読者へ影響しません。接続ごとのイベントはMediaChannel.subscribeEvents(bufferingPolicy:)で購読します。- 配送されるのは
mediaChannelAdded/mediaChannelRemoved/audioRouteChangedと、 このインスタンスが開始した接続のconnected/connectFailed/disconnectedです。 - イベントは配送順に届きます。通し番号の順序と一致しない場合はあります (同時に配送された イベントのみ)。
- buffer は既定で
SoraEvent.defaultBufferSize件です。あふれた場合は最も古いイベントが 破棄されます。sequenceで欠落を検出できます。 - 購読を開始する前に配送されたイベントは届きません (buffer は購読ごとに作られます)。
接続前に開始しておけば、
mediaChannelAddedと接続結果を取り逃しません。 - payload はすべて値として確定しており、配送後も購読者が保持できます。
- 購読の解除は、購読している
Taskの cancel、購読に使ったAsyncStreamへの参照の解放、 またはSoraインスタンスの解放です。 - 購読している
Taskの loop の中から同期 API (mediaChannelsなどの getter、connect、disconnectを含む) を呼べます。配送は排他区間の外で行うため deadlock しません。 - 配送 executor はイベントの発生元によって異なります (libwebrtc の callback スレッド、
signaling の受信スレッド、
DispatchQueue.global()、呼び出し元の executor など)。AsyncStreamの再開後に実行される購読者のコードは、購読しているTaskの executor 上で動きます。 UI 更新は main actor / main queue へ束ねてください。 この API の追加によって、既存の
handlersの callback 型・配送 executor・配送順序・ 発火回数は変わりません。
Declaration
Parameters
bufferingPolicy購読者ごとの buffer と drop 方針
Return Value
このインスタンスのイベントを配送する stream
- 配送されるのは
-
シングルトンインスタンス
Declaration
Swift
public static let shared: Sora -
初期化します。 大抵の用途ではシングルトンインスタンスで問題なく、 インスタンスを生成する必要はないでしょう。 メディアチャネルのリストをグループに分けたい、 または複数のイベントハンドラを使いたいなどの場合に インスタンスを生成してください。
Declaration
Swift
public init()
-
サーバーに接続します。
呼び出し元のスレッドは保証されない (接続に成功した場合、設定エラーで終端した場合、接続に 失敗した場合のいずれも、接続を開始したスレッドとは異なるスレッドから呼ばれ得る)。 UI 更新や共有状態の変更は main queue / main actor へ束ねること。
Swift 6 言語モードで
@MainActorの文脈から接続する場合は、クロージャに@Sendableを 付けるかnonisolatedな関数へ処理を分離して隔離を外す。MediaChannelはSendableでは ないため、main actor へ渡す場合はnonisolated(unsafe) letで運び、Task { @MainActor in ... }で main actor 上へ移す。Declaration
Swift
public func connect( configuration: Configuration, webRTCConfiguration: WebRTCConfiguration = WebRTCConfiguration(), handler: @escaping ( _ mediaChannel: MediaChannel?, _ error: Error? ) -> Void ) -> ConnectionTaskParameters
configurationクライアントの設定
webRTCConfigurationWebRTC の設定
handler接続試行後に呼ばれるクロージャー。
mediaChannel(接続成功時のみ) メディアチャネル
error(接続失敗時のみ) エラー
Return Value
接続試行中の状態
-
音声ユニットの手動による初期化の可否。
falseをセットした場合、音声トラックの生成時に音声ユニットが自動的に初期化されます。 (音声ユニットを使用するにはaudioEnabledにtrueをセットして初期化する必要があります)trueをセットした場合、音声ユニットは自動的に初期化されません。 デフォルトはfalseです。Declaration
Swift
public var usesManualAudio: Bool { get set } -
音声ユニットの使用の可否。 このプロパティは
usesManualAudioがtrueの場合のみ有効です。 デフォルトはfalseです。trueをセットした場合、音声ユニットは必要に応じて初期化されます。falseをセットした場合、すでに音声ユニットが初期化済みで起動されていれば、 音声ユニットを停止します。このプロパティを使用すると、音声ユニットの初期化によって AVPlayer などによる再生中の音声が中断されてしまうことを防げます。
Declaration
Swift
public var audioEnabled: Bool { get set } -
AVAudioSessionの設定を変更する際に使います。 WebRTC で使用中のスレッドをロックします。 このメソッドは次のプロパティとメソッドの使用時に使ってください。categorycategoryOptionsmodesecondaryAudioShouldBeSilencedHintcurrentRoutemaximumInputNumberOfChannelsmaximumOutputNumberOfChannelsinputGaininputGainSettableinputAvailableinputDataSourcesinputDataSourceoutputDataSourcesoutputDataSourcesampleRatepreferredSampleRateinputNumberOfChannelsoutputNumberOfChannelsoutputVolumeinputLatencyoutputLatencyioBufferDurationpreferredIOBufferDurationsetCategory(_:withOptions:)setMode(_:)setInputGain(_:)setPreferredSampleRate(_:)setPreferredIOBufferDuration(_:)setPreferredInputNumberOfChannels(_:)setPreferredOutputNumberOfChannels(_:)overrideOutputAudioPort(_:)setPreferredInput(_:)setInputDataSource(_:)setOutputDataSource(_:)
Declaration
Swift
public func configureAudioSession(block: () -> Void)Parameters
blockロック中に実行されるクロージャー
-
音声モードを変更します。 このメソッドは 接続完了後 に実行してください。
Declaration
Swift
public func setAudioMode( _ mode: AudioMode, options: AVAudioSession.CategoryOptions = [ .allowBluetooth, .allowBluetoothA2DP, .allowAirPlay, ] ) -> Result<Void, Error>Parameters
mode音声モード
Return Value
変更の成否
-
libwebrtc のログレベルを指定します。 ログは
RTCSetMinDebugLogLevel()でも指定可能ですが、RTCSetMinDebugLogLevel()ではログの時刻が表示されません。 本メソッドでログレベルを指定すると、時刻を含むログを出力します。Declaration
Swift
public static func setWebRTCLogLevel(_ severity: RTCLoggingSeverity)
View on GitHub
Install in Dash