MRTC-Android-SDK-api

优质
小牛编辑
125浏览
2023-12-01

目录


接入使用步骤

环境要求

  • JDK版本1.8
  • minSdkVersion 16

  • SDK接入步骤
    build.gradle文件中设置的dependencies加入MRTC依赖如下例:

    dependencies {
     ...
     implementation 'tv.mudu:mrtc:1.0.2'
     ...
    }
    

    app/src/main/AndroidManifest.xml中加入必要的设备权限如下:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mrtc">
    
       <uses-permission android:name="android.permission.INTERNET" />
       <uses-permission android:name="android.permission.RECORD_AUDIO" />
       <uses-permission android:name="android.permission.CAMERA" />
       <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
       <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
       <uses-permission android:name="android.permission.BLUETOOTH"/>
       <uses-permission android:name="android.permission.FLASHLIGHT" />
    
       ...
    </manifest>
    
  • SDK的基本使用流程如下:
    • 推流sdk
      • MRTCSetting配置推流参数,创建MRTCPusher
      • 传入推流预览视图,开始预览
      • 开始推流
      • 根据使用场景切换摄像头,暂停恢复等等
    • 拉流sdk
      • 创建MRTCPuller
      • 传入拉流地址和预览视图,开始拉流
      • 根据使用场景暂停恢复等等

设置

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

  • 基本配置

      MRTCSetting setting = null;
      try{
          setting = MRTCSetting.builder().createSetting();
      }catch (MRTCException e){
    
      }
      /*默认配置  
          编解码器:机器支持的编解码器的第一个
          视频宽高:1280x720
          最大码率:2000kbps
          帧率:25
          摄像头:前置
          硬件加速:开启
          屏幕捕捉:关闭
      */
    
  • 自定义配置

    • 获取支持的编解码器
        MRTCVideoCodec[] codecs = MRTCSetting.getSupportVideoCodec();
      
    • 获取支持的分辨率(注:分辨率格式为: 宽x高)
        String[] resolutions = MRTCSetting.getSupportResolutions();
      
    • 获取支持的fps
        MRTCSetting.MRTCFpsRange fpsRange = MRTCSetting.getSupportFps();
      
    • 构造自定义配置

        MRTCSetting setting = null;
        /*捕捉摄像头配置*/
        MRTCVideoCodec codec = new MRTCVideoCodec("H264");
        try{
            setting = MRTCSetting.builder().setVideoCodec(codec)
                                            .setResolution("960x540")//分辨率
                                 .setMaxBitrate(1500)//最大码率
                                 .setFps(30)//帧率
                                 .setHardwareAccleration(false)//硬件加速
                                 .setFront(false)//后置摄像头
                                 .createSetting();//创建配置
        }catch (MRTCException e){
      
        }
        /*捕捉屏幕配置*/
        MRTCVideoCodec codec = new MRTCVideoCodec("H264");
        try{
            setting = MRTCSetting.builder().setVideoCodec(codec)
                                            .setResolution("960x540")//分辨率
                                 .setMaxBitrate(1500)//最大码率
                                 .setFps(30)//帧率
                                 .setHardwareAccleration(false)//硬件加速
                                 .setUseScreenCapture(true)//开启屏幕捕捉
                                 .setMediaProjection(mediaCode,mediaData)//设置数据源
                                 .createSetting();//创建配置
        }catch (MRTCException e){
      
        }
      

      设置为自定配置时,您需要自己定义偏好编解码器、视频分辨率、最大码率、帧率、前后摄像头。

      自定义配置建议参数:

分辨率帧率码率
360p25350
480p25600
540p251000
720p251500
360p30400
480p30750
540p301200
720p301800

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

编解码器

  • 构造方法

          MRTCVideoCodec codec = new MRTCVideoCodec("H264");
          MRTCVideoCodec codec = new MRTCVideoCodec("VP8");
          MRTCVideoCodec codec = new MRTCVideoCodec("VP9");
    
          /*暂时只支持H264,VP8,VP9三种*/
    

推流

  • 推流器的使用
    MRTCPuller为拉流的核心类
    • 初始化
      在配置好推流参数后,可以使用MRTCPusherpublic MRTCPusher(Context appContext, MRTCSetting setting)方法创建推流器
      例:
        MRTCPusher pusher = new MRTCPuser(getApplicationContext(),setting);
      
    • 注册错误回调
        /*创建同时注册错误回调*/
        MRTCPusher pusher = new MRTCPusher(getApplicationContext(),setting,exceptionObserver);
        /*或者在创建推流器后注册错误回调*/
        pusher.excetionEvents = exceptionObserver;
      
    • 开始预览 pusher对象初始化完成后,开议开始预览操作。预览时需要传入用于显示视频画面的org.webrtc.SurfaceViewRenderer
        //设置视频的显示拉伸模式
        renderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL);
        pusher.startPreview(renderer);
      
    • 开始推流 预览后可以开始推流,您摄像头捕获的视频画面将传输到流媒体服务器。如果您不需要传输视频画面,只需要推音频流,跳过预览步骤即可
        pusher.startPush("推流地址",pushEventsListener);
      
    • 其他推流控制 推流控制主要包括开始推流、停止推流、开始预览、停止预览、暂停推流、恢复推流、静音、恢复静音、销毁推流等操作,您可以根据业务需求添加按钮进行操作。示例代码如下:
        /*正在推流状态下可以调用暂停推流,暂停推流后将会暂停视频推流。*/
        pusher.pause();
        /*暂停状态可调用恢复推流,视频会恢复正常推流*/
        pusher.resume();
        /*推流状态下可调用停止推流,调用后推流停止*/
        pusher.stopPush();
        /*预览状态下才可以调用停止预览,如在推流状态下调用停止预览,视频将停留在最后一帧,如需重新推视频流,需要调用停止推流后后重新推*/
        pusher.stopPreivew();
        /*静音操作,在推流状态下调用将停止音频推流*/
        pusher.mute();
        /*恢复静音操作,在静音状态下调用将恢复音频推流*/
        pusher.unmute();
        /*切换摄像头,在预览状态下或推流状态下调用调转摄像头(前后切换)*/
        pusher.switchCamera();
        /*开启关闭闪光灯*/
        pusher.setFlashLight(true/false);
        /*设置码率,码率可在初始化配置时设置,也可在推流状态下实时调整*/
        pusher.setMaxBitrate(2000);
        /*销毁推流,调用销毁推流将停止预览、停止推流,并销毁一切推流资源,不在需要推流的时候请调用此方法,否则有可能内存泄漏*/
        pusher.destory();
        /*获取推流状态*/
        MRTCPusherState state = pusher.getState();
      

拉流

  • 拉流器的使用
    MRTCPuller为拉流的核心类
    • 初始化
      使用MRTCPuller的public MRTCPuller(Context appcontext,MRTCPullExceptionEvents exceptionEvents)方法进行初始化。示例代码如下:
        MRTCPuller puller = new MRTCPuller(getApplicationContext());
      
    • 注册错误回调
        /*在初始化时注册错误回调*/
        MRTCPuller puller = new MRTCPuller(getApplicationContext(),exceptionObserver);
        /*在初始化后注册错误回调*/
        puller.exceptionEvents = exceptionObserver;
      
    • 开始拉流
      示例代码如下:
        /*renderer为org.webrtc.SurfaceViewRenderer类型*/
        //设置视频的显示拉伸模式
        renderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL);
        puller.startPull("拉流地址",renderer,pullObserver);
      
    • 拉流其他操作
        /*正在拉流状态下可调用暂停视频拉流*/
        puller.pause();
        /*暂停状态下可调用恢复视频拉流。*/
        puller.remuse();
        /*拉流状态下可调用静音接口*/
        puller.mute();
        /*静音后可以调用不静音接口恢复音频*/
        puller.unmute();
        /*停止拉流,调用后将停止拉流和渲染*/
        puller.stopPull();
        /*获取推流状态*/
        MRTCPullerState state = puller.getState();
      

其他操作

  • 获取推/拉流信息

      /*
      在推/拉流成功后可调用getStats方法获取拉流信息
      hashMap key值含义:
      candidateType:转发类型
      videoCodec:视频编/解码器
      videoBitrate:视频码率
      videoPacketsLostRate:丢包率
      audioCodec:音频编/解码器
      */
      pusher.getStats(new MRTCPusher.MRTCPusherStatsEvents(){
          @Override
          public void onStats(HashMap<String, String> hashMap){
    
          }
      });
    
      puller.getStats(new MRTCPuller.MRTCPullerStatsEvents(){
          @Override
          public void onStats(HashMap<String, String> hashMap){
    
          }
      });