媒体流配置
本部分介绍实时音视频中的本地媒体流、远端媒体流。
本地媒体流
创建本地媒体流
本地媒体流 QNRTCSession
包含了本地设备所采集的音视频信息,是音视频通话所需要的基本数据。
使用初始化方法创建连麦 session
对象
self.session = [[QNRTCSession alloc] init];
self.session.delegate = self;
配置音视频静默开关
在发布音/视频后,如果想临时关闭自己的音/视频,可以打开音/视频的静默开关,即置为 YES。
/**
* 是否使自己发布到服务器上的声音静音,注意:在离开房间后 SDK 并不会重置该值,即会保持您上次设置的值
*/
@property (nonatomic, assign, getter=isMuteAudio) BOOL muteAudio;
/**
* 是否使自己发布到服务器上的视频黑屏,注意:在离开房间后 SDK 并不会重置该值,即会保持您上次设置的值
*/
@property (nonatomic, assign, getter=isMuteVideo) BOOL muteVideo;
两个属性控制是否允许音频、视频,默认都为关闭,即允许远端用户看到/听到自己的视频/声音。
设置仅音频流开启
self.session.muteAudio = NO;
self.session.muteVideo = YES;
设置仅视频流开启
self.session.muteAudio = YES;
self.session.muteVideo = NO;
配置预览视图
配置本地预览视图的大小及位置。
/*!
* @abstract 摄像头的预览视图,调用 startCapture 后才会有画面
*
*/
@property (nonatomic, strong, readonly) UIView *previewView;
self.session.previewView.frame = self.view.frame;
[self.view insertSubview:self.session.previewView atIndex:0];
配置预览视图 previewView
中视频的填充方式,默认使用 PLVideoFillModePreserveAspectRatioAndFill。
@property(readwrite, nonatomic) QNVideoFillModeType fillMode;
配置采集分辨率
配置视频采集的分辨率 sessionPreset
,默认为 AVCaptureSessionPreset640x480。
@property (nonatomic, copy) NSString *sessionPreset;
配置采集帧率
配置采集的视频数据的帧率 videoFrameRate
,默认为 24
@property (nonatomic, assign) NSUInteger videoFrameRate;
配置连麦码率范围
配置最大、最小码率,根据网络条件在该范围值之间自动调
- (void)setMinBitrateBps:(NSUInteger)minBitrateBps
maxBitrateBps:(NSUInteger)maxBitrateBps;
远端媒体流
获取远端媒体流
获取到该用户(userId)远端媒体流,并渲染到本地用户界面
通过 RTCSession:firstVideoDidDecodeOfRemoteUserId:
回调方法获取该用户(userId)的远端媒体流。
- (QNVideoRender *)RTCSession:(QNRTCSession *)session firstVideoDidDecodeOfRemoteUserId:(NSString *)userId;
在该回调中实现 QNVideoRender
的初始化以及设置返回
- (QNVideoRender *)RTCSession:(QNRTCSession *)session firstVideoDidDecodeOfRemoteUserId:(NSString *)userId {
QNVideoRender *render = [[QNVideoRender alloc] init];
QNVideoView *videoView = [[QNVideoView alloc] initWithFrame:CGRectMake(100, 20, 180, 320)];
[self.view addSubview:videoView];
return render;
}
取消渲染远端媒体流
本地用户取消渲染该远端用户(userId)的媒体流
通过 RTCSession:didDetachRenderView:ofRemoteUserId:
回调方法取消渲染该用户(userId)的远端媒体流。
- (void)RTCSession:(QNRTCSession *)session didDetachRenderView:(UIView *)renderView ofRemoteUserId:(NSString *)userId;
在该回调中移除对远端用户媒体流 QNVideoRender
的渲染
- (void)RTCSession:(QNRTCSession *)session didDetachRenderView:(UIView *)renderView ofRemoteUserId:(NSString *)userId {
[renderView removeFromSuperview];
}