You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

997 lines
38 KiB

//
// JCMediaChannel.h
// JCSDK-OC
//
// Created by maikireton on 2017/8/11.
// Copyright © 2017年 juphoon. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "JCMediaChannelCallback.h"
#import "JCMediaChannelParticipant.h"
#import "JCMediaChannelConstants.h"
#import "JCMediaChannelQueryInfo.h"
/**
* @defgroup
* @{
*
*/
/**
*
*/
@interface JCMediaChannelSipParamExtra : NSObject
/**
* {@link JCMediaChannel#inviteSipUser:sipParam: inviteSipUser} userId sipUri
* - true: sipUri
* - false:
*/
@property (nonatomic) bool sipUri;
/**
* sip userId sip sipUri true
* - true: sip userId sip
* - false: sip userId sip
*/
@property (nonatomic) bool route;
/**
* sip用户加入会议后的昵称
*/
@property (nonatomic, strong) NSString* __nullable displayName;
/**
* {@link JCMediaChannel.inviteSipUser:sipParam: inviteSipUser} userId Mcu Mcu
* - true: Mcu
* - false: Mcu
*/
@property (nonatomic) bool mcu;
/**
*
* - true:
* - false:
*/
@property (nonatomic) bool video;
/**
* dtmf
*/
@property (nonatomic, strong) NSString* __nullable dtmfPassowrd;
/**
* sipUriroutdisplayNamemcuvideodtmfPassword json
*
* @return json
*/
-(NSString* __nonnull)toParamString;
@end
/**
* Sip
*/
@interface JCMediaChannelSipParam : NSObject
/**
* SIP呼叫
*/
@property (nonatomic, strong) NSString* __nullable callerNumber;
/**
* ID
*/
@property (nonatomic, strong) NSString* __nullable coreNetwork;
/**
*
*/
@property (nonatomic) JCMediaChannelSipParamExtra* __nullable extra;
@end
/**
*
*/
@interface JCMediaChannelRecordParamVideoConfig : NSObject
/** 录制器录制时订阅的订阅等级, 默认为 JCMediaChannelVideoLevelMin */
@property (nonatomic) JCMediaChannelVideoLevel videoLevel;
/** 录制混屏模式,默认为 JCMediaChannelMergeModeIntellegence */
@property (nonatomic) JCMediaChannelMergeMode mergeMode;
/**
* , JCMediaChannelMergeModeExFreelayoutI, mergeMode JCMediaChannelMergeModeIntellegence
*/
@property (nonatomic) JCMediaChannelMergeModeEx mergeModeEx;
/** 录制帧速率 1-30,默认为 20 */
@property (nonatomic) int mergeFPS;
/** 录制码率kpbs,默认为 300, 当 mergeMode 为 JCMediaChannelMergeModeIntellegence 有效 */
@property (nonatomic) int mergeBitrate;
/** 录制文件高 1-1080, 默认为 0 表示自动设置,当 mergeMode 为 JCMediaChannelMergeModeIntellegence 有效 */
@property (nonatomic) int mergeHeight;
/** 录制文件宽 1-1920,默认为 0 表示自动设置,当 mergeMode 为 JCMediaChannelMergeModeIntellegence 有效 */
@property (nonatomic) int mergeWidth;
@end
/**
*
*/
@interface JCMediaChannelRecordParam : NSObject
/**
*
*
* {@link JCMediaChannel#enableRecord:recordParam: enableRecord} recordParam 使 {@link buildQiniuRecordParam:bucketName:secretKey:accessKey:fileName: buildQiniuRecordParam} {@link buildAliossRecordParam:bucketName:secretKey:accessKey:fileName:endpoint: buildAliossRecordParam}
*/
@property (nonatomic, strong) NSString* __nonnull recordString;
/**
*
*
* bucketNamesecretKeyaccessKey
*
* @param video
* @param bucketName bucketName
* @param secretKey secretKey
* @param accessKey accessKey
* @param fileName
* @return
*/
+(NSString* __nonnull)buildQiniuRecordParam:(BOOL)video bucketName:(NSString* __nonnull)bucketName secretKey:(NSString* __nonnull)secretKey accessKey:(NSString* __nonnull)accessKey fileName:(NSString* __nonnull)fileName;
/**
*
*
* bucketNamesecretKeyaccessKey
*
* @param video
* @param bucketName bucketName
* @param secretKey secretKey
* @param accessKey accessKey
* @param fileName
* @param videoConfig
* @return
*/
+(NSString* __nonnull)buildQiniuRecordParam:(BOOL)video bucketName:(NSString* __nonnull)bucketName secretKey:(NSString* __nonnull)secretKey accessKey:(NSString* __nonnull)accessKey fileName:(NSString* __nonnull)fileName videoConfig:(JCMediaChannelRecordParamVideoConfig* __nullable)videoConfig;
/**
*
*
* bucketNamesecretKeyaccessKeyendpoint
*
* @param video
* @param bucketName bucketName
* @param secretKey secretKey
* @param accessKey accessKey
* @param endpoint endpoint
* @param fileName
* @return
*/
+(NSString* __nonnull)buildAliossRecordParam:(BOOL)video bucketName:(NSString* __nonnull)bucketName secretKey:(NSString* __nonnull)secretKey accessKey:(NSString* __nonnull)accessKey endpoint:(NSString* __nonnull)endpoint fileName:(NSString* __nonnull)fileName;
/**
*
*
* bucketNamesecretKeyaccessKeyendpoint
*
* @param video
* @param bucketName bucketName
* @param secretKey secretKey
* @param accessKey accessKey
* @param endpoint endpoint
* @param fileName
* @param videoConfig
* @return
*/
+(NSString* __nonnull)buildAliossRecordParam:(BOOL)video bucketName:(NSString* __nonnull)bucketName secretKey:(NSString* __nonnull)secretKey accessKey:(NSString* __nonnull)accessKey endpoint:(NSString* __nonnull)endpoint fileName:(NSString* __nonnull)fileName videoConfig:(JCMediaChannelRecordParamVideoConfig* __nullable)videoConfig;
/**
* minio录制参数构造
*
* bucketNamesecretKeyaccessKeyendpoint
*
* @param video
* @param bucketName minio bucketName
* @param secretKey minio secretKey
* @param accessKey minio accessKey
* @param endpoint minio endpoint
* @param fileName
* @return
*/
+(NSString *__nonnull)buildMinioRecordParam:(BOOL)video bucketName:(NSString *__nonnull)bucketName secretKey:(NSString *__nonnull)secretKey accessKey:(NSString * __nonnull)accessKey endpoint:(NSString * __nonnull)endpoint fileName:(NSString * __nonnull)fileName;
/**
* minio录制参数构造
*
* bucketNamesecretKeyaccessKeyendpoint minio开发者平台获取
*
* @param video
* @param bucketName minio bucketName
* @param secretKey minio secretKey
* @param accessKey minio accessKey
* @param endpoint minio endpoint
* @param fileName
* @param videoConfig
* @return
*/
+(NSString *__nonnull)buildMinioRecordParam:(BOOL)video bucketName:(NSString *__nonnull)bucketName secretKey:(NSString *__nonnull)secretKey accessKey:(NSString * __nonnull)accessKey endpoint:(NSString * __nonnull)endpoint fileName:(NSString * __nonnull)fileName videoConfig:(JCMediaChannelRecordParamVideoConfig* __nullable)videoConfig;
@end
/**
* {@link JCMediaChannel#join:joinParam: join}
*/
@interface JCMediaChannelJoinParam : NSObject
/**
* 16
*/
@property (nonatomic) int capacity;
/**
* nil
*
*
*/
@property (nonatomic, strong) NSString* __nullable cdn;
/**
* nil
*
*
*/
@property (nonatomic, strong) JCMediaChannelRecordParam * __nullable record;
/**
* "123456"
*/
@property (nonatomic, strong) NSString* __nonnull password;
/**
*
* - true:
* - false:
*/
@property (nonatomic) bool smooth;
/**
* @ref JCMediaChannelMaxResolution360
* - @ref JCMediaChannelMaxResolution360 : 360p
* - @ref JCMediaChannelMaxResolution720 : 720p
* - @ref JCMediaChannelMaxResolution1080 : 1080p
*/
@property (nonatomic) JCMediaChannelMaxResolution maxResolution;
/// @cond Doxygen_All
/**
* uri {@link join:joinParam: join} uri
* - true:
* - false:
*/
@property (nonatomic) bool uriMode;
/// @endcond
/**
* 20
*/
@property (nonatomic) int heartbeatTime;
/**
* 60
*/
@property (nonatomic) int heartbeatTimeout;
/**
* 1-30, 24
*/
@property (nonatomic) int framerate;
/**
* ""
*/
@property (nonatomic, strong) NSString* __nullable customProperty;
/**
*
*
* - 1
* <br>
* <br>
* 116:9 <br>
* 216 <br>
* 3 <br>
* "120 3 750 4 950 6 1200 9 1600" <br>
* 640120*3/9*16 360120*3 750kbps <br>
* 848120*4/9*16 480120*4 950kbps <br>
* 1280120*6/9*16 720120*6 1200kbps <br>
* 1920120*9/9*16 1080120*9 1600kbps <br>
* - 2 <br>
*
* - 3 <br>
* <br>
* 1 <br>
* 2 <br>
* "120 3 750 3 750 6 1200 9 1600" <br>
* "120 3 750 6 1200 9 1600" <br>
* "120 3 750 6 1200 9 1600" "120 3 750 3 750 6 1200 9 1600"
*/
@property (nonatomic, strong) NSString* __nullable customVideoResolution;
/**
* 16:9
*/
@property (nonatomic) float videoRatio;
/**
*
*
* kbps 0 0
*/
@property (nonatomic) int defaultBitrate;
@end
/**
*
*/
@interface JCMediaChannelPropChangeParam : NSObject
/**
*
* - true:
* - false:
*/
@property (nonatomic) bool uploadLocalAudio;
/**
*
* - true:
* - false:
*/
@property (nonatomic) bool uploadLocalVideo;
/**
*
* - true:
* - false:
*/
@property (nonatomic) bool audioOutput;
/**
* CDN状态是否变化
* - true:
* - false:
*/
@property (nonatomic) bool cdnState;
/**
*
* - true:
* - false:
*/
@property (nonatomic) bool recordState;
/**
*
* - true:
* - false:
*/
@property (nonatomic) bool screenShare;
/**
*
* - true:
* - false:
*/
@property (nonatomic) bool title;
/**
*
* - true:
* - false:
*/
@property (nonatomic) bool customProperty;
@end
/**
* {@link JCMediaChannel#enableScreenShare: enableScreenShare}
*/
@interface JCMediaChannelScreenShareParam : NSObject
/**
*
*
* kbps 0 使
*/
@property (nonatomic) int bitrate;
/**
*
*
* 0 使
*/
@property (nonatomic) int frameRate;
/**
*
*
* 0 使<br/>
* * >= *** < *640*640640*360=2304002304001:1480*480230400
*
*/
@property (nonatomic) int resolution;
@end
/**
* @ref channelId
*/
@interface JCMediaChannel : NSObject
/**
* Uri
*/
@property (nonatomic, readonly, copy) NSString* __nullable channelUri;
/**
*
*/
@property (nonatomic, readonly, copy) NSString* __nullable channelId;
/**
*
*/
@property (nonatomic, readonly) int channelNumber;
/// @cond Doxygen_All
/**
*
*/
@property (nonatomic, readonly) long confId;
/// @endcond
/**
* ID
*/
@property (nonatomic, readonly, copy) NSString* __nullable sessionId;
/**
*
*/
@property (nonatomic, readonly) NSString* __nonnull password;
/**
*
*
*
* - @ref JCMediaChannelStateIdle :
* - @ref JCMediaChannelStateJoining :
* - @ref JCMediaChannelStateJoined :
* - @ref JCMediaChannelStateLeaving :
*/
@property (nonatomic, readonly) JCMediaChannelState state;
/**
*
*/
@property (nonatomic, readonly, strong) NSArray* __nonnull participants;
/**
*
* - true:
* - false:
*/
@property (nonatomic, readonly) bool uploadLocalAudio;
/**
*
* - true:
* - false:
*/
@property (nonatomic, readonly) bool uploadLocalVideo;
/**
*
*
*
*
* - true:
* - false:
*/
@property (nonatomic, readonly) bool audioOutput;
/**
*
*
* nil
*/
@property (nonatomic, readonly, copy) NSString* __nullable screenRenderId;
/**
*
*
* nil
*/
@property (nonatomic, readonly, copy) NSString* __nullable screenUserId;
/**
*
*/
@property (nonatomic, readonly, copy) NSString* __nullable title;
/**
*
* - @ref JCMediaChannelRecordStateNone :
* - @ref JCMediaChannelRecordStateReady :
* - @ref JCMediaChannelRecordStateRunning :
*/
@property (nonatomic, readonly) JCMediaChannelRecordState recordState;
/**
* cdn推流状态
* - @ref JCMediaChannelCdnStateNone : Cdn推流cdn推流参数
* - @ref JCMediaChannelCdnStateReady : Cdn推流cdn推流参数
* - @ref JCMediaChannelCdnStateRunning : Cdn推流中cdn推流参数cdn推流中
*/
@property (nonatomic, readonly) JCMediaChannelCdnState cdnState;
/**
* JCMediaChannelParticipant
*/
@property (nonatomic, readonly) JCMediaChannelParticipant* __nullable selfParticipant;
/**
*
* - true:
* - false:
*/
@property (nonatomic) bool volumeChangeNotify;
/**
*
*
* JoinParam
*
* @note
*
*
*
* - @ref JCMediaChannelMaxResolution "JCMediaChannelMaxResolution360" : 360p
* - @ref JCMediaChannelMaxResolution "JCMediaChannelMaxResolution720" : 720p
* - @ref JCMediaChannelMaxResolution "JCMediaChannelMaxResolution1080" : 1080p
*/
@property (nonatomic, readonly) JCMediaChannelMaxResolution maxResolution;
/**
* JCMediaChannel
*
* JCMediaChannel 线
*
* @note
* - JCMediaChannel {@link destroy} JCMediaChannel
* - JCClient @ref JCClient#state "state" @ref JCClientStateNotInit
*
*
* @param client JCClient
* @param mediaDevice JCMediaDevice
* @param callback JCMediaChannelCallback
* @return JCMediaChannel
* @exception "JCClient、JCMediaDevice、JCMediaChannelCallback 任意一个参数传空就会出现调用失败"
*/
+(JCMediaChannel* __nullable)create:(JCClient* __nonnull)client mediaDevice:(JCMediaDevice* __nonnull)mediaDevice callback:(id<JCMediaChannelCallback> __nonnull)callback;
/**
* JCMediaChannel
*
* JCMediaChannel 使 JCMediaChannel <br>
* **** JCSDK JCMediaChannel <br>
* JCMediaChannel @ref destroy
*/
+(void)destroy;
/**
*
*
* {@link JCMediaChannelCallback#onQuery:result:reason:queryInfo: onQuery}
*
* @param channelId
* @return id {@link JCMediaChannelCallback#onQuery:result:reason:queryInfo: onQuery} operationId
*/
-(int)query:(NSString* __nonnull)channelId;
/**
*
*
* <br>
* 退 false <br>
*
* @param channelId
* @param joinParam JCMediaChannelJoinParam nil
* @return
* - true:
* - false:
* -
* - {@link JCMediaChannelCallback#onJoin:reason:channelId: onJoin}
*/
-(bool)join:(NSString* __nonnull)channelId joinParam:(JCMediaChannelJoinParam* __nullable)joinParam;
/**
*
*
* {@link JCMediaChannelCallback#onLeave:channelId: onLeave}
*
* @return
* - true:
* - false:
*/
-(bool)leave;
/**
*
*
* 退
*
* @return
* - true:
* -
* - {@link JCMediaChannelCallback#onStop:reason: onStop}
* - false:
*/
-(bool)stop;
/**
* /
*
* <br>
* JCMediaChannel {@link join:joinParam: join} <br>
* <br>
* <br>
*
*
* @param enable /
* - true:
* - false:
* @return
* - true:
* -
* - {@link JCMediaChannelCallback#onMediaChannelPropertyChange: onMediaChannelPropertyChange}
* - false:
*/
-(bool)enableUploadAudioStream:(bool)enable;
/**
* /
*
* <br>
* JCMediaChannel {@link join:joinParam: join} <br>
* <br>
* <br>
*
*
* @param enable
* - true:
* - false:
* @return
* - true
* -
* - {@link JCMediaChannelCallback#onMediaChannelPropertyChange: onMediaChannelPropertyChange}
* - false
*/
-(bool)enableUploadVideoStream:(bool)enable;
/**
* /
*
* <br>
* JCMediaChannel {@link join:joinParam: join} <br>
*
*
* @param enable
* - true:
* - false:
* @return
* - true
* -
* - {@link JCMediaChannelCallback#onMediaChannelPropertyChange: onMediaChannelPropertyChange}
* - false
*/
-(bool)enableAudioOutput:(bool)enable;
/**
*
*
* pictureSize @ref JCMediaChannelPictureSizeNone
*
* @param participant JCMediaChannelParticipant
* @param pictureSize
* - @ref JCMediaChannelPictureSizeNone :
* - @ref JCMediaChannelPictureSizeMin :
* - @ref JCMediaChannelPictureSizeSmall :
* - @ref JCMediaChannelPictureSizeLarge :
* - @ref JCMediaChannelPictureSizeMax :
* @return
* - true {@link JCMediaChannelCallback#onParticipantUpdate:participantChangeParam: onParticipantUpdate}
* - false
*/
-(bool)requestVideo:(JCMediaChannelParticipant* __nonnull)participant pictureSize:(JCMediaChannelPictureSize)pictureSize;
/**
* /
*
*
*
* @param enable /
* - true:
* - false:
* @return
* - true
* - false
*/
-(bool)enableScreenShare:(bool)enable screenShareParam:(JCMediaChannelScreenShareParam * __nullable)screenShareParam;
/**
*
*
* pictureSize @ref JCMediaChannelPictureSizeNone
*
* @param screenUri uri
* @param pictureSize
* - @ref JCMediaChannelPictureSizeNone :
* - @ref JCMediaChannelPictureSizeMin :
* - @ref JCMediaChannelPictureSizeSmall :
* - @ref JCMediaChannelPictureSizeLarge :
* - @ref JCMediaChannelPictureSizeMax :
* @return
* - true
* - false
*/
-(bool)requestScreenVideo:(NSString* __nonnull)screenUri pictureSize:(JCMediaChannelPictureSize)pictureSize;
/**
* /Cdn推流
*
* {@link JCMediaChannelCallback#onMediaChannelPropertyChange: onMediaChannelPropertyChange}
*
* @param enable /Cdn推流
* - true: Cdn
* - false: Cdn
* @param keyInterval () enable true >=1000
* @return
* - true {@link JCMediaChannelCallback#onMediaChannelPropertyChange: onMediaChannelPropertyChange}
* - false
*/
-(bool)enableCdn:(bool)enable keyInterval:(int)keyInterval;
/**
* /
*
* @param enable /
* - true:
* - false:
* @param recordParam JCMediaChannelRecordParam enable true {@link join:joinParam: join} nil
* @return
* - true {@link JCMediaChannelCallback#onMediaChannelPropertyChange: onMediaChannelPropertyChange}
* - false
*/
-(bool)enableRecord:(bool)enable recordParam:(JCMediaChannelRecordParam* __nullable)recordParam;
/**
*
*
* @param userId
* @return
* - : nil
* - : JCMediaChannelParticipant
*/-(JCMediaChannelParticipant* __nullable)getParticipant:(NSString* __nonnull)userId;
/**
*
*
* Json字符串形式返回 "Config" "Network""Transport" "Participants" 4
*
* @return
*/
-(NSString * __nullable)getStatistics;
/**
*
*
*
*
* @param property
* @return
* - true
* - false
*/
-(bool)setCustomProperty:(NSString * __nonnull)property;
/**
*
*
*
*
* @return
*/
-(NSString * __nullable)getCustomProperty;
/**
*
*
* @ref JCMediaChannelCallback.onMessageReceive "onMessageReceive"
*
* @note content大于4K时消息的发送不可靠
*
* @param type
* @param content content不能为空content不能大于 4k
* @param toUserId idnull则发给频道所有人员
* @return
* - true
* - false
*/
-(bool)sendMessage:(NSString * __nonnull)type content:(NSString * __nonnull)content toUserId:(NSString * __nullable)toUserId;
/**
* Sip用户
*
* {@link JCMediaChannelCallback#onInviteSipUserResult:result:reason: onInviteSipUserResult}
*
* @param userId
* @param sipParam JCMediaChannelSipParam
* @return
* - > 0id {@link JCMediaChannelCallback#onInviteSipUserResult:result:reason: onInviteSipUserResult}
* - -1
*/
-(int)inviteSipUser:(NSString * __nonnull)userId sipParam:(JCMediaChannelSipParam* __nonnull)sipParam;
/**
* <br>
*
* - : StartForward <br>
* :{"MtcConfUserUriKey": "用户Uri", "MtcConfMediaOptionKey": "类型"}<br>
* Uri: Mtc接口获取 MtcUser.Mtc_UserFormUri(EN_MTC_USER_ID_USERNAME, userId)<br>
* : mtc_conf.h下的MtcConfMedia的枚举值<br>
* 1: {@link JCMediaChannelCallback#onParticipantUpdate:participantChangeParam: onParticipantUpdate} <br>
* : {"MtcConfUserUriKey": "[username:justin@sample.cloud.justalk.com]", "MtcConfMediaOptionKey": 3}<br><br>
* - : StopForward <br>
* :{"MtcConfUserUriKey": "用户URL", "MtcConfMediaOptionKey": "类型"}<br>
* Uri: Mtc接口获取 MtcUser.Mtc_UserFormUri(EN_MTC_USER_ID_USERNAME, userId)<br>
* : mtc_conf.h下的MtcConfMedia的枚举值<br>
* 1: {@link JCMediaChannelCallback#onParticipantUpdate:participantChangeParam: onParticipantUpdate} <br>
* : {"MtcConfUserUriKey": "[username:justin@sample.cloud.justalk.com]", "MtcConfMediaOptionKey": 3}<br><br>
* - : ChangeTitle <br>
* : {"MtcConfTitleKey":"修改的内容"}<br>
* : "123""321"<br>
* 1: {@link JCMediaChannelCallback#onMediaChannelStateChange:oldState: onMediaChannelPropertyChange} <br>
* 2: JCManager.shared.mediaChannel.title <br>
* :{"MtcConfTitleKey": "321"}<br><br>
* - : SetPartpProp <br>
* : {"MtcConfStateKey":1,"MtcConfDisplayNameKey":"1314","MtcConfPartpLstKey":["[username:10086@sample.cloud.justalk.com]"],"MtcConfRoleKey":7}<br>
* : mtc_conf.h MtcConfState <br>
* : mtc_conf.h MtcConfRole <br>
* : "123"<br>
* Uri:Mtc接口获取 MtcUser.Mtc_UserFormUri(EN_MTC_USER_ID_USERNAME, userId); <br>
* 1: {@link JCMediaChannelCallback#onParticipantUpdate:participantChangeParam: onParticipantUpdate} <br>
* 2:MtcConfStateKeyMtcConfDisplayNameKeyMtcConfRoleKey这三个字段json字符串里面加入哪个<br>
* 3:MtcConfPartpLstKey uri进行批量修改<br>
* :{"MtcConfStateKey":4,"MtcConfDisplayNameKey":"123","MtcConfPartpLstKey":{"MtcConfUserUriKey":"[username:10086@sample.cloud.justalk.com]","MtcConfStateKey":4},"MtcConfRoleKey":4}<br><br>
* - ReplayApplyMode <br>
* {"MtcConfCompositeModeKey": }<br>
* <br>
* 1 ,<br>
* 2 ,,<br>
* 3 ,,,<br>
* 4 ,ReplayApplyLayout指令设置所有视频布局<br>
* 5 <br>
* {"MtcConfCompositeModeKey": 2}<br><br>
* - ReplayApplyLayout <br>
* {[{"MtcConfUserUriKey": "用户uri", "MtcConfPictureSizeKey": ,"MtcConfRectangleKey": }]...}<br>
* uriMtc接口获取MtcUser.Mtc_UserFormUri((uint)EN_MTC_USER_ID_TYPE.EN_MTC_USER_ID_USERNAMEuserId)<br>
* 5mtc_conf.h下的MtcConfPs枚举<br>
* Json格式的Array对象表示这个图像的位置和大小x坐标(0~1)<br>
* y坐标(0~1)(0~1)(0~1)[0.5,0.5,0.5,0.5]<br>
* <br>
* [{"MtcConfUserUriKey":"[username:zhang@xxxx.cloud.justalk.com]","MtcConfPictureSizeKey":512,"MtcConfRectangleKey":[0.5,0.5,0.5,0.5]}]<br>
* zhang小尺寸的视频在屏幕右下角位置<br>
*
* @param name
* @param param
* @return
* - true
* - false
*/
-(bool)sendCommand:(NSString * __nonnull)name commandParam:(NSString * __nonnull)param;
/**
*
*
* @param customRole @ref JCMediaChannelCustomRole "自定义角色"
* @param participant JCMediaChannelParticipant nil
*/
-(void)setCustomRole:(JCMediaChannelCustomRole)customRole participant:(JCMediaChannelParticipant * __nullable)participant;
/**
*
*
* @return @ref JCMediaChannelCustomRole "自定义角色"
*/
-(JCMediaChannelCustomRole)getCustomRole;
/**
*
*
* @param customState @ref JCMediaChannelCustomState "自定义状态"
* @param participant JCMediaChannelParticipant nil
*/
-(void)setCustomState:(JCMediaChannelCustomState)customState participant:(JCMediaChannelParticipant * __nullable)participant;
/**
*
*
* @return @ref JCMediaChannelCustomState "自定义状态"
*/
-(JCMediaChannelCustomState)getCustomState;
/**
*
*
* @param participant
* @return
* - true
* - false
*/
-(BOOL)kick:(JCMediaChannelParticipant * __nonnull)participant;
/**
*
*
* @ref JCMediaChannelCdnStateReady <br>
* @ref JCMediaChannelRecordStateReady
*
* @param command
* @return
* - true
* - false
*/
-(bool)sendCommandToDelivery:(NSString* __nonnull)command;
/**
*
*
* @note
*
* @param enable
* - true:
* - false:
* @param ratio
*/
-(void)enableSelfVideoRatio:(bool)enable ratio:(float)ratio;
/**
*
*
* @ref JCMediaDeviceVideoCanvas "渲染对象"
*
* @param type
* - @ref JCMediaDeviceRenderFullScreen :
* - @ref JCMediaDeviceRenderFullContent :
* - @ref JCMediaDeviceRenderFullAuto :
* @param pictureSize
* - @ref JCMediaChannelPictureSizeNone :
* - @ref JCMediaChannelPictureSizeMin :
* - @ref JCMediaChannelPictureSizeSmall :
* - @ref JCMediaChannelPictureSizeLarge :
* - @ref JCMediaChannelPictureSizeMax :
* @return JCMediaDeviceVideoCanvas
*/
-(JCMediaDeviceVideoCanvas* __nullable)startScreenShareVideo:(JCMediaDeviceRender)type pictureSize:(JCMediaChannelPictureSize)pictureSize;
/**
*
*
* {@link JCMediaChannel#startScreenShareVideo:pictureSize: startScreenShareVideo}
*/
-(void)stopScreenShareVideo;
/**
*
*
* @note
*
* @param participant JCMediaChannelParticipant
* @param subscribe
* - true
* - false
* @return
* - true
* - false
*/
-(bool)subscribeParticipantAudio:(JCMediaChannelParticipant *__nonnull)participant subscribe:(bool)subscribe;
@end
/**
* @}
*/