主页 > 服务与支持 > 开发平台 > 客户端SDK参考 > iOS Native SDK > 音视频呼叫 设备管理

入门使用

设备管理

更新时间:2019-11-20

描述

管理音视频设备,包括麦克风、扬声器和摄像头。

业务流程

获取音、视频设备列表

说明: 

应用程序在任何阶段均可以获取当前可用的音视频设备信息,为更方便地进行后继具体设备管理,建议应用程序在初始化阶段和系统检测到设备变化时,获取设备信息并保存维护。

  1. UI调用tsdk_get_devices()获取音频视频设备列表。
    说明: 
    • 获取麦克风列表时,device_type值为TSDK_E_DEVICE_MIC。
    • 获取扬声器列表时,device_type值为TSDK_E_DEVICE_SPEAKER。
    • 获取摄像头列表时,device_type值为TSDK_E_DEVICE_CAMERA。

    代码示例:

     
    -(BOOL)obtainDeviceListWityType:(DEVICE_TYPE)deviceType
    {     
        TSDK_UINT32 deviceNum = 0;   
        TSDK_S_DEVICE_INFO *deviceInfo = nullptr;    
        memset(deviceInfo, 0, sizeof(TSDK_S_DEVICE_INFO));    
        TSDK_RESULT ret = tsdk_get_devices((TSDK_E_DEVICE_TYPE)deviceType, &deviceNum, deviceInfo);    
        DDLogInfo(@"Call_Log: tsdk_get_devices = %#x,count:%d",ret,deviceNum);    
        if (deviceNum>0)    
        {        
            DDLogInfo(@"again");        
            deviceInfo = new TSDK_S_DEVICE_INFO[deviceNum];        
            TSDK_RESULT rets = tsdk_get_devices((TSDK_E_DEVICE_TYPE)deviceType, &deviceNum, deviceInfo);        
            DDLogInfo(@"Call_Log: tsdk_get_devices = %#x,count:%d",rets,deviceNum);        
            for (int i = 0; i<deviceNum; i++)        
           {            
                DDLogInfo(@"Call_Log: ulIndex:%d,strName:%s,string:%@",deviceInfo[i].index,deviceInfo[i].device_name,[NSString stringWithUTF8String:deviceInfo[i].device_name]);        }    
        }    
        delete [] deviceInfo;    
        return ret == TSDK_SUCCESS ? YES : NO;
    }
     

 

管理音频设备

说明: 

一般用于用户对音频设备(麦克风和扬声器)进行设置和切换。

  1. UI调用tsdk_set_mobile_audio_route()设置移动音频路由设备。
    说明: 

    移动的音频设备包括:蓝牙、听筒和耳机

    代码示例:

    -(BOOL)configAudioRoute:(ROUTE_TYPE)route
    {    
        TSDK_E_MOBILE_AUIDO_ROUTE audioRoute = (TSDK_E_MOBILE_AUIDO_ROUTE)route;    
        TSDK_RESULT result = tsdk_set_mobile_audio_route(audioRoute);    
        DDLogInfo(@"tsdk_set_mobile_audio_route result is %@, audioRoute is :%d",result == TSDK_SUCCESS ? @"YES" : @"NO",audioRoute);    
        return result == TSDK_SUCCESS ? YES : NO;
    } 
     
  2. UI调用tsdk_get_mobile_audio_route()获取移动音频路由设备。

    代码示例:

     
    -(ROUTE_TYPE)obtainMobileAudioRoute
    {   
        TSDK_E_MOBILE_AUIDO_ROUTE route;    
        TSDK_RESULT result = tsdk_get_mobile_audio_route(&route);    
        DDLogInfo(@"tsdk_get_mobile_audio_route result is %d, audioRoute is :%d",result,route);    
        return (ROUTE_TYPE)route;
    }
     

 

管理视频设备

说明: 

一般用于用户对摄像头进行设置和切换。

  1. UI调用tsdk_set_video_orient()设置当前使用的摄像头设备。

    代码示例:

     
    -(BOOL)switchCameraIndex:(NSUInteger)cameraCaptureIndex callId:(unsigned int)callId
    {    
        TSDK_S_VIDEO_ORIENT orient;
        memset(&orient, 0, sizeof(TSDK_S_VIDEO_ORIENT));    
        orient.choice = 1;    
        orient.portrait = 0;    
        orient.landscape = 0;    
        orient.seascape = 1;    
        TSDK_RESULT result = tsdk_set_video_orient(callId, (TSDK_UINT32)cameraCaptureIndex, &orient);    
        if (result == TSDK_SUCCESS)    
        {        
            _cameraCaptureIndex = cameraCaptureIndex == 1 ? CameraIndexFront : CameraIndexBack;    
        }    
        [self updateVideoRenderInfoWithVideoIndex:(CameraIndex)cameraCaptureIndex withRenderType:TSDK_E_VIDEO_WND_LOCAL andCallId:callId];    
        return result == TSDK_SUCCESS ? YES : NO;
    }
     

 

预览本地视频

说明: 

一般用于设备设置时,检测本地摄像头工作状态是否正常。

图1 预览本地视频流程 
  1. UI先创建本地预览窗口,再调用tsdk_open_video_preview()打开本地视频预览窗口,其中摄像头索引填写“获取音、视频设备列表”过程中获取到的摄像头索引。

    代码示例:

     - (BOOL)videoPreview:(unsigned int)cameraIndex toView:(id) viewHandler
    {    
        _videoPreview = viewHandler;    
        TSDK_RESULT ret = tsdk_open_video_preview((TSDK_UPTR)viewHandler, (TSDK_UINT32)cameraIndex);    
        DDLogInfo(@"Camera_Log:tsdk_open_video_preview result is %d", ret);    
        return ret == TSDK_SUCCESS ? YES : NO;
    }
     
  2. UI调用tsdk_close_video_preview()关闭本地视频预览窗口,同时销毁本地预览窗口。

    代码示例:

    -(void)stopVideoPreview
    {    
        tsdk_close_video_preview();
    }
     

 

注意事项

无。