라이브룸에서 진행자 언어와 기기 언어가 다를 때 자막 토글을 제공한다. 룸 정보 응답에 V2V 워커 토큰과 진행자 언어 코드를 포함한다. Agora V2V 에이전트 참여와 종료 API 연동을 추가한다
110 lines
2.7 KiB
Swift
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
|
|
}
|
|
}
|