Files
sodalive-ios/SodaLive/Sources/Live/Room/V2V/V2vModels.swift
Yu Sung b796f6d9c5 라이브룸 V2V 번역 자막 기능을 추가한다
라이브룸에서 진행자 언어와 기기 언어가 다를 때 자막 토글을 제공한다.
룸 정보 응답에 V2V 워커 토큰과 진행자 언어 코드를 포함한다.
Agora V2V 에이전트 참여와 종료 API 연동을 추가한다
2026-02-09 21:11:17 +09:00

110 lines
2.7 KiB
Swift

//
// V2vModels.swift
// SodaLive
//
// Created by klaus on 2/9/26.
//
import Foundation
struct V2VJoinRequest: Encodable {
let name: String
let preset: String
let properties: Properties
init(roomInfo: GetRoomInfoResponse, sourceLanguage: String, targetLanguage: String) {
let rtcUid = UserDefaults.int(forKey: .userId)
self.name = "sodalive-v2v-\(roomInfo.roomId)-\(UUID().uuidString)"
self.preset = "v2vt_base"
self.properties = .init(
channel: roomInfo.channelName,
token: roomInfo.v2vWorkerToken,
agentRtcUid: "\(rtcUid)333",
remoteRtcUids: ["\(roomInfo.creatorId)"],
idleTimeout: 300,
advancedFeatures: .init(enableRtm: false),
parameters: .init(dataChannel: "datastream"),
asr: .init(language: sourceLanguage),
translation: .init(language: targetLanguage),
tts: .init(enable: false)
)
}
struct Properties: Encodable {
let channel: String
let token: String
let agentRtcUid: String
let remoteRtcUids: [String]
let idleTimeout: Int
let advancedFeatures: AdvancedFeatures
let parameters: Parameters
let asr: Asr
let translation: Translation
let tts: Tts
enum CodingKeys: String, CodingKey {
case channel
case token
case agentRtcUid = "agent_rtc_uid"
case remoteRtcUids = "remote_rtc_uids"
case idleTimeout = "idle_timeout"
case advancedFeatures = "advanced_features"
case parameters
case asr
case translation
case tts
}
}
struct AdvancedFeatures: Encodable {
let enableRtm: Bool
enum CodingKeys: String, CodingKey {
case enableRtm = "enable_rtm"
}
}
struct Parameters: Encodable {
let dataChannel: String
enum CodingKeys: String, CodingKey {
case dataChannel = "data_channel"
}
}
struct Asr: Encodable {
let language: String
}
struct Translation: Encodable {
let language: String
}
struct Tts: Encodable {
let enable: Bool
}
}
struct V2VJoinResponse: Decodable {
let agentId: String
let createTs: Int
let status: String
enum CodingKeys: String, CodingKey {
case agentId = "agent_id"
case createTs = "create_ts"
case status
}
}
struct V2VLeaveResponse: Decodable {
let agentId: String
let status: String
enum CodingKeys: String, CodingKey {
case agentId = "agent_id"
case status
}
}