配信を視聴 (iOS/iPadOS)
ここでは Castify SDK を使って Castify プラットフォーム上のライブ配信を試聴する機能を備えた画面を実装する流れを説明します。
このチュートリアルでは SwiftUI の利用を前提としていますが、従来の ViewController を利用することも可能です。
View
を作成する
試聴機能を備えた 以降の説明は、以下のような空の View
からスタートするものとします。完全なソースコードはこちらから閲覧できます。
struct PlayView : View { /* TODO */ }
CastifyApp
, Player
オブジェクトを作成する
1. import Castify
let app = CastifyApp(token: API_TOKEN)
struct PlayView : View {
@StateObject let model = PlayViewModel()
}
class PlayViewModel : ObservableObject {
let player = Player(app)
}
CastifyApp
は SDK の各機能にアクセスするための入り口となるオブジェクトです。 これを作成するには Castify プラットフォームのプロジェクトに対応した API トークン(上記の API_TOKEN
)を引数とし、そのコンストラクターを呼び出します。
2. プレビュー画面を準備する
配信映像を UI 上にプレビュー表示するためのビューを用意します。
/* in PlayView */
var body: some View {
Castify.Preview(model.player.media)
}
Castify.Preview
は Broadcaster
や Player
のプレビューを画面に描画するビューです。
4. ライブ配信を視聴する機能を作成する
/* in PlayViewModel */
// 再生対象の配信
@Published var broadcastId = ""
@Published var played = false {
didSet {
task?.cancel()
if played {
task = Task { try await play() }
}
else {
player.play(nil) // 停止
}
}
}
private var task: Task<Void, Error>? = nil
private func play() async throws {
let source = Source(app, broadcast: broadcastId)
let metadata = try await source.load()
if metadata.stoppedAt == nil {
player.play(source) // ライブ再生
}
else {
player.play(source, from: 0) // アーカイブを最初から再生
}
}
以下は PlayView
側の実装です。
/* in PlayView */
var body: some View {
VStack {
Castify.Preview(model.player.media)
HStack {
Button(action: { model.played.toggle() }) {
Text(model.played ? "Stop" : "Play")
}
TextField("Broadcast ID", text: $model.broadcastId)
}
}
}
Source
オブジェクトは Castify 上の配信メディアを表現するオブジェクトです。配信 ID を元に作成できます。
Source#load()
は対応する配信のメタデータを取得するメソッドです。このメソッドは async メソッドなので呼び出し方に注意が必要です。
上記のコードではメタデータ中の stoppedAt
の値を確認してライブ配信が停止済みかどうかを判定しています。停止されている場合は play(source, from: 0)
のように開始秒を指定してメディアの先頭から再生するように指示します。
ここまでで、ライブ配信の試聴を行うプレイヤーの実装は完了しました。
試聴テストを行う
作成したプレイヤーを実行する前に、何れかの方法で Castify プラットフォームにライブ配信を行う必要があります。
準備ができたらアプリを端末にデプロイして試聴を開始します。