暖暖视频免费观**,国产免费美女被艹视频,毛片一级毛片,不卡三级

智慧服務(wù),成就美好體驗 項目咨詢

主頁 > 服務(wù)與支持 > 開發(fā)平臺 > 客戶端SDK參考 > iOS Native SDK > 快速入門 快速入門

入門使用

快速入門

更新時間:2019-11-20

開發(fā)準備環(huán)境

在開發(fā)的過程中請滿足如下環(huán)境要求。

表1 環(huán)境要求

環(huán)境和工具名稱

版本要求

操作系統(tǒng)

Mac OSX High Sierra 10.13.6及以上

Xcode

Xcode9.4.1及以上

iOS系統(tǒng)版本

iOS9.0及以上,64位設(shè)備

會議云服務(wù)的用戶帳號

帳號可來源于華為公有云。開通方法請參見“開發(fā)前準備”。

創(chuàng)建工程

  1. 打開Xcode,選擇“File > New > Project”。系統(tǒng)顯示選擇模板界面;選擇工程類型“Single View Application”,單擊“Next”。系統(tǒng)顯示配置界面。

     

     

  2. 在“Product Name” 處輸入“TSDK_Demo_iOS”,單擊“Next”。選擇一個工程路徑。

     

     

  3. 單擊選擇工程存放目錄路徑,點擊“Create”,系統(tǒng)顯示工程主界面。

     

     

 

引入庫文件

  1. 下載工程所需的庫文件包,解壓縮。在工程里新建文件夾,命名為“Depend”,把庫文件lib、ImSDK以及頭文件include放置在Depend文件夾里面。

     

     

  2. 右鍵單擊工程左側(cè)“eSDK_TUP_Demo_iOS”項目名稱,右鍵選擇“Add Files to “eSDK_TUP_Demo_iOS”...”,系統(tǒng)顯示庫文件添加頁面。

     

     

  3. 根據(jù)庫文件存放目錄路徑(步驟1),將” Depend”文件夾添加到工程中,點擊“Add”,完成庫文件的添加。

     

     

 

添加依賴庫

注意:

由于TUP的庫文件是靜態(tài)庫,因此依賴庫需要手動添加,下面只介紹libc++.tbd的添加,其他庫添加方式相同。

  1. 選中工程,右鍵,選擇“New Group”。

     

     

  2. 修改group的名字為“Frameworks”。

     

     

  3. 按照下圖依次在點擊步驟1~3,彈出添加依賴庫文件的對話框。

     

     

  4. 在搜索框中查找libc++.tbd,選中,單擊“Add”。

     

     

  5. 將下圖所示的依賴庫按照上訴方法添加至工程。

     

    說明: 

    Foundation.framework :包含Cocoa Foundation層的類和方法。

    UIKit.framework :包含iOS應(yīng)用程序用戶界面層使用的類和方法。

    OpenGLES.framework :包含OpenGL ES接口。OpenGL ES框架是OpenGL跨平臺2D和3D渲染庫的跨平臺版本。

    AudioToolbox.framework :包含處理音頻流數(shù)據(jù)以及播放或錄制音頻的接口。

    VedioToolbox.framework:提供硬解碼和硬編碼API

    AVFoundation.framework :包含播放或錄制音頻的Objective-C接口。

    CoreAudio.framework:包含Core Audio框架使用的各種數(shù)據(jù)類型。

    CoreData.framework :包含管理應(yīng)用程序數(shù)據(jù)模型的接口。

    MediaPlayer.framework :包含顯示全屏視頻的接口。

    SystemConfiguration.framework:包含用于處理設(shè)備網(wǎng)絡(luò)配置的接口。

    Security.framework :包含管理證書、公鑰私鑰以及信任策略的接口。

    QuartzCore.framework :包含Core Animation接口。

    CoreVideo.framework :包含操作音頻和視頻的底層例程。

    CoreMedia.framework :包含操作音頻和視頻的底層例程。

    AVFoundation.framework :包含播放或錄制音頻的Objective-C接口。

    MobileCoreServices.framework :定義系統(tǒng)支持的統(tǒng)一類型標識符(UTIs).

     

 

工程配置

  1. iOS10后,我們需要在工程主界面Navigator的Info.plist文件中添加權(quán)限字段。選擇Info.plist文件,右擊任意一行,選中“Add Row”,直接輸入名稱” Privacy - Microphone Usage Description ”,按回車鍵完成添加。

     

    按照此方法依次添加“Privacy - Camera Usage Description”、“Privacy - Contacts Usage Description”和“Privacy - Photo Library Usage Description”。

    說明: 

    麥克風權(quán)限:Privacy - Microphone Usage Description

    相機權(quán)限: Privacy - Camera Usage Description

    相冊權(quán)限: Privacy - Photo Library Usage Description

    通訊錄權(quán)限:Privacy - Contacts Usage Description

     

  2. 單擊Navigator下的工程名稱,選擇“Build Settings>Build Option>Enable Bitcode>NO”。

     

     

  3. 單擊Navigator下的工程名稱,選擇“Build Settings>Linking>Other Linker Flags”,添加“-ObjC”。

     

     

  4. 真機調(diào)試前,需要根據(jù)手機系統(tǒng)版本修改Deployment Target,需使其小于等于手機系統(tǒng)版本。

     

     

  5. TUP庫采用了C++的混編方式碼,您的工程還需要進行其他配置。

     

    1. 點擊“TARGETS>Build Settings>Apple LLMV7.0-language-C++”,將“C++ Standard Library”的值設(shè)為“libstdc++(GUN C++ standrary library)”。

    2. 將工程目錄中的某一個實現(xiàn)過文件后綴手動改為“.mm”。

     

 

編碼實現(xiàn)

源碼鏈接:ViewController.mm.

代碼參考

單擊上述結(jié)構(gòu)中的文件名獲取文件源碼,并向各文件填充代碼。部分代碼片段參考如下:

  • 選擇ViewController.mm,完成TUP庫Login組件初始化。
    TSDK_VOID onTSDKNotifications(TSDK_UINT32 msgid, TSDK_UINT32 param1, TSDK_UINT32 param2, TSDK_VOID *data)
    {
        NSLog(@"onTUPLoginNotifications : %#x",msgid);
        dispatch_async(dispatch_get_main_queue(), ^{
            switch (msgid)
            {
                case TSDK_E_LOGIN_EVT_AUTH_SUCCESS:
                {
                    NSLog(@"Uportal login success !");
                    [ViewController showMessages:@"Uportal login success"];
                }
                    break;
                case TSDK_E_LOGIN_EVT_AUTH_FAILED:
                {
                    NSLog(@"Uportal login fail !");
                    [ViewController showMessages:@"Uportal login fail"];
                }
                    break;
                default:
                    break;
            }
        });
    }
    -(BOOL)initUportalLoginService
    {
        TSDK_S_LOG_PARAM logParam;
        memset(&logParam, 0, sizeof(TSDK_S_LOG_PARAM));
        NSString *logPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingString:@"/TUPC60log"];
        NSString *path = [logPath stringByAppendingString:@"/tsdk"];
        logParam.level = TSDK_E_LOG_DEBUG;
        logParam.file_count = 1;
        logParam.max_size_kb = 4*1024;
        strcpy(logParam.path, [path UTF8String]);
        TSDK_RESULT result = tsdk_set_config_param(TSDK_E_CONFIG_LOG_PARAM, &logParam);
    
        TSDK_S_APP_INFO_PARAM app_info;
        memset(&app_info, 0, sizeof(TSDK_S_APP_INFO_PARAM));
        app_info.client_type = TSDK_E_CLIENT_MOBILE;
        strcpy(app_info.product_name, "SoftClient on Mobile");
        app_info.support_audio_and_video_call = TSDK_TRUE;
        app_info.support_ctd = TSDK_TRUE;
        app_info.support_audio_and_video_conf = TSDK_TRUE;
        app_info.support_enterprise_address_book = TSDK_TRUE;
        result = tsdk_init(&app_info ,&onTSDKNotifications);
        return result == TSDK_SUCCESS ? YES : NO;
    
    }
     
  • 發(fā)送登錄請求
    NSString *account = @"Account";
    NSString *password = @"Password";
    NSString *serverAddress = @"192.168.1.100";
    int port = 443;
    
    -(BOOL)loginAuthorizeWithServerAddress:(NSString *)serverAddress port:(int)port account:(NSString *)account password:(NSString *)password
    {
        TSDK_S_LOGIN_PARAM loginParam;
        memset(&loginParam, 0, sizeof(TSDK_S_LOGIN_PARAM));
        loginParam.user_id = 1;
        loginParam.auth_type = TSDK_E_AUTH_NORMAL;
        strcpy(loginParam.user_name, [account UTF8String]);
        strcpy(loginParam.password, [password UTF8String]);
        loginParam.server_type = TSDK_E_SERVER_TYPE_PORTAL;
        strcpy(loginParam.server_addr, [serverAddress UTF8String]);
        loginParam.server_port = (TSDK_UINT16)port;
        TSDK_RESULT result = tsdk_login(&loginParam);
    
        return result == TSDK_SUCCESS ? YES : NO;
    }
     
  • 處理回調(diào)函數(shù)登錄事件。
    TSDK_VOID onTSDKNotifications(TSDK_UINT32 msgid, TSDK_UINT32 param1, TSDK_UINT32 param2, TSDK_VOID *data)
    {
        NSLog(@"onTUPLoginNotifications : %#x",msgid);
        dispatch_async(dispatch_get_main_queue(), ^{
            switch (msgid)
            {
                case TSDK_E_LOGIN_EVT_AUTH_SUCCESS:
                {
                    NSLog(@"Uportal login success !");
                    [ViewController showMessages:@"Uportal login success"];
                }
                    break;
                case TSDK_E_LOGIN_EVT_AUTH_FAILED:
                {
                    NSLog(@"Uportal login fail !");
                    [ViewController showMessages:@"Uportal login fail"];
                }
                    break;
                default:
                    break;
            }
        });
    }
     

 

編譯及調(diào)試

  1. 單擊“Product > Run”,運行后如下所示。

     

    圖1 界面 

     

  2. 在界面中依次輸入如下表信息。

     

    表2 界面信息

    分類

    輸入信息

    說明

    備注

    鑒權(quán)信息

    ServerAddress

    eSDK服務(wù)器地址

    入?yún)⒉荒転榭?/p>

    Server Port

    eSDK服務(wù)器端口號

    Account

    eSDK登錄名

    Password

    eSDK鑒權(quán)密碼

    入?yún)⒉荒転榭?/p>

    說明: 

    以上信息需要在成功預(yù)約華為遠程實驗室后,從遠程實驗室獲取。

     

  3. 信息輸入完成后,單擊“Login”按鈕。等待至頁面彈出提示框,顯示“Login Success!”,表示調(diào)用服務(wù)成功。

     

    圖2 登錄成功 

     

會議中屏幕共享

描述

iOS端屏幕共享需要進行iOS Extension的開發(fā)進行實現(xiàn),以下步驟用于說明如何集成SDK進行屏幕共享Extension的開發(fā),另外由于相關(guān)特性對系統(tǒng)能力的依賴,因此需要iOS12及以上版本才能支持屏幕共享功能。

業(yè)務(wù)流程

  1. 準備過程:iOS應(yīng)用主工程、Extension的開發(fā)所需要的證書和文件。
  2. 以下以CloudLinkMeetingDemo為例進行說明,打開主工程中的AppGroup開關(guān),并設(shè)置在第一步中申請到的可用的appid。

  3. 創(chuàng)建新的Extensions Target,選擇File---New---Target--Broadcast Upload Extension,創(chuàng)建Extension target。

  4. 打開Extensions里面的appgroup開關(guān)。

  5. 設(shè)置entitlements文件中的appGroups為第1步中申請的值。

  6. 在Extensions 的“Build Phases > Link Binary With Libraries”中添加如下庫。

    ReplayKit.framework:系統(tǒng)庫

    CloudLinkMeetingScreenShare.framework:SDK提供的庫

  7. 在Extensions 的SampleHandler.m文件中添加代碼如下。
    #import "SampleHandler.h"
    #import <CLoudLinkMeetingScreenShare/ScreenShareManager.h>
    
    @interface SampleHandler()<ScreenShareManagerDelegate>
    @property (strong, nonatomic) ScreenShareManager *screenShareManager;
    
    @end
    
    @implementation SampleHandler
    
    - (instancetype)init {
        if (self = [super init]) {
            self.screenShareManager = [[ScreenShareManager alloc] initWithAppGroupIdentifier:自己申請的appGroupIdentifier];
            self.screenShareManager.delegate = self;
        }
        return self;
    }
    
    
    - (void)broadcastStartedWithSetupInfo:(NSDictionary<NSString *,NSObject *> *)setupInfo {
        // User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional.
        [self.screenShareManager broadcastStartedWithSetupInfo:setupInfo];
    }
    
    - (void)dealloc {
        self.screenShareManager = nil;
    }
    
    - (void)broadcastPaused {
        // User has requested to pause the broadcast. Samples will stop being delivered.
        [self.screenShareManager broadcastPaused];
    }
    
    - (void)broadcastResumed {
        // User has requested to resume the broadcast. Samples delivery will resume.
        [self.screenShareManager broadcastResumed];
    }
    
    - (void)broadcastFinished {
        // User has requested to finish the broadcast.
        [self.screenShareManager broadcastFinished];
    }
    
    - (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType {
    
        switch (sampleBufferType) {
            case RPSampleBufferTypeVideo:
                // Handle video sample buffer
                [self.screenShareManager processSampleBuffer:sampleBuffer withType:RPSampleBufferTypeVideo];
                break;
            case RPSampleBufferTypeAudioApp:
                // Handle audio sample buffer for app audio
                break;
            case RPSampleBufferTypeAudioMic:
                // Handle audio sample buffer for mic audio
                break;
    
            default:
                break;
        }
    }
    
    - (void)screenShareManagerFinishBroadcastWithError:(NSError *)error {
        [self finishBroadcastWithError: error];
    }
    
    @end
     
  8. 完成編碼。
  9. 屏幕共享有兩種開啟方式,只能在會議中進行。
    1. 會議中點擊下方的屏幕共享按鈕,選擇應(yīng)用進行屏幕共享。

       

    2. 會議中打開手機的控制中心,長按錄制按鈕,彈出菜單中選擇。