7. 라이브 종료하기

7.1. 라이브 송출 중단하기

라이브를 끝내는 경우 endVideo() 함수의 호출을 통해 명시적으로 종료를 해주어야 FlipFlop은 라이브를 종료로 처리합니다. endVideo() 호출시에 정말로 라이브를 종료하는 것인지 아니면 일시적으로 중단하는 것인지를 EndLiveRequest의 내용을 통해 지정할 수 있습니다. EndLiveRequestkeepLive 필드를 false로 지정하면 FlipFlop에 라이브를 종료한다는 것을 알리는 것이고, true로 주면 잠시 중단하는 것이라고 알리는 것입니다. 이와 같은 잠시 중단의 경우에는 FlipFlop은 10분동안 라이브가 재개되지 않으면 라이브를 종료로 변경합니다. 명시적 종료가 있지 않으면 FlipFlop은 30분동안 송출이 없는 경우에 라이브를 종료로 판단합니다.

따라서, 의도치 않게 화면을 나가게 되는 상황이 아니라면 createVideo() 호출할 때 endRequest 파라메터로 EndLiveRequest(true)를 넣어서 호출을 하고 화면을 나간 다음에 필요한 작업을 하고 10분 이내에 다시 돌아오는 것이 좋습니다.

FlipFlop이 명시적 종료를 사용하는 이유: 라이브를 송출하는 동안 네트워크의 상황은 다양하게 변할 수 있습니다. 따라서, 일시적으로 라이브가 끊어질 수 있으므로 송출이 끊어질 때를 FlipFlop은 라이브의 종료로 판단하지 않습니다.

EndLiveRequest를 통해 종료를 제어하는 이유: 사용자가 실수로 종료 버튼을 클릭하는 경우가 많습니다. 이러한 경우 바로 라이브를 종료하지 않고 10분이라는 시간을 주어서 사용자가 다시 라이브를 송출하면 이전 라이브를 이어서 할 수 있도록 하기 위함입니다.

streamer?.reset()
sdk.endVideo(videoKey, EndLiveRequest(false))

7.2. 라이브 재시작하기

네트워크 상태가 안좋거나 하면 송출이 중단될 수 있습니다. 일시적인 네트워크 장애로 인한 중단이라면 다시 시도를 해야 합니다. 라이브 진행중 연결이 끊어졌다는 onError()가 호출이 되면 재시도를 합니다. 송출 재시작을 위한 함수는 retryStreaming() 입니다.

// delay : try to reconnect live after delay time(milliseconds)
// recommend 3 ~ 5 seconds because it is possible to takes some time for disconnecting completely
val delay = 3000
streamer?.retryStreaming(delay) { result ->
// check if retry has been succeeded or failed
// fail if result is false, otherwise success
}

또는, 앱이 홈으로 나가거나 라이브 화면이 다른 앱에 의해 가려지거나 하는 경우에도 송출은 중단 됩니다. 송출 중단 상태에서 라이브 화면에 다시 진입하면 자동으로 송출이 다시 시작되지 않으므로 직접 다시 시작해 주어야 합니다.(예: onResume()에서 라이브가 끊어졌는지 확인하고 끊어졌으면 다시 시작한다.) 위에 설명한 restryStreaming() 함수를 통한 재시도를 하거나 아예 새로운 streamer를 만들어서 송출을 할 수도 있습니다. 두 가지중 편한 방법을 사용하시면 됩니다.