MRTC iOS SDK

目录


接入使用步骤

环境要求

  • Xcode 9.0+
  • iOS 9.0+ 真机

  • SDK接入步骤

    • 安装CocoaPods,在终端中输入如下命令:
      brew install cocoapods
      
    • 在项目根目录下运行中端命令:
      pod init
      
    • profile文件中加入如下代码:

      platform :ios, '9.0'
      
      target 'Your App' do
         pod 'MRTC'
      end
      
    • 在项目根目录下运行中端命令:
      pod install
      
    • Build Settings中将Build Options下的Enable Bitcode设为NO
    • Capabilities中将Background Modes打开就可以在后台保持推拉流状态。
  1. SDK的基本使用流程如下:
  2. 推流sdk
    1. MRTCSetting配置推流参数,创建MRTCPusher
    2. 传入推流预览视图,开始预览
    3. 开始推流
    4. 根据使用场景切换摄像头,暂停恢复等等
  3. 拉流sdk
    1. 创建MRTCPuller
    2. 传入拉流地址和预览视图,开始拉流
    3. 根据使用场景暂停恢复等等

设置

您可以使用MRTCSetting配置推流参数,每一个参数都有默认值,也可以从MRTCSetting中获取机器支持的配置。

  • 基本配置
    在需要使用推流器的ViewController中引用头文件#import <MRTC/MRTCSetting.h>,示例代码如下:
      MRTCSetting *setting = [[MRTCSetting alloc]init];
    
  • 自定义配置
    • 获取支持的编解码器
        NSArray<MRTCCodec *> *supportCodecs = [MRTCSetting supportVideoCodec];
      
    • 获取支持的分辨率(注:分辨率格式为 宽x高)
        NSArray<NSString *> *supportResolutions = [MRTCSetting supportVideoResolutions];
      
    • 获取支持的fps范围
        MRTCFpsRange *fpsRange = [MRTCSetting supportFPSRange];
        NSUInteger min = fpsRange.minFps;//支持的最小fps
        NSUInteger max = fpsRange.maxFps;//支持的最大fps
      
    • 构造自定义配置
        MRTCSetting *customSetting = [[MRTCSetting alloc]initWithVideoCodec:supportCodecs.firstObject videoResolution:@"1280x720" maxBitRate:1800 fps:25 useFrontCamera:YES];
      
      设置为自定配置时,您需要自己定义偏好编解码器、视频分辨率、最大码率、帧率、前后摄像头。

自定义配置建议参数:

分辨率 帧率 码率
360p 25 350
480p 25 600
540p 25 1000
720p 25 1500
360p 30 400
480p 30 750
540p 30 1200
720p 30 1800

注:码率估算公式:(0.0000782*视频宽*视频高*帧率)

编解码器

  • 属性解析

      @interface MRTCCodec : NSObject<NSCoding>
      @property (nonatomic, copy, readonly) NSString *name;
      @property (nonatomic, copy, readonly) NSDictionary *parameters;
    
      - (BOOL)isEqualToCodec:(MRTCCodec *)codec;
      @end
    

    name属性为编解码器的名称,例如H264VP8VP9
    parameters为编解码器详细格式,仅h264编解码器拥有此属性,VP8VP9此属性为空值。

  • 方法解析
      - (BOOL)isEqualToCodec:(MRTCCodec *)codec;
    
    判断两个编解码器是否一样

推流

  • 推流器的使用
    MRTCPuller为拉流的核心类
    • 初始化
      在配置好推流参数后,可以使用MRTCPusher- (instancetype)initWithSetting:(MRTCSetting *)setting errorDelegate:(id<MRTCPusherErrorDelegate>)errorDelegate;方法通过推流配置进行初始化,并注册错误回调代理
      例:
        MRTCPusher *pusher = [[MRTCPusher alloc]initWithSetting:setting errorDelegate:self];
      
    • 注册推流回调代理
      推流回调代理有两种:errorDelegate、pusherDelegate。errorDelegate做错误回调;pusherDelegate做推流状态回调。
        [pusher setErrorDelegate:self];
        [pusher setPusherDelegate:self];
      
    • 开始预览 pusher对象初始化完成之后,可以开始进行预览操作。预览时需要传入用于显示摄像头捕获画面的UIView。示例代码如下:
        [pusher startPreviewWithView:self.view];
      
    • 开始推流
      预览后可以开始推流,您摄像头捕获的视频画面将传输到流媒体服务器。如果您不需要传输视频画面,只需要推音频流,跳过预览步骤即可
        [pusher startPushWithUrl:@"推流地址" delegate:self];
      
    • 其他推流控制
      推流控制主要包括开始推流、停止推流、开始预览、停止预览、暂停推流、恢复推流、静音、恢复静音、销毁推流等操作,您可以根据业务需求添加按钮进行操作。示例代码如下:
        /*正在推流状态下可以调用暂停推流,暂停推流后将会暂停视频推流。*/
        [pusher pause];
        /*暂停状态可调用恢复推流,视频将会恢复正常推流。*/
        [pusher resume];
        /*推流状态下可调用停止推流,调用后推流停止*/
        [pusher stopPush];
        /*预览状态下才可以调用停止预览,如在推流状态下调用停止预览,视频将停留在最后一帧,如需重新推视频流,需要调用停止推流后后重新推*/
        [pusher stopPreivew];
        /*静音操作,在推流状态下调用将停止音频推流*/
        [pusher mute];
        /*恢复静音操作,在静音状态下调用将恢复音频推流*/
        [pusher unmute];
        /*切换摄像头,在预览状态下或推流状态下调用调转摄像头(前后切换)*/
        [pusher switchCamera];
        /*设置码率,码率可在初始化配置时设置,也可在推流状态下实时调整*/
        [pusher setMaxBitrate:2000];
        /*开启关闭闪光灯*/
        [pusher setFlashLight:YES/NO];
        /*销毁推流,调用销毁推流将停止预览、停止推流,并销毁一切推流资源,不在需要推流的时候请调用此方法,否则有可能内存泄漏*/
        [pusher destory];
        /*获取推流状态*/
        MRTCPusherState state = [pusher getPushState];
      

拉流

  • 拉流器的使用
    MRTCPuller为拉流的核心类
    • 初始化 使用MRTCPuller的initWithPullerDelegate方法进行初始化。示例代码如下:
        MRTCPuller puller = [[MRTCPuller alloc]initWithPullerDelegate:self];
      
    • 注册拉流回调
      拉流回调问两种errorDelegate,pullerDelegate。errorDelegate主要做错误微雕;pullerDelegate做拉流状态回调。
        [puller setPullerDelegate:self];
        [puller setErrorDelegate:self];
      
    • 开始拉流
      示例代码如下:
        /*url为mrtc协议的拉流地址,renderView为视频流渲染view*/
        //设置视频的显示方式
        self.view.contentMode = UIViewContentModeScaleAspectFit;
        [puller startPullWithUrl:@"拉流地址" renderView:self.view];
      
    • 拉流其他操作
        /*正在拉流状态下可调用暂停视频拉流*/
        [puller pause];
        /*暂停状态下可调用恢复视频拉流。*/
        [puller remuse];
        /*推流状态下可以调用静音*/
        [puller mute];
        /*静音状态下可以调用不静音恢复音频*/
        [puller unmute];
        /*停止拉流,调用后将停止拉流和渲染*/
        [puller stopPull];
        /*获取推流状态*/
        MRTCPullerState state = [puller getPullState];
      

其他操作

  • 获取推/拉流信息

      /*
      在推/拉流成功后可调用getStats方法获取拉流信息
      hashMap key值含义:
      candidateType:转发类型
      videoCodec:视频编/解码器
      videoBitrate:视频码率
      videoPacketsLostRate:丢包率
      audioCodec:音频编/解码器
      */
      [pusher getStats:^(NSDictionary * _Nonnull stats){
    
      }];
    
      [puller getStats:^(NSDictionary * _Nonnull stats){
    
      }];
    

results matching ""

    No results matching ""