Commit 63186b06 authored by Alex朱枝文's avatar Alex朱枝文

增加录屏插件

parent f1d289bc
This diff is collapsed.
...@@ -10,10 +10,12 @@ import IQKeyboardManagerSwift ...@@ -10,10 +10,12 @@ import IQKeyboardManagerSwift
import UIKit import UIKit
import TUICore import TUICore
import TUIChat import TUIChat
import TUIRoomKit
class YHTencentDeskManager: NSObject { class YHTencentDeskManager: NSObject {
static let shared = YHTencentDeskManager() static let shared = YHTencentDeskManager()
let APPGROUP = "group.com.intelligence.galaxy"
private lazy var viewModel: YHButlerServiceViewModel = YHButlerServiceViewModel() private lazy var viewModel: YHButlerServiceViewModel = YHButlerServiceViewModel()
...@@ -32,6 +34,8 @@ class YHTencentDeskManager: NSObject { ...@@ -32,6 +34,8 @@ class YHTencentDeskManager: NSObject {
private func setupConfig() { private func setupConfig() {
/// 注释掉群工具:自定义 /// 注释掉群工具:自定义
TUIChatConfig.default().enableWelcomeCustomMessage = false TUIChatConfig.default().enableWelcomeCustomMessage = false
/// 多人会议设置自己的APPGROUP
ConferenceSession.sharedInstance.setAppGroup(APPGROUP)
} }
func loginIM() { func loginIM() {
......
...@@ -33,5 +33,9 @@ ...@@ -33,5 +33,9 @@
<string>webcredentials:example.com</string> <string>webcredentials:example.com</string>
<string>webcredentials:example.com</string> <string>webcredentials:example.com</string>
</array> </array>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.intelligence.galaxy</string>
</array>
</dict> </dict>
</plist> </plist>
...@@ -33,5 +33,9 @@ ...@@ -33,5 +33,9 @@
<string>webcredentials:example.com</string> <string>webcredentials:example.com</string>
<string>webcredentials:example.com</string> <string>webcredentials:example.com</string>
</array> </array>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.intelligence.galaxy</string>
</array>
</dict> </dict>
</plist> </plist>
...@@ -33,5 +33,9 @@ ...@@ -33,5 +33,9 @@
<string>webcredentials:example.com</string> <string>webcredentials:example.com</string>
<string>webcredentials:example.com</string> <string>webcredentials:example.com</string>
</array> </array>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.intelligence.galaxy</string>
</array>
</dict> </dict>
</plist> </plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.broadcast-services-upload</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).SampleHandler</string>
<key>RPBroadcastProcessMode</key>
<string>RPBroadcastProcessModeSampleBuffer</string>
</dict>
</dict>
</plist>
//
// SampleHandler.swift
// yinheReplayExt
//
// Created by alexzzw on 2025/6/18.
// Copyright © 2025 https://www.galaxy-immi.com. All rights reserved.
//
import ReplayKit
import TXLiteAVSDK_ReplayKitExt
let APPGROUP = "group.com.intelligence.galaxy"
class SampleHandler: RPBroadcastSampleHandler, TXReplayKitExtDelegate {
let recordScreenKey = Notification.Name.init("TRTCRecordScreenKey")
override func broadcastStarted(withSetupInfo setupInfo: [String : NSObject]?) {
// User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional.
TXReplayKitExt.sharedInstance().setup(withAppGroup: APPGROUP, delegate: self)
}
override func broadcastPaused() {
// User has requested to pause the broadcast. Samples will stop being delivered.
}
override func broadcastResumed() {
// User has requested to resume the broadcast. Samples delivery will resume.
}
override func broadcastFinished() {
// User has requested to finish the broadcast.
TXReplayKitExt.sharedInstance().broadcastFinished()
}
func broadcastFinished(_ broadcast: TXReplayKitExt, reason: TXReplayKitExtReason) {
var tip = ""
switch reason {
case TXReplayKitExtReason.requestedByMain:
tip = "屏幕共享已结束"
break
case TXReplayKitExtReason.disconnected:
tip = "应用断开"
break
case TXReplayKitExtReason.versionMismatch:
tip = "集成错误(SDK 版本号不相符合)"
break
default:
break
}
let error = NSError(domain: NSStringFromClass(self.classForCoder), code: 0, userInfo: [NSLocalizedFailureReasonErrorKey:tip])
finishBroadcastWithError(error)
}
override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) {
switch sampleBufferType {
case RPSampleBufferType.video:
// Handle video sample buffer
TXReplayKitExt.sharedInstance().send(sampleBuffer, with: .video)
break
case RPSampleBufferType.audioApp:
// Handle audio sample buffer for app audio
break
case RPSampleBufferType.audioMic:
// Handle audio sample buffer for mic audio
break
@unknown default:
// Handle other sample buffer types
fatalError("Unknown type of sample buffer")
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>TXLiteAVSDK_ReplayKitExt.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
<dict>
<key>LibraryIdentifier</key>
<string>ios-arm64_armv7</string>
<key>LibraryPath</key>
<string>TXLiteAVSDK_ReplayKitExt.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>armv7</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>
/*
* Copyright (c) 2025 Tencent. All Rights Reserved.
*
*/
#import <TXLiteAVSDK_ReplayKitExt/TXReplayKitExt.h>
/*
* Module: TXReplayKitExt @ TXLiteAVSDK
*
* Function: 腾讯云 ReplayKit 录屏功能在Extension中的主要接口类
*
* Version: <:Version:>
*/
/// @defgroup TXReplayKitExt_ios TXReplayKitExt
/// 腾讯云 ReplayKit 录屏功能在Extension中的主要接口类
/// @{
#import <CoreMedia/CoreMedia.h>
#import <Foundation/Foundation.h>
#import <ReplayKit/ReplayKit.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSUInteger, TXReplayKitExtReason) {
/// 主进程请求结束
TXReplayKitExtReasonRequestedByMain,
/// 链接断开,主进程退出
TXReplayKitExtReasonDisconnected,
/// 版本号与主进程SDK不符
TXReplayKitExtReasonVersionMismatch
};
@protocol TXReplayKitExtDelegate;
/// 屏幕分享主入口类
API_AVAILABLE(ios(11.0))
__attribute__((visibility("default"))) @interface TXReplayKitExt : NSObject
/// 获取单例
+ (instancetype)sharedInstance;
/// 初始化方法
///
/// 需要在 RPBroadcastSampleHandler 的实现类中的 broadcastStartedWithSetupInfo 方法中调用
/// @param appGroup App group ID
/// @param delegate 回调对象
- (void)setupWithAppGroup:(NSString *)appGroup delegate:(id<TXReplayKitExtDelegate>)delegate;
/// 录屏暂停方法
///
/// 通过系统控制中心停止录屏时,会回调 RPBroadcastSampleHandler.broadcastPaused,在 broadcastPaused
/// 方法中调用
- (void)broadcastPaused;
/// 录屏恢复方法
///
/// 通过系统控制中心停止录屏时,会回调 RPBroadcastSampleHandler.broadcastResumed,在
/// broadcastResumed 方法中调用
- (void)broadcastResumed;
/// 录屏完成方法
///
/// 通过系统控制中心停止录屏时,会回调 RPBroadcastSampleHandler.broadcastFinished,在
/// broadcastFinished 方法中调用
- (void)broadcastFinished;
/// 媒体数据(音视频)发送方法
///
/// 需要在 RPBroadcastSampleHandler 的实现类中的 processSampleBuffer: 方法中调用
///
/// @param sampleBuffer 系统回调的视频或音频帧
/// @param sampleBufferType 媒体输入类型
/// @note
/// - sampleBufferType 当前支持 RPSampleBufferTypeVideo 和 RPSampleBufferTypeAudioApp
/// 类型的数据帧处理。
/// - RPSampleBufferTypeAudioMic 不支持,请在主 app 处理麦克风采集数据
- (void)sendSampleBuffer:(CMSampleBufferRef)sampleBuffer
withType:(RPSampleBufferType)sampleBufferType;
/// 视频发送方法
/// 已废弃,请使用 - (void)sendSampleBuffer:(CMSampleBufferRef)sampleBuffer
/// withType:(RPSampleBufferType)sampleBufferType; 代替 需要在 RPBroadcastSampleHandler 的实现类中的
/// processSampleBuffer: 方法中调用
///
/// @param sampleBuffer 系统回调的视频帧
- (void)sendVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer
__attribute__((deprecated("use sendSampleBuffer:withType instead")));
@end
API_AVAILABLE(ios(11.0))
@protocol TXReplayKitExtDelegate <NSObject>
/// 录屏完成回调
///
/// @param broadcast 发出回调的实例
/// @param reason 结束原因代码, 参见 TXReplayKitExtReason
- (void)broadcastFinished:(TXReplayKitExt *)broadcast reason:(TXReplayKitExtReason)reason;
@end
NS_ASSUME_NONNULL_END
/// @}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>21G83</string>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>TXLiteAVSDK_ReplayKitExt</string>
<key>CFBundleIdentifier</key>
<string>com.tencent.TXLiteAVSDK.ReplayKitExt</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>TXLiteAVSDK_ReplayKitExt</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>12.6.18866</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>iPhoneOS</string>
</array>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string>19F64</string>
<key>DTPlatformName</key>
<string>iphoneos</string>
<key>DTPlatformVersion</key>
<string>15.5</string>
<key>DTSDKBuild</key>
<string>19F64</string>
<key>DTSDKName</key>
<string>iphoneos15.5</string>
<key>DTXcode</key>
<string>1341</string>
<key>DTXcodeBuild</key>
<string>13F100</string>
<key>MinimumOSVersion</key>
<string>9.0</string>
<key>NSPrincipalClass</key>
<string></string>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
<integer>2</integer>
</array>
</dict>
</plist>
framework module TXLiteAVSDK_ReplayKitExt {
umbrella header "TXLiteAVSDK_ReplayKitExt.h"
export *
module * { export * }
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypePhotosorVideos</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
</array>
</dict>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypeAudioData</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
</array>
</dict>
</array>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
</array>
</dict>
</plist>
/*
* Copyright (c) 2025 Tencent. All Rights Reserved.
*
*/
#import <TXLiteAVSDK_ReplayKitExt/TXReplayKitExt.h>
/*
* Module: TXReplayKitExt @ TXLiteAVSDK
*
* Function: 腾讯云 ReplayKit 录屏功能在Extension中的主要接口类
*
* Version: <:Version:>
*/
/// @defgroup TXReplayKitExt_ios TXReplayKitExt
/// 腾讯云 ReplayKit 录屏功能在Extension中的主要接口类
/// @{
#import <CoreMedia/CoreMedia.h>
#import <Foundation/Foundation.h>
#import <ReplayKit/ReplayKit.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSUInteger, TXReplayKitExtReason) {
/// 主进程请求结束
TXReplayKitExtReasonRequestedByMain,
/// 链接断开,主进程退出
TXReplayKitExtReasonDisconnected,
/// 版本号与主进程SDK不符
TXReplayKitExtReasonVersionMismatch
};
@protocol TXReplayKitExtDelegate;
/// 屏幕分享主入口类
API_AVAILABLE(ios(11.0))
__attribute__((visibility("default"))) @interface TXReplayKitExt : NSObject
/// 获取单例
+ (instancetype)sharedInstance;
/// 初始化方法
///
/// 需要在 RPBroadcastSampleHandler 的实现类中的 broadcastStartedWithSetupInfo 方法中调用
/// @param appGroup App group ID
/// @param delegate 回调对象
- (void)setupWithAppGroup:(NSString *)appGroup delegate:(id<TXReplayKitExtDelegate>)delegate;
/// 录屏暂停方法
///
/// 通过系统控制中心停止录屏时,会回调 RPBroadcastSampleHandler.broadcastPaused,在 broadcastPaused
/// 方法中调用
- (void)broadcastPaused;
/// 录屏恢复方法
///
/// 通过系统控制中心停止录屏时,会回调 RPBroadcastSampleHandler.broadcastResumed,在
/// broadcastResumed 方法中调用
- (void)broadcastResumed;
/// 录屏完成方法
///
/// 通过系统控制中心停止录屏时,会回调 RPBroadcastSampleHandler.broadcastFinished,在
/// broadcastFinished 方法中调用
- (void)broadcastFinished;
/// 媒体数据(音视频)发送方法
///
/// 需要在 RPBroadcastSampleHandler 的实现类中的 processSampleBuffer: 方法中调用
///
/// @param sampleBuffer 系统回调的视频或音频帧
/// @param sampleBufferType 媒体输入类型
/// @note
/// - sampleBufferType 当前支持 RPSampleBufferTypeVideo 和 RPSampleBufferTypeAudioApp
/// 类型的数据帧处理。
/// - RPSampleBufferTypeAudioMic 不支持,请在主 app 处理麦克风采集数据
- (void)sendSampleBuffer:(CMSampleBufferRef)sampleBuffer
withType:(RPSampleBufferType)sampleBufferType;
/// 视频发送方法
/// 已废弃,请使用 - (void)sendSampleBuffer:(CMSampleBufferRef)sampleBuffer
/// withType:(RPSampleBufferType)sampleBufferType; 代替 需要在 RPBroadcastSampleHandler 的实现类中的
/// processSampleBuffer: 方法中调用
///
/// @param sampleBuffer 系统回调的视频帧
- (void)sendVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer
__attribute__((deprecated("use sendSampleBuffer:withType instead")));
@end
API_AVAILABLE(ios(11.0))
@protocol TXReplayKitExtDelegate <NSObject>
/// 录屏完成回调
///
/// @param broadcast 发出回调的实例
/// @param reason 结束原因代码, 参见 TXReplayKitExtReason
- (void)broadcastFinished:(TXReplayKitExt *)broadcast reason:(TXReplayKitExtReason)reason;
@end
NS_ASSUME_NONNULL_END
/// @}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>21G83</string>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>TXLiteAVSDK_ReplayKitExt</string>
<key>CFBundleIdentifier</key>
<string>com.tencent.TXLiteAVSDK.ReplayKitExt</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>TXLiteAVSDK_ReplayKitExt</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>12.6.18866</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>iPhoneSimulator</string>
</array>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string></string>
<key>DTPlatformName</key>
<string>iphonesimulator</string>
<key>DTPlatformVersion</key>
<string>15.5</string>
<key>DTSDKBuild</key>
<string>19F64</string>
<key>DTSDKName</key>
<string>iphonesimulator15.5</string>
<key>DTXcode</key>
<string>1341</string>
<key>DTXcodeBuild</key>
<string>13F100</string>
<key>MinimumOSVersion</key>
<string>9.0</string>
<key>NSPrincipalClass</key>
<string></string>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
<integer>2</integer>
</array>
</dict>
</plist>
framework module TXLiteAVSDK_ReplayKitExt {
umbrella header "TXLiteAVSDK_ReplayKitExt.h"
export *
module * { export * }
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypePhotosorVideos</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
</array>
</dict>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypeAudioData</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
</array>
</dict>
</array>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
</array>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.intelligence.galaxy</string>
</array>
</dict>
</plist>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment