MediaChannel
public final class MediaChannel
extension MediaChannel: CustomStringConvertible
一度接続を行ったメディアチャネルは再利用できません。 同じ設定で接続を行いたい場合は、新しい接続を行う必要があります。
接続が解除されるタイミング
メディアチャネルの接続が解除される条件を以下に示します。 いずれかの条件が 1 つでも成立すると、メディアチャネルを含めたすべてのチャネル (シグナリングチャネル、ピアチャネル、 WebSocket チャネル) の接続が解除されます。
- シグナリングチャネル (
SignalingChannel) の接続が解除される。 - WebSocket チャネル (
WebSocketChannel) の接続が解除される。 - ピアチャネル (
PeerChannel) の接続が解除される。 - サーバーから受信したシグナリング
pingに対してpongを返さない。 これはピアチャネルの役目です。
-
イベントハンドラ
Declaration
Swift
public var handlers: MediaChannelHandlers
-
クライアントの設定
Declaration
Swift
public let configuration: Configuration -
最初に type: connect メッセージを送信した URL (デバッグ用)
Sora から type: redirect メッセージを受信した場合、 contactUrl と connectedUrl には異なる値がセットされます type: redirect メッセージを受信しなかった場合、 contactUrl と connectedUrl には同じ値がセットされます
Declaration
Swift
public var contactUrl: URL? { get } -
接続中の URL
Declaration
Swift
public var connectedUrl: URL? { get } -
メディアチャンネルの内部で利用している RTCPeerConnection
Declaration
Swift
public var native: RTCPeerConnection? { get } -
クライアント ID 。接続後にセットされます。
Declaration
Swift
public var clientId: String? { get } -
バンドル ID 。接続後にセットされます。
Declaration
Swift
public var bundleId: String? { get } -
接続 ID 。接続後にセットされます。
Declaration
Swift
public var connectionId: String? { get } -
接続状態
Declaration
Swift
public private(set) var state: ConnectionState { get set } -
接続中 (
state == .connected) であればtrueDeclaration
Swift
public var isAvailable: Bool { get } -
接続開始時刻。 接続中にのみ取得可能です。
Declaration
Swift
public private(set) var connectionStartTime: Date? { get } -
接続時間 (秒) 。 接続中にのみ取得可能です。
Declaration
Swift
public var connectionTime: Int? { get }
-
同チャネルに接続中のクライアントの数。 サーバーから通知を受信可能であり、かつ接続中にのみ取得可能です。
Declaration
Swift
public private(set) var connectionCount: Int? { get } -
同チャネルに接続中のクライアントのうち、パブリッシャーの数。 サーバーから通知を受信可能であり、接続中にのみ取得可能です。
Declaration
Swift
public private(set) var publisherCount: Int? { get } -
同チャネルに接続中のクライアントの数のうち、サブスクライバーの数。 サーバーから通知を受信可能であり、接続中にのみ取得可能です。
Declaration
Swift
public private(set) var subscriberCount: Int? { get }
-
ストリームのリスト
Declaration
Swift
public var streams: [MediaStream] { get } -
最初のストリーム。 マルチストリームでは、必ずしも最初のストリームが 送信ストリームとは限りません。 送信ストリームが必要であれば
senderStreamを使用してください。Declaration
Swift
public var mainStream: MediaStream? { get } -
送信に使われるストリーム。 ストリーム ID が
configuration.publisherStreamIdに等しいストリームを返します。Declaration
Swift
public var senderStream: MediaStream? { get } -
受信ストリームのリスト。 ストリーム ID が
configuration.publisherStreamIdと異なるストリームを返します。Declaration
Swift
public var receiverStreams: [MediaStream] { get }
-
rpc(method:Asynchronousparams: isNotificationRequest: timeout: ) RPC メソッドを型安全に呼び出します
このメソッドを使用して、Sora サーバーで定義された RPC メソッドを非同期で実行できます。
Throws
以下のエラーが発生することがあります
SoraError.rpcUnavailable: RPC チャネルが利用不可SoraError.rpcEncodingError: パラメータのエンコーディングに失敗したSoraError.rpcDecodingError: レスポンスのデコーディングに失敗したSoraError.rpcDataChannelClosed: RPC の送受信に利用する DataChannel が切断されたSoraError.rpcTimeout: レスポンスがタイムアウト時間内に返されなかったSoraError.rpcServerError: Sora からエラーレスポンスがあった
使用例
do { let response = try await mediaChannel.rpc( method: RequestSimulcastRid.self, params: RequestSimulcastRidParams(rid: "r0") ) if let result = response?.result { print("Channel ID: \(result.channelId)") } } catch { print("RPC call failed: \(error)") }Declaration
Swift
public func rpc<M: RPCMethodProtocol>( method: M.Type, params: M.Params, isNotificationRequest: Bool = false, timeout: TimeInterval = 5.0 ) async throws -> RPCResponse<M.Result>?Parameters
method呼び出す RPC メソッドの型 (例:
RequestSimulcastRid.self)paramsメソッドに渡すパラメータ。型安全に検証されます
isNotificationRequesttrueの場合、送信後に Sora からのレスポンスを待ちません。デフォルトはfalsetimeoutレスポンスを待つ最大時間(秒)。デフォルトは 5.0 秒
Return Value
メソッドの実行結果。isNotificationRequest が true の場合は nil を返します
-
接続を解除します。
Declaration
Swift
public func disconnect(error: Error?)Parameters
error接続解除の原因となったエラー
-
libwebrtc の統計情報を取得します。 非同期取得中に切断された場合でも安全になるよう、コールバック内で self の生存確認、state == .connected の再確認、peerChannel.nativeChannel が同一インスタンスかどうか、をチェックしています。
Declaration
Swift
public func getStats(handler: @escaping (Result<Statistics, Error>) -> Void)Parameters
handler統計情報取得後に呼ばれるクロージャー
-
DataChannel を利用してメッセージを送信します
Declaration
Swift
public func sendMessage(label: String, data: Data) -> Error? -
MediaChannel の接続中にマイクをハードミュート有効化/無効化します
Declaration
Swift
public func setAudioHardMute(_ mute: Bool) -> Error?Parameters
mutetrueで有効化、falseで無効化Return Value
成功した場合は
nil、失敗した場合はSoraError.mediaChannelErrorを返します -
MediaChannel の接続中にマイクをソフトミュート有効化 / 無効化します
Declaration
Swift
public func setAudioSoftMute(_ mute: Bool) -> Error?Parameters
mutetrueで有効化、falseで無効化Return Value
成功した場合は
nil、失敗した場合はSoraError.mediaChannelErrorを返します -
MediaChannel の接続中に映像をソフトミュート有効化 / 無効化します 黒塗りフレームが送信される状態になります
Declaration
Swift
public func setVideoSoftMute(_ mute: Bool) -> Error?Parameters
mutetrueで有効化、falseで無効化Return Value
成功した場合は
nil、失敗した場合はSoraError.mediaChannelErrorを返します -
setVideoHardMute(_:Asynchronous) MediaChannel の接続中に映像をハードミュート有効化 / 無効化します
端末カメラ利用が有効になっている必要があります 外部入力や別キャプチャ経路には対応していません
内部で Actor により、操作を排他実行します。 同時に呼び出された場合は Actor 側で
SoraError.mediaChannelErrorがスローされます映像ハードミュートは、黒塗りフレーム状態で停止させるためローカルトラックの停止を含みます 事前に映像ソフトミュートを利用していた場合は状態が上書きされます ハードミュート解除時に直前のソフトミュートの状態を復元するようなことはしません
Throws
エラー時はSoraError.cameraErrorまたはSoraError.mediaChannelErrorがスローされますDeclaration
Swift
public func setVideoHardMute(_ mute: Bool) async throwsParameters
mutetrueで有効化、falseで無効化
View on GitHub
Install in Dash