MediaStream
public protocol MediaStream : AnyObject
メディアストリームの機能を定義したプロトコルです。
デフォルトの実装は非公開 (internal) であり、カスタマイズはイベントハンドラでのみ可能です。
ソースコードは公開していますので、実装の詳細はそちらを参照してください。
メディアストリームは映像と音声の送受信を行います。 メディアストリーム 1 つにつき、 1 つの映像と 1 つの音声を送受信可能です。
-
イベントハンドラ
Declaration
Swift
var handlers: MediaStreamHandlers { get }
-
ストリーム ID
Declaration
Swift
var streamId: String { get } -
接続開始時刻
Declaration
Swift
var creationTime: Date { get } -
メディアチャンネル
Declaration
Swift
var mediaChannel: MediaChannel? { get }
-
映像の可否。
falseをセットすると、サーバーへの映像の送受信を停止します。trueをセットすると送受信を再開します。setter は映像レンダラーの
onSwitch(video:)の配送完了を待ちません。getter は SDK が 保持する確定値を即時に返し、native track のisEnabledへの反映は確定時に行います。複数の公開 API から並行に変更した場合は operation の世代で確定が調停され、後から開始した operation が先に値を確定すると自分の書き込みが破棄され得ます (呼び出しは成功を返します)。
Declaration
Swift
var videoEnabled: Bool { get set } -
音声の可否。
falseをセットすると、サーバーへの音声の送受信を停止します。trueをセットすると送受信を再開します。サーバーへの送受信を停止しても、マイクはミュートされませんので注意してください。
setter は映像レンダラーの
onSwitch(audio:)の配送完了を待ちません。getter は SDK が 保持する確定値を即時に返し、native track のisEnabledへの反映は確定時に行います。複数の公開 API から並行に変更した場合は operation の世代で確定が調停され、後から開始した operation が先に値を確定すると自分の書き込みが破棄され得ます (呼び出しは成功を返します)。
Declaration
Swift
var audioEnabled: Bool { get set } -
映像トラックを保持している場合は
trueを返します。映像ミュート時に映像トラックが存在するかチェックするために使用されます。 ミュート時の確定処理は返り値やエラーを返さないため、 呼び出し側へエラーを通知するために必要となります。
Declaration
Swift
var hasVideoTrack: Bool { get } -
音声トラックを保持している場合は
trueを返します。音声ミュート時に音声トラックが存在するかチェックするために使用されます。 ミュート時の確定処理は返り値やエラーを返さないため、 呼び出し側へエラーを通知するために必要となります。
Declaration
Swift
var hasAudioTrack: Bool { get } -
受信した音声のボリューム。 0 から 10 (含む) までの値をセットします。 このプロパティはロールがサブスクライバーの場合のみ有効です。
Declaration
Swift
var remoteAudioVolume: Double? { get set }
-
RTCAudioTrackSink を RTCAudioTrack に関連付けます。 追加済みのシンクを再度追加した場合は何もしません。
Declaration
Swift
func addAudioTrackSink(_ sink: RTCAudioTrackSink) -
RTCAudioTrackSink の関連付けを解除します。 未追加の RTCAudioTrackSink を指定した場合は何もしません。
Declaration
Swift
func removeAudioTrackSink(_ sink: RTCAudioTrackSink)
-
映像フィルター
filter(videoFrame:)はストリームごとの直列 executor 上で呼ばれます。同じストリームで 同時に 2 つの frame が filter へ入ることはありません。同じ instance を複数のストリームへ 設定した場合はストリームごとに直列化されるため、排他は利用者の責任です。getter と setter は内部の lock で直列化されるため、別々のスレッドから同時に呼んでも 設定は一意に定まります。交換は既に受理された frame の実行順とは同期しません (各 frame が 使う filter は実行直前に読んだ値で一意に決まります)。
Declaration
Swift
var videoFilter: VideoFilter? { get set } -
映像レンダラー。
renderer callback の配送 executor は main queue です。setter は callback の配送完了を 待ちません。設定した instance を再度設定した場合と
nilをnilへ代入した場合は 何も配送しません。別の instance へ交換した場合は、以前の renderer にonRemovedが 1 回配送されます。getter と setter は内部の lock で直列化されるため、別々のスレッドから同時に呼んでも 設定は一意に定まります。どのスレッドから呼んでもかまいません。
terminate()の後に新しい renderer を設定しても何も配送しません (終了したストリームではonAddedの後にonDisconnectが届かない renderer が生まれるためです)。nilの代入に よる取り外しはterminate()の後でも行えます。Declaration
Swift
var videoRenderer: VideoRenderer? { get set } -
映像フレームをサーバーに送信します。 送信される映像フレームは映像フィルターを通して加工されます。 映像レンダラーがセットされていれば、加工後の映像フレームが 映像レンダラーによって描画されます。
フィルターの実行と
RTCVideoSourceへの配送、映像レンダラーへの callback は 非同期に行われます。このメソッドは配送の完了を待たずに戻ります。呼び出し側は frame の 所有権を SDK へ移し、このメソッドが戻った後にvideoFrameとそれが保持する画素データを 参照・変更しないでください。映像トラックを持たないストリーム (video source が
nil) では frame は配送されず、VideoFilterも呼ばれません。フィルターの実行が滞留している場合、上限を超えて到着した frame は破棄されます。terminate()の後に到着した frame も配送されません。Declaration
Swift
func send(videoFrame: VideoFrame?)Parameters
videoFrame送信する映像フレーム。
nilを指定した場合は何もしません。
-
ストリームの終了処理を行います。
以降に到着した frame と renderer の frame / size / switch は配送されません。
VideoRendererのonDisconnectは終了処理を呼んだ時点の renderer へ 1 回だけ (main queue へ非同期に) 配送し、onRemovedは配送しません。MediaStreamHandlers.onSwitchVideo/onSwitchAudioは 終了処理の後も呼ばれ得ますが、renderer のonSwitchは配送されません。Declaration
Swift
func terminate()
View on GitHub
Install in Dash