Zoom iOS 转录例子-代码由deepseek v2辅助天生

[复制链接]
发表于 2026-2-1 08:44:22 | 显示全部楼层 |阅读模式
一、在zoom marketplace创建通用app,zoom-recall 详见Zoom集会会议呆板人转写例子-CSDN博客
二、mac下按照Xcode,创建APP项目meetingbot4ios
三、本实用的SDK为MobileRTC,即Meeting SDK的iOS版本
四、依靠如下:
MobileRTC和CryptoSwift

五、全部代码如下(meetingbot4iosApp.swift):
  1. import SwiftUI
  2. import MobileRTC
  3. import CryptoSwift
  4. @main
  5. struct MeetingBot: App {
  6.     @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
  7.     @StateObject private var meetingInfo = MeetingInfo()
  8.    
  9.     var body: some Scene {
  10.         WindowGroup {
  11.             ContentView(meetingInfo: meetingInfo, appDelegate: appDelegate)
  12.         }
  13.     }
  14. }
  15. struct ZoomMeetingView: UIViewRepresentable {
  16.     func makeUIView(context: Context) -> UIView {
  17.         let view = MobileRTC.shared().getMeetingService()?.meetingView() ?? UIView()
  18.         if view.subviews.isEmpty {
  19.             print("Meeting view is empty")
  20.         } else {
  21.             print("Meeting view has subviews")
  22.         }
  23.         return view
  24.     }
  25.     func updateUIView(_ uiView: UIView, context: Context) {
  26.         // Update the view if needed
  27.     }
  28. }
  29. class MeetingInfo: ObservableObject {
  30.     @Published var meetingUrl: String = "https://us05web.zoom.us/j/81334539494?pwd=sf96p7am967Oc3GI39J1yLWSPa6WnS.1"
  31. }
  32. struct ContentView: View {
  33.     @ObservedObject var meetingInfo: MeetingInfo
  34.     @ObservedObject var appDelegate: AppDelegate
  35.    
  36.     init(meetingInfo: MeetingInfo, appDelegate: AppDelegate) {
  37.         self.meetingInfo = meetingInfo
  38.         self.appDelegate = appDelegate
  39.         self.appDelegate.meetingInfo = meetingInfo
  40.     }
  41.     var body: some View {
  42.         VStack {
  43.             TextField("Enter Meeting URL", text: $meetingInfo.meetingUrl)
  44.                 .textFieldStyle(RoundedBorderTextFieldStyle())
  45.                 .padding()
  46.             // 显示会议状态
  47.             Text("Meeting State: \(appDelegate.meetingState)")
  48.                 .padding()
  49.             Button(action: {
  50.                 // Trigger initialization with the entered meeting URL
  51.                 self.appDelegate.initializeMobileRTCWithMeetingUrl(meetingInfo.meetingUrl)
  52.                
  53.             }) {
  54.                 Text("Join Meeting")
  55.             }
  56.             .padding()
  57.             Button(action: {
  58.                 appDelegate.toggleRecording()
  59.             }) {
  60.                 Text(appDelegate.recordingState == "stopped" ? "Start Recording" : "Stop Recording")
  61.             }
  62.             .padding()
  63.             Text(appDelegate.transcriptText)
  64.                 .padding()
  65.             ScrollView {
  66.                 Text(appDelegate.transcript.joined(separator: "\n"))
  67.                     .padding()
  68.             }
  69.         }
  70.     }
  71. }
  72. class AppDelegate: NSObject, UIApplicationDelegate, ObservableObject, MobileRTCAuthDelegate, MobileRTCMeetingServiceDelegate {
  73.     @Published var meetingNumber: String?
  74.     @Published var password: String?
  75.     @Published var recordingState: String = "stopped"
  76.     @Published var transcript: [String] = []
  77.     @Published var botId: String?
  78.     @Published var meetingState: String = "Not Joined" // 新增会议状态属性
  79.     @Published var transcriptText = "Loading..."
  80.     var meetingInfo: MeetingInfo?
  81.     var window: UIWindow?
  82.     private var refreshTi
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表