8. 라이브 보기
8.1. 화면 구성하기
화면 구성을 위해 SDK에서 FFView를 제공합니다. 이 View를 가지고 라이브 보는 화면 UI(xml 파일)에 구성합니다.
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><com.jocoos.flipflop.view.FFViewandroid:id="@+id/playerView"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/black"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintTop_toTopOf="parent" />…</androidx.constraintlayout.widget.ConstraintLayout>
8.2. 라이브를 보기 위한 인스턴스 생성
라이브를 보려면 라이브를 보기위한 인스턴스를 생성해야 합니다.
// video : 라이브를 보기 위한 비디오 객체// 보통의 경우 라이브 리스트를 가져오는 함수를 통해 라이브 정보를 가져올 수 있습니다.// 라이브 리스트를 가져오는 방법은 아래에서 설명합니다.// 라이브를 보기 위한 객체 생성// sdk는 사용자 등록에서 받아온 인스턴스입니다.val player = sdk.getPlayer(requireContext(), video)// 화면 구성하기에서 구성한 뷰를 인스턴스에 연결합니다.// bind.playerView : 1. 화면 구성하기에서 설정한 FFViewplayer.prepare(requireContext(), bind.playerView)
‘getPlayer’ 함수를 사용해서 라이브를 보기위한 인스턴스를 얻으려면 Video 객체를 파라메터로 넣어주어야 합니다. Video 객체는 라이브 리스트를 가져오는 함수(getVideos)를 통해서 얻을 수 있습니다.
val page = 0 // zero-based page indexval size = 10 // the size of the page to be returnedwhen (val result = sdk.getVideos(page, size, null, VideoType.BROADCASTED, VideoState.LIVE)) {is FFResult.Success -> {// success}is FFResult.Failure -> {// error}}
'getVideos' 함수에 사용할 수 있는 필드는 다음과 같습니다.
필드 | 설명 |
---|---|
page | 가져올 동영상의 페이지 번호 |
size | 가져올 동영상의 개수 |
userId | 사용자 ID. 지정 사용자의 동영상만 가져오고 싶을 때 사용 |
type | 동영상의 타입. (BROADCASTED : 라이브를 진행했거나 진행중인 동영상, UPLOADED : 라이브가 아닌 업로드한 동영상) |
state | 동영상의 상태. (LIVE : 현재 라이브 중인 동영상, VOD : VOD로 볼 수 있는 동영상) |
플레이어의 상태를 알고 싶으면 FFPlayerListener를 연결해줍니다.
// 라이브의 상태 리스너를 연결합니다.player.listener = object : FFPlayerListener { … }
함수 | 설명 |
---|---|
onPrepared | 라이브를 볼 준비가 되었음을 알려줍니다. prepare 함수 실행이 정상적으로 이루어지면 호출됩니다. |
onStarted | 라이브를 볼 수 있을 때 호출됩니다. |
onChatMessageReceived | 채팅 메시지가 들어오면 호출됩니다. |
onStopped | 라이브가 중단되면 호출됩니다. |
omCompleted | 라이브가 끝난 경우 호출됩니다. |
onError | 라이브 중 에러가 발생하면 호출됩니다. |
8.3. 안드로이드 라이프사이클에 연결하기
라이브를 보기위해 생성한 player는 안드로이드의 라이프 사이클과 연결을 해주어야 합니다. 홈 화면으로 나갔거나 하는 경우 화면을 멈추어 주어야 하기 때문입니다.
아래와 같이 관련 함수를 호출해 주어야 합니다.
override fun onResume() {player.start()player.resume()}override fun onStop() {player.pause()player.stop()player.reset()}
8.4. 채팅 메시지 보내고 받기
라이브를 하면서 라이브를 보고 있는 사용자들과 함께 채팅 메시지를 주고 받을 수 있습니다. (메시지를 주고 받을 때 사용하는 메시지 타입에 대한 자세한 내용은 8.채팅 에서 확인하실 수 있습니다.)
채팅 메시지를 보내고 싶으면 player의 sendMessage 함수를 사용합니다.
// 메시지 보내기val message = “안녕하세요.”player.sendMessage(message)
지정한 사용자에게만 메시지를 보내고 싶으면 sendDM 함수를 사용합니다.
// 메시지 보내기val receiver = "100"val message = “안녕하세요.”streamer.sendDM(receiver, message)
다른 사용자가 채팅 메시지를 보냈을 경우는 FFPlayerListener의 onChatMessageReceived 리스너로 채팅 메시지가 들어옵니다. 이 함수 안에서 받은 메시지에 대한 처리를 합니다.
override fun onChatMessageReceived(item: FFMessage) {// 받은 메시지 처리…}