Overview
Strengths
Use Cases











sudo gem install cocoapods
pod init
platform :ios, '8.0'target 'App' do# The full feature version of SDK# Includes features such as RTC Engine, live streaming player (TXLivePlayer), RTMP streaming (TXLivePusher), VOD player (TXVodPlayer), and short video recording and editing (UGSV).pod 'TXLiteAVSDK_Professional', :podspec => 'https://liteav.sdk.qcloud.com/pod/liteavsdkspec/TXLiteAVSDK_Professional.podspec'# Tencent Effect SDK example of S1-07 package is as follows:pod 'TencentEffect_S1-07'end
pod install
pod update
pod setuppod repo updaterm ~/Library/Caches/CocoaPods/search_index.json
-ObjC in Other Linker Flags of Build Settings.


[TELicenseCheck setTELicense:LicenseURL key:LicenseKey completion:^(NSInteger authresult, NSString * _Nonnull errorMsg) {if (authresult == TELicenseCheckOk) {NSLog(@"Authentication successful.");} else {NSLog(@"Authentication failed.");}}];
- [AppDelegate application:didFinishLaunchingWithOptions:]), set the following settings:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {NSString * const licenceURL = @"<the obtained licenseUrl>";NSString * const licenceKey = @"<the obtained key>";// TXLiveBase is located in the "TXLiveBase.h" header file[TXLiveBase setLicence:licenceURL key:licenceKey];[TXLiveBase setObserver:self];NSLog(@"SDK Version = %@", [TXLiveBase getSDKVersionStr]);return YES;}#pragma mark - TXLiveBaseDelegate- (void)onLicenceLoaded:(int)result Reason:(NSString *)reason {NSLog(@"onLicenceLoaded: result:%d reason:%@", result, reason);// If the result is not 0, it means the setting has failed, and you need to retryif (result != 0) {[TXLiveBase setLicence:licenceURL key:licenceKey];}}@end
NSLog(@"%@", [TXLiveBase getLicenceInfo]);
// Create an RTC Engine SDK instance (singleton mode)self.trtcCloud = [TRTCCloud sharedInstance];// Set event listeners.self.trtcCloud.delegate = self;// Notifications from various SDK events (e.g., error codes, warning codes, audio and video status parameters, etc.).- (void)onError:(TXLiteAVError)errCode errMsg:(nullable NSString *)errMsg extInfo:(nullable NSDictionary *)extInfo {NSLog(@"%d: %@", errCode, errMsg);}- (void)onWarning:(TXLiteAVWarning)warningCode warningMsg:(nullable NSString *)warningMsg extInfo:(nullable NSDictionary *)extInfo {NSLog(@"%d: %@", warningCode, warningMsg);}// Remove event listener.self.trtcCloud.delegate = nil;// Terminate the RTC Engine SDK instance (singleton mode)[TRTCCloud destroySharedIntance];
// Load beauty-related resources.NSDictionary *assetsDict = @{@"core_name":@"LightCore.bundle",@"root_path":[[NSBundle mainBundle] bundlePath]};// Initialize the Tencent Effect SDK.self.beautyKit = [[XMagic alloc] initWithRenderSize:previewSize assetsDict:assetsDict];// Release the Tencent Effect SDK.[self.beautyKit deinit];
// 1. Set the SDK Connect Environment// If you serve global users, configure the SDK connect environment for global connect[TXLiveBase setGlobalEnv:"GDPR"];// 2. Create PlayerTXVodPlayer *_txVodPlayer = [[TXVodPlayer alloc] init];// 3. Associate Rendering View[_txVodPlayer setupVideoWidget:_myView insertIndex:0];// 4. Player Parameter ConfigurationTXVodPlayConfig *_config = [[TXVodPlayConfig alloc]init];[_config setEnableAccurateSeek:true];// Set whether to seek accurately. The default value is true[_config setMaxCacheItems:5]; // Set the number of cache files to 5[_config setProgressInterval:200]; // Set the interval for progress callbacks, in milliseconds[_config setMaxBufferSize:50]; // The maximum pre-load size, in MB[_txVodPlayer setConfig:_config]; // Pass config to _txVodPlayer// 5. Player Event Listener- (void)onPlayEvent:(TXVodPlayer *)player event:(int)EvtID withParam:(NSDictionary*)param { if (EvtID == PLAY_EVT_VOD_PLAY_PREPARED) { // Received event that the player is ready, now you can call pause, resume, getWidth, getSupportedBitrates, etc. } else if (EvtID == PLAY_EVT_PLAY_BEGIN) { // Received the start playback event } else if (EvtID == PLAY_EVT_PLAY_END) { // Received the playback end event } }
// 1. Create PlayerV2TXLivePlayer *_txLivePlayer = [[V2TXLivePlayer alloc] init];// 2. Associate Rendering View[_txLivePlayer setRenderView:_myView];// 3. Player Event Listener[_txLivePlayer setObserver:self];- (void)onVideoLoading:(id<V2TXLivePlayer>)player extraInfo:(NSDictionary *)extraInfo {// Video loading event.}- (void)onVideoPlaying:(id<V2TXLivePlayer>)player firstPlay:(BOOL)firstPlay extraInfo:(NSDictionary *)extraInfo {// Video playback event.}
// Obtain the video rendering control for displaying the anchor's local video preview.@property (nonatomic, strong) UIView *anchorPreviewView;@property (nonatomic, strong) TRTCCloud *trtcCloud;- (void)setupTRTC {self.trtcCloud = [TRTCCloud sharedInstance];self.trtcCloud.delegate = self;// Set video encoding parameters to determine the picture quality seen by remote users.TRTCVideoEncParam *encParam = [[TRTCVideoEncParam alloc] init];encParam.videoResolution = TRTCVideoResolution_960_540;encParam.videoFps = 15;encParam.videoBitrate = 1300;encParam.resMode = TRTCVideoResolutionModePortrait;[self.trtcCloud setVideoEncoderParam:encParam];// isFrontCamera can specify the use of front/rear camera for video capture[self.trtcCloud startLocalPreview:self.isFrontCamera view:self.anchorPreviewView];// Here you can specify the audio quality, from low to high as SPEECH/DEFAULT/MUSIC.[self.trtcCloud startLocalAudio:TRTCAudioQualityDefault];}
enterRoom. The SDK will only start the camera preview and audio capture, and wait until you call enterRoom to start streaming.enterRoom. The SDK will start the camera preview and audio capture and automatically start streaming.- (void)setupRenderParams {TRTCRenderParams *params = [[TRTCRenderParams alloc] init];// Video mirror modeparams.mirrorType = TRTCVideoMirrorTypeAuto;// Video fill modeparams.fillMode = TRTCVideoFillMode_Fill;// Video rotation angleparams.rotation = TRTCVideoRotation_0;// Set the rendering parameters for the local video.[self.trtcCloud setLocalRenderParams:params];// Set the video mirror mode for the encoder output.[self.trtcCloud setVideoEncoderMirror:YES];// Set the rotation of the video encoder output.[self.trtcCloud setVideoEncoderRotation:TRTCVideoRotation_0];}
- (void)enterRoomByAnchorWithUserId:(NSString *)userId roomId:(NSString *)roomId {TRTCParams *params = [[TRTCParams alloc] init];// Take the room ID string as an example.params.strRoomId = roomId;params.userId = userId;// UserSig obtained from the business backend.params.userSig = @"userSig";// Replace with your SDKAppID.params.sdkAppId = 0;// Specify the anchor role.params.role = TRTCRoleAnchor;// Enter the room in an interactive live streaming scenario.[self.trtcCloud enterRoom:params appScene:TRTCAppSceneLIVE];}// Event callback for the result of entering the room.- (void)onEnterRoom:(NSInteger)result {if (result > 0) {// result indicates the time taken (in milliseconds) to join the room.NSLog(@"Enter room succeed!");} else {// result indicates the error code when you fail to enter the room.NSLog(@"Enter room failed!");}}
roomId and string type strRoomId. Rooms of different types are not interconnected. It is advisable to unify the room ID type.TRTCAppSceneLIVE as the room entry mode.- (void)enterRoomByAudienceWithUserId:(NSString *)userId roomId:(NSString *)roomId {TRTCParams *params = [[TRTCParams alloc] init];// Take the room ID string as an example.params.strRoomId = roomId;params.userId = userId;// UserSig obtained from the business backend.params.userSig = @"userSig";// Replace with your SDKAppID.params.sdkAppId = 0;// Specify the audience role.params.role = TRTCRoleAudience;// Enter the room in an interactive live streaming scenario.[self.trtcCloud enterRoom:params appScene:TRTCAppSceneLIVE];}// Event callback for the result of entering the room.- (void)onEnterRoom:(NSInteger)result {if (result > 0) {// result indicates the time taken (in milliseconds) to join the room.NSLog(@"Enter room succeed!");} else {// result indicates the error code when you fail to enter the room.NSLog(@"Enter room failed!");}}
- (void)onUserAudioAvailable:(NSString *)userId available:(BOOL)available {// The remote user publishes/unpublishes their audio.// Under the automatic subscription mode, you do not need to do anything. The SDK will automatically play the remote user's audio.}- (void)onUserVideoAvailable:(NSString *)userId available:(BOOL)available {// The remote user publishes/unpublishes the primary video.if (available) {// Subscribe to the remote user's video stream and bind the video rendering control.[self.trtcCloud startRemoteView:userId streamType:TRTCVideoStreamTypeBig view:self.remoteView];} else {// Unsubscribe to the remote user's video stream and release the rendering control.[self.trtcCloud stopRemoteView:userId streamType:TRTCVideoStreamTypeBig];}}
- (void)setupRemoteRenderParams {TRTCRenderParams *params = [[TRTCRenderParams alloc] init];// Video mirror modeparams.mirrorType = TRTCVideoMirrorTypeAuto;// Video fill modeparams.fillMode = TRTCVideoFillMode_Fill;// Video rotation angleparams.rotation = TRTCVideoRotation_0;// Set the rendering mode for the remote video.[self.trtcCloud setRemoteRenderParams:@"userId" streamType:TRTCVideoStreamTypeBig params:params];}
- (void)switchToAnchor {// Switched to the anchor role.[self.trtcCloud switchRole:TRTCRoleAnchor];}// Event callback for switching the role.- (void)onSwitchRole:(TXLiteAVError)errCode errMsg:(NSString *)errMsg {if (errCode == ERR_NULL) {// Role switched successfully.}}
- (void)setupTRTC {// Set video encoding parameters to determine the picture quality seen by remote users.TRTCVideoEncParam *encParam = [[TRTCVideoEncParam alloc] init];encParam.videoResolution = TRTCVideoResolution_480_270;encParam.videoFps = 15;encParam.videoBitrate = 550;encParam.resMode = TRTCVideoResolutionModePortrait;[self.trtcCloud setVideoEncoderParam:encParam];// isFrontCamera can specify the use of front/rear camera for video capture[self.trtcCloud startLocalPreview:self.isFrontCamera view:self.audiencePreviewView];// Here you can specify the audio quality, from low to high as SPEECH/DEFAULT/MUSIC.[self.trtcCloud startLocalAudio:TRTCAudioQualityDefault];}
- (void)switchToAudience {// Switched to the audience role.[self.trtcCloud switchRole:TRTCRoleAudience];}// Event callback for switching the role.- (void)onSwitchRole:(TXLiteAVError)errCode errMsg:(NSString *)errMsg {if (errCode == ERR_NULL) {// Stop camera capture and streaming.[self.trtcCloud stopLocalPreview];// Stop microphone capture and streaming.[self.trtcCloud stopLocalAudio];}}
- (void)exitRoom {[self.trtcCloud stopLocalAudio];[self.trtcCloud stopLocalPreview];[self.trtcCloud exitRoom];}// Event callback for exiting the room.- (void)onExitRoom:(NSInteger)reason {if (reason == 0) {NSLog(@"Proactively call exitRoom to exit the room");} else if (reason == 1) {NSLog(@"Removed from the current room by the server");} else if (reason == 2) {NSLog(@"The current room is dissolved");}}
onExitRoom callback notification to inform you.enterRoom again or switch to another audio and video SDK, wait for the onExitRoom callback before proceeding. Otherwise, you may encounter various exceptional issues such as the camera, microphone device being forcibly occupied.DismissRoom and the string type room dissolving API DismissRoomByStrRoomId. You can call the server side numeric type room dissolving API to remove all users from the room and dissolve the room.// Construct product pop-up message bodyNSDictionary *msgDict = @{@"itemNumber": @1, // Item number@"itemPrice": @199.0,// Item price@"itemTitle": @"xxx",// Item title@"itemUrl": @"xxx" // Item URL};NSDictionary *dataDict = @{@"cmd": @"item_popup_msg",@"msg": msgDict};NSError *error;NSData *data = [NSJSONSerialization dataWithJSONObject:dataDict options:0 error:&error];// Send custom group messages (it is recommended that product pop-up messages should be set to high priority)[[V2TIMManager sharedInstance] sendGroupCustomMessage:data to:groupID priority:V2TIM_PRIORITY_HIGH succ:^{// Successfully sent product pop-up message// Locally rendering of product pop-up effect} fail:^(int code, NSString *desc) {// Failed to send product pop-up message}];
https://xxxxxx/v4/group_open_http_svc/send_group_msg?sdkappid=88888888&identifier=admin&usersig=xxx&random=99999999&contenttype=json
{"GroupId": "@TGS#12DEVUDHQ","Random": 2784275388,"MsgPriority": "High", // The priority of the message. It is recommended to set product pop-up messages to high priority"MsgBody": [{"MsgType": "TIMCustomElem","MsgContent": {// itemNumber: item number; itemPrice: item price; itemTitle: item title; itemUrl: item URL"Data": "{\\"cmd\\": \\"item_popup_msg\\", \\"msg\\": {\\"itemNumber\\": 1, \\"itemPrice\\": 199.0, \\"itemTitle\\": \\"xxx\\", \\"itemUrl\\": \\"xxx\\"}}"}}]}
// Custom group messages received.[[V2TIMManager sharedInstance] addSimpleMsgListener:self];- (void)onRecvGroupCustomMessage:(NSString *)msgID groupID:(NSString *)groupID sender:(V2TIMGroupMemberInfo *)info customData:(NSData *)data {if (data.length > 0) {NSError *error;NSDictionary *dataDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];if (!error) {NSString *command = dataDict[@"cmd"];NSDictionary *msgDict = dataDict[@"msg"];if ([command isEqualToString:@"item_popup_msg"]) {NSNumber *itemNumber = msgDict[@"itemNumber"];// Item numberNSNumber *itemPrice = msgDict[@"itemPrice"]; // Item priceNSString *itemTitle = msgDict[@"itemTitle"]; // Item titleNSString *itemUrl = msgDict[@"itemUrl"]; // Item URL// Render product pop-up effect based on item number, item price, item title, and item URL}} else {NSLog(@"Parsing error: %@", error.localizedDescription);}}}
// Construct product pop-up message bodyNSDictionary *msgDict = @{@"itemNumber": @1, // Item number@"itemPrice": @199.0,// Item price@"itemTitle": @"xxx",// Item title@"itemUrl": @"xxx" // Item URL};NSDictionary *dataDict = @{@"cmd": @"item_popup_msg",@"msg": msgDict};NSError *error;NSData *data = [NSJSONSerialization dataWithJSONObject:dataDict options:0 error:&error];// Send SEI information[self.trtcCloud sendSEIMsg:data repeatCount:1];
// Set TRTC event listenerself.trtcCloud.delegate = self;// Receive SEI messages- (void)onRecvSEIMsg:(NSString *)userId message:(NSData *)message {if (message.length > 0) {NSError *error;NSDictionary *dataDict = [NSJSONSerialization JSONObjectWithData:message options:0 error:&error];if (!error) {NSString *command = dataDict[@"cmd"];NSDictionary *msgDict = dataDict[@"msg"];if ([command isEqualToString:@"item_popup_msg"]) {NSNumber *itemNumber = msgDict[@"itemNumber"];// Item numberNSNumber *itemPrice = msgDict[@"itemPrice"]; // Item priceNSString *itemTitle = msgDict[@"itemTitle"]; // Item titleNSString *itemUrl = msgDict[@"itemUrl"]; // Item URL// Render product pop-up effect based on item number, item price, item title, and item URL}} else {NSLog(@"Parsing error: %@", error.localizedDescription);}}}
// Play URL video resourceNSString* url = @"http://1252463788.vod2.myqcloud.com/xxxxx/v.f20.mp4";[_txVodPlayer startVodPlay:url];// Play sandbox local video resources// Obtain the Documents pathNSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];// Obtain the local video pathNSString *videoPath = [NSString stringWithFormat:@"%@/video1.m3u8",documentPath];[_txVodPlayer startVodPlay:videoPath];
TXPlayerAuthParams *p = [TXPlayerAuthParams new];p.appId = 1252463788;p.fileId = @"4564972819220421305";// The psign means player signature. For more information about the signature and how to generate it, see: https://www.tencentcloud.com/document/product/266/42436?from_cn_redirect=1p.sign = @"psignxxxx"; // Player signature[_txVodPlayer startVodPlayWithParams:p];
// Adjust the progress (seconds)[_txVodPlayer seek:time];// Pause playback[_txVodPlayer pause];// Resume playback[_txVodPlayer resume];// End playback[_txVodPlayer stopPlay];
removeVideoWidget to Destroy the view control before exiting the current UI interface. Otherwise, it may cause a memory leak or screen flash.// Destroy the view control[_txVodPlayer removeVideoWidget];
- (void)connectOtherRoom:(NSString *)roomId {NSMutableDictionary *jsonDict = [[NSMutableDictionary alloc] init];? ? // The digit room ID is roomId.[jsonDict setObject:roomId forKey:@"strRoomId"];[jsonDict setObject:self.userId forKey:@"userId"];NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict options:NSJSONWritingPrettyPrinted error:nil];NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];[self.trtcCloud connectOtherRoom:jsonString];}// Result callback for requesting cross-room mic-connection.- (void)onConnectOtherRoom:(NSString *)userId errCode:(TXLiteAVError)errCode errMsg:(NSString *)errMsg {// The user ID of the anchor in the other room you want to initiate the cross-room link-up.// Error code. ERR_NULL indicates the request is successful.// Error message.}
ConnectOtherRoom() multiple times. Currently, a room can connect with up to three other room anchors at most, and up to 10 anchors in a room can conduct cross-room mic-connection competition with anchors in other rooms.- (void)onUserAudioAvailable:(NSString *)userId available:(BOOL)available {// The remote user publishes/unpublishes their audio.// Under the automatic subscription mode, you do not need to do anything. The SDK will automatically play the remote user's audio.}- (void)onUserVideoAvailable:(NSString *)userId available:(BOOL)available {// The remote user publishes/unpublishes the primary video.if (available) {// Subscribe to the remote user's video stream and bind the video rendering control.[self.trtcCloud startRemoteView:userId streamType:TRTCVideoStreamTypeBig view:self.remoteView];} else {// Unsubscribe to the remote user's video stream and release the rendering control.[self.trtcCloud stopRemoteView:userId streamType:TRTCVideoStreamTypeBig];}}
// Exit the cross-room mic-connection.[self.trtcCloud disconnectOtherRoom];// Result callback for exiting cross-room mic-connection.- (void)onDisconnectOtherRoom:(TXLiteAVError)errCode errMsg:(NSString *)errMsg {}
DisconnectOtherRoom(), you may exit the cross-room competition with all other room anchors.DisconnectOtherRoom() to exit the cross-room competition.NSString *beautyConfigPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];beautyConfigPath = [beautyConfigPath stringByAppendingPathComponent:@"beauty_config.json"];NSFileManager *localFileManager=[[NSFileManager alloc] init];BOOL isDir = YES;NSDictionary * beautyConfigJson = @{};if ([localFileManager fileExistsAtPath:beautyConfigPath isDirectory:&isDir] && !isDir) {NSString *beautyConfigJsonStr = [NSString stringWithContentsOfFile:beautyConfigPath encoding:NSUTF8StringEncoding error:nil];NSError *jsonError;NSData *objectData = [beautyConfigJsonStr dataUsingEncoding:NSUTF8StringEncoding];beautyConfigJson = [NSJSONSerialization JSONObjectWithData:objectDataoptions:NSJSONReadingMutableContainerserror:&jsonError];}NSDictionary *assetsDict = @{@"core_name":@"LightCore.bundle",@"root_path":[[NSBundle mainBundle] bundlePath],@"tnn_"@"beauty_config":beautyConfigJson};// Initialize the SDK: Width and height are the width and height of the texture, respectively.self.xMagicKit = [[XMagic alloc] initWithRenderSize:CGSizeMake(width,height) assetsDict:assetsDict];
// RTC Engine SDK sets video data callback for third-party beauty effects[self.trtcCloud setLocalVideoProcessDelegete:self pixelFormat:TRTCVideoPixelFormat_Texture_2D bufferType:TRTCVideoBufferType_Texture];#pragma mark - TRTCVideoFrameDelegate// Construct the YTProcessInput and pass it into the SDK for rendering processing.- (uint32_t)onProcessVideoFrame:(TRTCVideoFrame *_Nonnull)srcFrame dstFrame:(TRTCVideoFrame *_Nonnull)dstFrame {if (!self.xMagicKit) {[self buildBeautySDK:srcFrame.width and:srcFrame.height texture:srcFrame.textureId];// Initialize the XMagic SDK.self.heightF = srcFrame.height;self.widthF = srcFrame.width;}if(self.xMagicKit!=nil && (self.heightF!=srcFrame.height || self.widthF!=srcFrame.width)){self.heightF = srcFrame.height;self.widthF = srcFrame.width;[self.xMagicKit setRenderSize:CGSizeMake(srcFrame.width, srcFrame.height)];}YTProcessInput *input = [[YTProcessInput alloc] init];input.textureData = [[YTTextureData alloc] init];input.textureData.texture = srcFrame.textureId;input.textureData.textureWidth = srcFrame.width;input.textureData.textureHeight = srcFrame.height;input.dataType = kYTTextureData;YTProcessOutput *output = [self.xMagicKit process:input withOrigin:YtLightImageOriginTopLeft withOrientation:YtLightCameraRotation0];dstFrame.textureId = output.textureData.texture;return 0;}
- (void)enableDualStreamMode:(BOOL)enable {// Video encoding parameters for the small-screen stream (customizable).TRTCVideoEncParam *smallVideoEncParam = [[TRTCVideoEncParam alloc] init];smallVideoEncParam.videoResolution = TRTCVideoResolution_480_270;smallVideoEncParam.videoFps = 15;smallVideoEncParam.videoBitrate = 550;smallVideoEncParam.resMode = TRTCVideoResolutionModePortrait;[self.trtcCloud enableEncSmallVideoStream:enable withQuality:smallVideoEncParam];}
// Optional video stream types when subscribing to a remote user's video stream.[self.trtcCloud startRemoteView:userId streamType:TRTCVideoStreamTypeBig view:view];// You can switch the size of the specified remote user's screen at any time.[self.trtcCloud setRemoteVideoStreamType:userId type:TRTCVideoStreamTypeSmall];
TRTCVideoStreamTypeSmall with streamType to pull a low-quality small video for viewing.// Update local preview screen rendering control.[self.trtcCloud updateLocalView:view];// Update the remote user's video rendering control.[self.trtcCloud updateRemoteView:view streamType:TRTCVideoStreamTypeBig forUser:userId];
view refers to the target video rendering control. And streamType only supports TRTCVideoStreamTypeBig and TRTCVideoStreamTypeSub.onError callback. For details, see Error Code Table.Enumeration | Value | Description |
ERR_TRTC_INVALID_USER_SIG | -3320 | Room entry parameter userSig is incorrect. Check if TRTCParams.userSig is empty. |
ERR_TRTC_USER_SIG_CHECK_FAILED | -100018 | UserSig verification failed. Check if the parameter TRTCParams.userSig is filled in correctly or has expired. |
Enumeration | Value | Description |
ERR_TRTC_CONNECT_SERVER_TIMEOUT | -3308 | Room entry request timed out. Check if your internet connection is lost or if a VPN is enabled. You may also attempt to switch to 4G for testing. |
ERR_TRTC_INVALID_SDK_APPID | -3317 | Room entry parameter sdkAppId is incorrect. Check if TRTCParams.sdkAppId is empty. |
ERR_TRTC_INVALID_ROOM_ID | -3318 | Room entry parameter roomId is incorrect. Check if TRTCParams.roomId or TRTCParams.strRoomId is empty. Note that roomId and strRoomId cannot be used interchangeably. |
ERR_TRTC_INVALID_USER_ID | -3319 | Room entry parameter userId is incorrect. Check if TRTCParams.userId is empty. |
ERR_TRTC_ENTER_ROOM_REFUSED | -3340 | Room entry request is denied. Check if enterRoom is called consecutively to enter rooms with the same ID. |
Enumeration | Value | Description |
ERR_CAMERA_START_FAIL | -1301 | Failed to open the camera. For example, if there is an exception for the camera's configuration program (driver) on a Windows or macOS device, you should try disabling then re-enabling the device, restarting the machine, or updating the configuration program. |
ERR_MIC_START_FAIL | -1302 | Failed to open the mic. For example, if there is an exception for the mic's configuration program (driver) on a Windows or macOS device, you should try disabling then re-enabling the device, restarting the machine, or updating the configuration program. |
ERR_CAMERA_NOT_AUTHORIZED | -1314 | The device of camera is unauthorized. This typically occurs on mobile devices and may be due to the user having denied the permission. |
ERR_MIC_NOT_AUTHORIZED | -1317 | The device of mic is unauthorized. This typically occurs on mobile devices and may be due to the user having denied the permission. |
ERR_CAMERA_OCCUPY | -1316 | The camera is occupied. Try a different camera. |
ERR_MIC_OCCUPY | -1319 | The mic is occupied. This occurs when, for example, the user is currently having a call on the mobile device. |
setLocalRenderParams and video encoding mirror setVideoEncoderMirror. These mirrors separately affect the mirror effect of the local preview video and that of the video encoding output video (the mirror mode for remote audiences and on-cloud recordings). If you expect the mirror effect seen in the local preview to also take effect on the remote audiences' end, follow the following encoding procedures.// Set the rendering parameters for the local video.TRTCRenderParams *params = [[TRTCRenderParams alloc] init];params.mirrorType = TRTCVideoMirrorTypeEnable; // Video mirror modeparams.fillMode = TRTCVideoFillMode_Fill; // Video fill modeparams.rotation = TRTCVideoRotation_0; // Video rotation angle[self.trtcCloud setLocalRenderParams:params];// Set the video mirror mode for the encoder output.[self.trtcCloud setVideoEncoderMirror:YES];
// Get the maximum zoom factor for the camera (only for mobile devices).CGFloat zoomRatio = [[self.trtcCloud getDeviceManager] getCameraZoomMaxRatio];// Set the zoom factor for the camera (only for mobile devices).// Value range is 1 - 5. 1 means the furthest field of view (normal lens), and 5 means the closest field of view (zoom lens). The maximum recommended value is 5, exceeding this may result in blurry video.[[self.trtcCloud getDeviceManager] setCameraZoomRatio:zoomRatio];
// Enable or disable the camera's autofocus feature (only for mobile devices).[[self.trtcCloud getDeviceManager] enableCameraAutoFocus:NO];// Set the focus position of the camera (only for mobile devices).// The precondition for using this API is to first disable the autofocus feature using enableCameraAutoFocus.[[self.trtcCloud getDeviceManager] setCameraFocusPosition:CGPointMake(x, y)];
// Determine if the current camera is the front camera (only for mobile devices).BOOL isFrontCamera = [[self.trtcCloud getDeviceManager] isFrontCamera];// Switch to front or rear cameras (only for mobile devices).// Passing true means switching to front, and passing false means switching to rear.[[self.trtcCloud getDeviceManager] switchCamera:!isFrontCamera];
Esta página foi útil?
Você também pode entrar em contato com a Equipe de vendas ou Enviar um tíquete em caso de ajuda.
comentários