그룹 음성 통화
그룹 음성 통화를 구현하는 예제 코드입니다.
필수 조건
시작하기 전에 다음 작업을 수행해야 합니다.
- PlanetKit을 초기화하세요.
- 적절한 액세스 토큰을 획득하세요.
- 그룹 통화 흐름에서 전반적인 API 사용 과정을 확인하세요.
그룹 음성 통화 구현 시 고려 사항
joinConference()
를 호출한 다음에는 반환된 PlanetKitConferenceJoinResult
의 reason
속성을 확인해야 합니다.
reason
이PlanetKitStartFailReason.none
인 경우 성공을 의미합니다.- 그렇지 않으면 실패를 의미하며
reason
에 따라 적절한 조치를 취해야 합니다.
이벤트 대리자 구현
통화에서 사용될 이벤트 대리자(delegate)를 구현하세요.
PlanetKitConferenceDelegate
는 그룹 통화의 상태 변경 이벤트를 처리하는 데 사용됩니다.PlanetKitMyMediaStatusDelegate
는 로컬 사용자의 미디어 상태 변경 이벤트를 처리하는 데 사용됩니다. 마이크가 음 소거되거나 음 소거 해제되는 경우 또는 오디오 설명이 업데이트되는 경우 등 이벤트를 기반으로 로컬 사용자의 UI를 업데이트할 수 있습니다.
extension ConferenceDelegateExample : PlanetKitConferenceDelegate {
func didConnect(_ conference: PlanetKitConference, connected: PlanetKitConferenceConnectedParam) {
// This is called when the call is connected.
// Write your own code here.
}
func didDisconnect(_ conference: PlanetKitConference, disconnected: PlanetKitDisconnectedParam) {
// This is called when the call is disconnected.
// Write your own code here.
}
func peerListDidUpdate(_ conference: PlanetKitConference, updated: PlanetKitConferencePeerListUpdateParam) {
// This is called when the list of peers is updated.
// Write your own code here.
}
//
// Also, you should implement other methods defined in the PlanetKitConferenceDelegate protocol.
//
...
}
extension MyMediaStatusDelegateExample: PlanetKitMyMediaStatusDelegate {
func didMuteMic(_ myMediaStatus: PlanetKitMyMediaStatus) {
// This is called when the local user's audio is muted.
// Write your own code here.
}
func didUnmuteMic(_ myMediaStatus: PlanetKitMyMediaStatus) {
// This is called when the local user's audio is unmuted.
// Write your own code here.
}
func didUpdateAudioDescription(_ myMediaStatus: PlanetKitMyMediaStatus, description: PlanetKitMyAudioDescription) {
// This is called when the local user's audio description is updated.
// Write your own code here.
}
//
// Also, you should implement other methods defined in the PlanetKitMyMediaStatusDelegate protocol.
//
...
}
그룹 통화 입장
그룹 통화에 입장하기 위한 절차는 다음과 같습니다.
PlanetKitJoinConferenceSettingBuilder
를 통해 설정 정보를 만드세요.PlanetKitConferenceDelegate
를 포함하여PlanetKitConferenceParam
을 생성하세요.PlanetKitManager.shared.joinConference()
를 호출하세요.PlanetKitConferenceJoinResult
를 확인하세요.
class ParticipantExample
{
var conference: PlanetKitConference?
var myMediaStatusDelegate: MyMediaStatusDelegateExample
}
...
extension ParticipantExample
{
func joinConferenceExample(myId: String, myServiceId: String, roomId: String, roomServiceId: String, accessToken: String, delegate: PlanetKitConferenceDelegate) {
let myUserId = PlanetKitUserId(id: myId, serviceId: myServiceId)
let settings = PlanetKitJoinConferenceSettingBuilder().build()
let param = PlanetKitConferenceParam(myUserId: myUserId, roomId: roomId, roomServiceId: roomServiceId, displayName: nil, delegate: delegate, accessToken: accessToken)
let result = PlanetKitManager.shared.joinConference(param: param, settings: settings)
guard result.reason == .none else {
NSLog("Failed reason: result. \(result.reason)")
return
}
// The result.conference instance is a conference instance for calling other APIs from now on.
// You must keep this instance in your own context.
// In this example, the "conference" variable holds the instance.
conference = result.conference
}
}
로컬 사용자에 대한 미디어 상태 이벤트 대리자 설정
통화가 연결되면 로컬 사용자에 대한 미디어 상태 이벤트 대리자를 설정하세요.
extension ParticipantExample
{
func addMyMediaStatusHandlerExample() {
conference?.myMediaStatus.addHandler(myMediaStatusDelegate) {
// completion callback
}
}
}
각 피어에 대한 피어 컨트롤 생성
피어 목록이 업데이트되면 새로 추가된 피어에 대해 PlanetKitPeerControl
을 생성하고 PlanetKitPeerControlDelegate
객체를 등록하세요. PlanetKitPeerControlDelegate
를 사용하여 각 피어의 상태 변경을 처리할 수 있습니다.
#if os(macOS)
typealias UIView = NSView
#endif
class YourPeerView: UIView {
...
var peerControl: PlanetKitPeerControl?
var peerVideoView: PlanetKitMTKView!
func setupPeerControl(for peer: PlanetKitConferencePeer, in conference: PlanetKitConference) {
guard let peerControl = conference.createPeerControl(peer: peer) else {
return
}
peerControl.register(self) { success in
// Write your own code here.
}
self.peerControl = peerControl
}
}
extension YourPeerView: PlanetKitPeerControlDelegate {
func didMuteMic(_ peerControl: PlanetKitPeerControl) {
// This is called when the local user's audio is muted.
// Write your own code here.
}
func didUnmuteMic(_ peerControl: PlanetKitPeerControl) {
// This is called when the local user's audio is unmuted.
// Write your own code here.
}
//
// Also, you should implement other methods defined in the PlanetKitPeerControlDelegate protocol.
//
...
}
그룹 통화 퇴장
그룹 통화에서 퇴장하려면 leaveConference()
를 호출하세요.
extension ParticipantExample
{
func leaveConferenceExample() {
conference?.leaveConference()
}
}