配信を視聴 (Android)

ここでは Castify SDK を使って Castify プラットフォーム上のライブ配信を試聴する機能を備えた画面を実装する流れを説明します。

このチュートリアルでは Jetpack Compose の利用を前提としていますが、従来の Activity を利用することも可能です。

試聴機能を備えた Composable を作成する

以降の説明は、以下のような空の Composable からスタートするものとします。完全なソースコードはこちらopen in new windowから閲覧できます。

@Composable
fun PlayScreen() { /* TODO */ }

1. CastifyApp, Player オブジェクトを作成する

/* in PlayScreen() */
val context = LocalContext.current
val app = remember { 
  CastifyApp(API_TOKEN, context = context) 
}
val player = remember { app.newPlayer() }

// クリーンアップ
DisposableEffect(Unit) {
  onDispose { player.close() }
}

CastifyApp は SDK の各機能にアクセスするための入り口となるオブジェクトです。 これを作成するには Castify プラットフォームのプロジェクトに対応した API トークン(上記の API_TOKEN)を引数とし、そのコンストラクターを呼び出します。

2. プレビュー画面を準備する

配信映像を UI 上にプレビュー表示するためのビューを用意します。ビューには android.view.SurfaceView を利用します。

/* in PlayScreen() */
AndroidView(
  modifier = Modifier.clipToBounds(),
  factory = { SurfaceView(it).apply { player.previews.add(holder) } }
)

android.view.SurfaceViewComposable ではないので AndroidView を利用して Composable に変換します。また、そのインスタンスを player.previews に追加してプレビューの投影先として登録します。

3. ライブ配信を視聴する機能を作成する

/* in PlayScreen() */
var played by remember { mutableStateOf(false) }
var broadcastId by remember { mutableStateOf("") }

LaunchedEffect(played) {
  if (!played) {
    player.stop(null)
    return@LaunchedEffect
  }
  val source = app.newSource(broadcastId)
  val metadata = source.load()
  if (metadata.stoppedAt == null) { // live
    player.play(source)
  }
  else {
    player.play(source, time = 0.0) // archive
  }
}
Column {
  Row {
    Button(onClick = { played = !played }) {
      Text(if (played) "Stop" else "Play")
    }
    TextField(value = broadcastId, onValueChange = { broadcastId = it }, placeholder = { Text("bc_xxx") })
  }
  AndroidView(
    modifier = Modifier.clipToBounds(),
    factory = { SurfaceView(it).apply { player.previews.add(holder) } }
  )
}

Source オブジェクトは Castify 上の配信メディアを表現するオブジェクトです。配信 ID を元に作成できます。

Source#load() は対応する配信のメタデータを取得するメソッドです。このメソッドは suspend メソッドなので呼び出し方に注意が必要です。

上記のコードではメタデータ中の stoppedAt の値を確認してライブ配信が停止済みかどうかを判定しています。停止されている場合は play(time = 0.0) のように開始秒を指定してメディアの先頭から再生するように指示します。

ここまでで、ライブ配信の試聴を行うプレイヤーの実装は完了しました。

試聴テストを行う

作成したプレイヤーを実行する前に、何れかの方法で Castify プラットフォームにライブ配信を行う必要があります。

準備ができたらアプリを端末にデプロイして試聴を開始します。

最終更新日: