文档首页 > > 推流SDK> Android推流> 美颜推流

美颜推流

分享
更新时间: 2020/01/14 GMT+08:00

本节内容主要介绍如何使用Android推流SDK进行摄像头推流,并添加美颜效果。美颜SDK为收费项,若使用美颜SDK试用版,会带有华为水印,若需要使用正式版的美颜SDK或用于正式商用,请提交工单申请licence

SDK集成

  1. 解压已获取的Android推流SDK包。

    “livepushersdk\huaweicloud-sdk-android-livepusher-1.2.0”目录下有如下文件。

  2. 将jar包、aar包和so库文件,拷贝到APP工程对应目录下。

  3. 在build.gradle中android栏加入libs目录。

        repositories {
            flatDir {
                dirs './libs'
            }
        }

  4. 在APP目录下的build.gradle文件中添加配置与依赖。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    dependencies {
        implementation fileTree(include: ['*.jar'], dir: 'libs')
        implementation('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        implementation fileTree(include: ['*.jar'], dir: '../../../../lib/android_jar')
        implementation files('libs/NvAndroidStreamingSdk.jar')
        //noinspection GradleCompatible
        implementation 'com.android.support:design:28.0.0'
        implementation 'com.android.support:appcompat-v7:28.0.0'
        implementation 'com.android.support.constraint:constraint-layout:1.0.2'
        implementation 'com.android.support:recyclerview-v7:28.0.0'
        implementation 'com.squareup.okhttp3:okhttp:3.8.0'
        implementation 'com.google.code.gson:gson:2.7'
        implementation 'com.github.bumptech.glide:glide:4.0.0'
        implementation 'com.android.support:support-v4:28.0.0'
        implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.2'
        testImplementation 'junit:junit:4.12'
        implementation (name: 'HwLivePushSDK-release', ext: 'aar'
    }
    

  5. 选择Sync Project With Gradle Files, 完成SDK集成。

配置APP权限

您需要同时配置如下两种APP权限申请。

  • 在AndroidManifest.xml文件中申请。
    1
    2
    3
    4
    5
    6
    7
    8
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    
  • 在程序运行中申请APP权限,申请代码如下所示。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    private void checkAllPermission() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)) {
                    if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(this, android.Manifest.permission.RECORD_AUDIO)) {
                        if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                            if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE)) {
                                if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_PHONE_STATE)) {
                                    mPermissionGranted = true;
                                } else {
                                    requestPermissions(new String[]{android.Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE_STATE_PERMISSION_CODE);
                                }
                            } else {
                                requestPermissions(new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_READ_EXTERNAL_STORAGE_PERMISSION_CODE);
                            }
                        } else {
                            requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_EXTERNAL_STORAGE_PERMISSION_CODE);
                        }
                    } else {
                        requestPermissions(new String[]{android.Manifest.permission.RECORD_AUDIO}, REQUEST_RECORD_AUDIO_PERMISSION_CODE);
                    }
                } else {
                    requestPermissions(new String[]{android.Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION_CODE);
                }
            } else {
                mPermissionGranted = true;
            }
        }
    

SDK使用

  1. 初始化。

    主要对采集特效和推流相关类进行初始化。

    采集媒体流的相关操作在NvsStreamingContext类中。NvsStreamingContext是流媒体上下文类,在使用采集特效等相关操作的时,需要先初始化NvsStreamingContext类,在其它Activity里使用时获取NvsStreamingContext的对象。

    NvsStreamingContext为单例类,不再使用采集特效或程序退出前销毁NvsStreamingContext类的对象,请务必保证不要中途销毁NvsStreamingContext类的对象。

    编码推流的相关操作在HwPublisher中,HwPublisher为编码推流录制相关入口,需要实现RtmpHandler.RtmpListener、 HwEncodeHandler.HwEncodeListener和HwRecordHandler.HwRecordListener三个监听。

    • 初始化NvsStreamingContext类
      String licensePath = "livepush.lic";
      NvsStreamingContext.init(MainActivity.this, licensePath, NvsStreamingContext.STREAMING_CONTEXT_FLAG_SUPPORT_4K_EDIT);

      其中licensePath为美颜工具的授权文件的路径,License申请请参见购买指南。若无License文件,可直接设置为空字符串,使用美颜功能时将带有华为水印。NvsStreamingContext.STREAMING_CONTEXT_FLAG_SUPPORT_4K_EDIT,可忽略。

    • 初始化AR Effect,全局只需初始化一次 。
      if (m_canUseARFace) {
      com.meicam.sdk.NvsFaceEffectV1.setup("assets:/NvFaceData.asset", authpack.A());
      com.meicam.sdk.NvsFaceEffectV1.setMaxFaces(2);
      }

      其中assets:/NvFaceData.asset为人脸检测资源,authpack为人脸检测相关授权证书,即您在License申请时获取的AR License文件。

    • 初始化编码、推流和录制等。
      //外部输入初始化
      mPublisher = new HwPublisher(this);
      //设置事件处理和编码器,编码器建议使用H.264(video/avc),codecString有 "video/avc"和"video/hevc"两种。
        mPublisher.setEncodeHandler(new HwEncodeHandler(CaptureActivity.this),codecString);
        mPublisher.setRtmpHandler(new RtmpHandler(CaptureActivity.this),codecString);
        mPublisher.setRecordHandler(new HwRecordHandler(CaptureActivity.this));
      //设置预览分辨率
      mPublisher.setPreviewResolution(1280, 720);
      //设置编码分辨率
      mPublisher.setOutputResolution(720, 1280);
      //设置编码模式
      mPublisher.setVideoHDMode();
      //设置帧率
      mPublisher.setVfps(15);
      //设置码率
      mPublisher.setVBitrate(1024*encodeBitrate);
      //使能统计信息上报,建议设为true,便于问题定位。
      mPublisher.setStatisticEnable(true);

  2. 采集预览。

    初始化成功后,开始进入预览环节。

    • 开始预览
      //将采集预览输出连接到mSurface,mSurface为当前渲染的SurfaceTexture
      mStreamingContext.connectCapturePreviewWithSurfaceTexture(mSurface);
      //设置采集设备回调,并实现NvsStreamingContext.CaptureDeviceCallback
      mStreamingContext.setCaptureDeviceCallback(this);
      //设置采集帧率
      mStreamingContext.setCaptureFps(15);
      //开始预览,startCapturePreview中的参数标识具体含义见接口文档。
      if (getCurrentEngineState() != NvsStreamingContext.STREAMING_ENGINE_STATE_CAPTUREPREVIEW) {
          if (!mStreamingContext.startCapturePreview(id, NvsStreamingContext.VIDEO_CAPTURE_RESOLUTION_GRADE_HIGH,
               NvsStreamingContext.STREAMING_ENGINE_CAPTURE_FLAG_DONT_USE_SYSTEM_RECORDER
               |NvsStreamingContext.STREAMING_ENGINE_CAPTURE_FLAG_CAPTURE_BUDDY_HOST_VIDEO_FRAME
               |NvsStreamingContext.STREAMING_ENGINE_CAPTURE_FLAG_STRICT_PREVIEW_VIDEO_SIZE
               |NvsStreamingContext.STREAMING_ENGINE_CAPTURE_FLAG_DONT_CAPTURE_AUDIO, null))
                   Log.e(TAG, "Failed to start capture preview!");
      }
    • 切换摄像头
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
       private boolean startCapturePreview(boolean deviceChanged) {
              // 判断当前引擎状态是否为采集预览状态
              int captureResolutionGrade = ParameterSettingValues.instance().getCaptureResolutionGrade();
              if ( deviceChanged || getCurrentEngineState() != NvsStreamingContext.STREAMING_ENGINE_STATE_CAPTUREPREVIEW) {
                  m_supportAutoFocus = false;
                  if (!mStreamingContext.startCapturePreview(mCurrentDeviceIndex,
                          captureResolutionGrade,
                          NvsStreamingContext.STREAMING_ENGINE_CAPTURE_FLAG_DONT_USE_SYSTEM_RECORDER |
                                  NvsStreamingContext.STREAMING_ENGINE_CAPTURE_FLAG_CAPTURE_BUDDY_HOST_VIDEO_FRAME
                                  | NvsStreamingContext.STREAMING_ENGINE_CAPTURE_FLAG_STRICT_PREVIEW_VIDEO_SIZE
                                  |NvsStreamingContext.STREAMING_ENGINE_CAPTURE_FLAG_DONT_CAPTURE_AUDIO, null)) {
                      Log.e(TAG, "Failed to start capture preview!");
                      return false;
                  }
              }
              return true;
          }
      
    • 设置变焦
      //zoomVaule取值范围,通过mStreamingContext.getCaptureDeviceCapability(deviceIndex)获取
      mStreamingContext.setZoom(zoomVaule);
    • 设置曝光补偿
      //exposeVaule取值范围,通过mStreamingContext.getCaptureDeviceCapability(deviceIndex)获取
      mStreamingContext.setExposureCompensation(exposeVaule);
    • 开启闪光灯
      if (mStreamingContext.isFlashOn()) {
         mStreamingContext.toggleFlash(false);
         mFlashButton.setImageResource(R.mipmap.icon_flash_off);
         mFlashButton.setImageAlpha(255);
      } else {
         mStreamingContext.toggleFlash(true);
         mFlashButton.setImageResource(R.mipmap.icon_flash_on);
         mFlashButton.setImageAlpha(255);
      }

  3. 添加特效。

    • 美颜特效
      添加美颜特效后,在预览窗口可以看到美颜效果。美颜特效参数Strength与Whitening分别对应磨皮与美白,Samples的beauty示例的所给值即推荐值。
       NvsFxDescription fxDescription = m_streamingContext.getVideoFxDescription("Beauty");
      //获取美颜特技描述信息         
      List<NvsFxDescription.ParamInfoObject> paramInfo =  fxDescription.getAllParamsInfo();
      //获取描述的所有参数信息         
      for (NvsFxDescription.ParamInfoObject param:paramInfo) {             
      String paramName = param.getString("paramName");             
      if (paramName.equals("Strength")) { 
           //获取美颜磨皮最大值                  
           double maxValue = param.getFloat("floatMaxVal");  
          //获取美颜磨皮当前值              
          m_strengthValue = param.getFloat("floatDefVal");            
                                        }       
                                                             }  
      //添加美颜采集特效         
      NvsCaptureVideoFx fx = m_streamingContext.appendBeautyCaptureVideoFx();  
      //设置美颜磨皮值        
      fx.setFloatVal("Strength", m_strengthValue);  
      //设置美白强度值
      fx.setFloatVal("Whitening", m_whiteningValue);
    • 采集特效

      采集特效分为内建采集特效和扩展采集特效。扩展采集特效即通过资源包安装而得到的采集特效。

      • 添加内建采集特效。
        //获取所有内建采集特效的名称         
        m_streamingContext.getAllBuiltinCaptureVideoFxNames();          
        //添加内建采集特效。特效名称可参见下表。  
        m_streamingContext.appendBuiltinCaptureVideoFx(fxName);         
        //移除所有采集视频特效         
        //m_streamingContext.removeAllCaptureVideoFx();
      • 添加扩展采集特效。
        //首先需要安装扩展采集特效所对应的资源包,获取资源包对应的包ID值,然后才可添加扩展采集特效。资源包包括主题包,字幕样式包,动画贴纸包,转场包,滤镜包等。
        //安装一个视频采集特效包,此处采用同步安装方式,如果资源包尺寸太大或者根据需要可使用异步安装方式         
        String package1Path = "assets:/7FFCF99A-5336-4464-BACD-9D32D5D2DC5E.videofx";         
        m_fxPackageId = new StringBuilder();         
        int error = m_streamingContext.getAssetPackageManager().installAssetPackage(package1Path, null, NvsAssetPackageManager.ASSET_PACKAGE_TYPE_VIDEOFX, true, m_fxPackageId);         if (error != NvsAssetPackageManager.ASSET_PACKAGE_MANAGER_ERROR_NO_ERROR                 
            && error != NvsAssetPackageManager.ASSET_PACKAGE_MANAGER_ERROR_ALREADY_INSTALLED) {            
            Log.e(TAG, "Failed to install asset package!");         
           }         
         //添加扩展采集特效         
        m_streamingContext.appendPackagedCaptureVideoFx(m_fxPackageId.toString());
      表1 内建采集特效及名称

      特效类型

      特效名称

      内建音频特效(Builtin Audio Fx)

      Audio Echo、Male Voice、Female Voice、Cartoon Voice、Fast Cartoon Voice、Monster Voice、Audio Reverb、Audio Wahwah

      内建视频特效(Builtin Video Fx)

      Sage、Maid、Mace、Lace、Mall、Sap、Sara、Pinky、Sweet、Fresh、Beauty、Color Property、Transform 2D、CC Basic、Lut

      内建视频采集特效(Builtin Capture VideoFx)

      Sage、Maid、Mace、Lace、Mall、Sap、Sara、Pinky、Sweet、Fresh、Beauty、Face Effect、Lut

      内建视频转场(Builtin Video Transition)

      Fade、Turning、Swap、Stretch In、Page Curl、Lens Flare、Star、Dip To Black、Dip To White、Push To Right、Push To Top、Upper Left Into

      各特效的参数说明请参见特效参数说明

  4. 设置软硬编码。

    主要包括编码相关接口,判断是否正在使用软编码,以及切换软编码和硬编码。

    if (mPublisher.isSoftEncoder()) {
       Toast.makeText(CaptureActivity.this,"编码 状态:"+"硬编码",Toast.LENGTH_LONG).show();
       mPublisher.switchToHardEncoder();
    } else {
       Toast.makeText(CaptureActivity.this,"编码 状态:"+"软编码",Toast.LENGTH_LONG).show();
       mPublisher.switchToSoftEncoder();
    }

  5. 推流。

    主要包括开始推流和结束推流,其中开始推流需要填入推流地址。

    if(!isConnected) {
       mSwitchEncoderLayout.setEnabled(false);
       mSwitchEncoderLayout.getChildAt(0).setAlpha((float) 0.4);
       mOpenRecordLayout.setEnabled(true);
       mOpenRecordLayout.getChildAt(0).setAlpha((float) 1);
       isConnecting =true;
       
       //开始麦克风采集
       mPublisher.startAudioRecord();
    
       //设置推流地址
       mPublisher.startPublish(rtmpUrl);
    
       capture_btn.setText("结束推流");
       capture_btn.setTextColor(Color.RED);
    }else{
       mSwitchEncoderLayout.setEnabled(true);
       mSwitchEncoderLayout.getChildAt(0).setAlpha((float) 1);
    
       isRecording = false;
       mOpenRecordLayout.getChildAt(0).setBackgroundColor(Color.TRANSPARENT);
       mOpenRecordLayout.getChildAt(0).setAlpha((float) 1);
       Toast.makeText(CaptureActivity.this,"编码 状态:"+"停止录制"+recPath,Toast.LENGTH_LONG).show();
       mPublisher.stopRecord();
       mOpenRecordLayout.setEnabled(false);
       mOpenRecordLayout.getChildAt(0).setAlpha((float) 0.4);
    
       isConnected=false;
       //停止麦克风采集
       mPublisher.stopAudioRecord();
       //停止推流
       mPublisher.stopPublish();
       capture_btn.setText("开始推流");
       capture_btn.setTextColor(Color.WHITE);
     }
    

    开始推流后,需要通过pushRgbaFrame将采集的RGBA数据输入到推流SDK。

    1
    2
    3
    4
    5
    6
    7
    HWVideoFrame videoFrame = new HWVideoFrame();//华为数据类
    videoFrame.data = RGBA_DATA;//RGBA数据
    videoFrame.width = imageWidth;
    videoFrame.height = imageHeight;
    videoFrame.type = RGBA;//数据类型
    videoFrame.rotation = 0;
    mPublisher.pushExternVideoFrame(videoFrame);
    

  6. 录制。

    主要包括开始录制和停止录制,其中开始录制时,要填入文件保存路径。

    • 开始录制
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      if (!isRecording) {
         isRecording = true;
         mOpenRecordLayout.getChildAt(0).setBackgroundColor(Color.RED);
      
         Toast.makeText(CaptureActivity.this,"录制 状态:"+"开始录制",Toast.LENGTH_LONG).show();
         mPublisher.startRecord(recPath);
      } else {
         isRecording = false;
         mOpenRecordLayout.getChildAt(0).setBackgroundColor(Color.TRANSPARENT);
      
         Toast.makeText(CaptureActivity.this,"编码 状态:"+"停止录制"+recPath,Toast.LENGTH_LONG).show();
         mPublisher.stopRecord();
      
    • 暂停录制
      mPublisher.pauseRecord();
    • 恢复录制
      mPublisher.resumeRecord();

特效参数说明

  • Color Property
    表2 Color Property参数说明

    参数名称

    参数说明

    参数类型

    默认值

    最大值

    最小值

    Brightness

    亮度

    Floating Point

    1

    10

    0

    Saturation

    饱和度

    Floating Point

    1

    10

    0

    Contrast

    对比度

    Floating Point

    1

    10

    0

  • Transform 2D
    表3 Transform 2D参数说明

    参数名称

    参数说明

    参数类型

    默认值

    最大值

    最小值

    Scale X

    横向缩放

    Floating Point

    1

    1000

    -1000

    Scale Y

    纵向缩放

    Floating Point

    1

    1000

    -1000

    Rotation

    旋转

    Floating Point

    0

    3.6e+6

    -3.6e+6

    Anchor X

    横向定位

    Floating Point

    0

    100000

    -100000

    Anchor Y

    纵向定位

    Floating Point

    0

    100000

    -100000

    Trans X

    横向变换

    Floating Point

    0

    100000

    -100000

    Trans Y

    纵向变换

    Floating Point

    0

    100000

    -100000

    Opacity

    透明度

    Floating Point

    1

    1

    0

    Tex Wrap Mode

    纹理贴图循环模式

    menu

    Clamp To Edge

    三种取值:Clamp To Edge,Mirrored Repeat,Repeat

    Tex Anchor X

    纹理贴图横向定位

    Floating Point

    0

    100

    -100

    Tex Anchor Y

    纹理贴图纵向定位

    Floating Point

    0

    100

    -100

    Tex Scale X

    纹理贴图横向缩放

    Floating Point

    1

    1000

    -1000

    Tex Scale Y

    纹理贴图横向缩放

    Floating Point

    1

    1000

    -1000

    Tex Rotation

    纹理贴图旋转

    Floating Point

    0

    3.6e+6

    -3.6e+6

    Tex Trans X

    纹理贴图横向变换

    Floating Point

    0

    100000

    -100000

    Tex Trans Y

    纹理贴图横向变换

    Floating Point

    0

    100000

    -100000

  • CC Basic
    表4 CC Basic参数说明

    参数名称

    参数说明

    参数类型

    默认值

    最大值

    最小值

    Is Process Other Tones

    是否处理其他色调

    Boolean

    FALSE

    • 值为FALSE,只有全色调(Master)生效,设置其他色调如阴影色调(Midtones)、中间色调(Midtones)、高光色调(Highlights)无效。
    • 值为TRUE,其他色调才会生效。

    Master Saturation

    饱和度

    Floating Point

    1

    10

    0

    Master Contrast

    对比度

    Floating Point

    1

    10

    0

    Master Balance Hue

    平衡色调

    Floating Point

    0

    360

    0

    Master Balance Strength

    平衡强度

    Floating Point

    0

    10

    0

    Master Gain Master

    全通道增益(分别与RGB值相乘)

    Floating Point

    1

    10

    0

    Master Gain Red

    Red增益

    Floating Point

    1

    10

    0

    Master Gain Green

    Green增益

    Floating Point

    1

    10

    0

    Master Gain Blue

    Blue增益

    Floating Point

    1

    10

    0

    Master Offset Master

    全通道偏移量(分别与R、G、B值相加)

    Floating Point

    0

    10

    -10

    Master Offset Red

    Red偏移量

    Floating Point

    0

    10

    -10

    Master Offset Green

    Green偏移量

    Floating Point

    0

    10

    -10

    Master Offset Blue

    Blue偏移量

    Floating Point

    0

    10

    -10

    Shadows Saturation

    阴影饱和度

    Floating Point

    1

    10

    0

    Shadows Contrast

    阴影对比度

    Floating Point

    1

    10

    0

    Shadows Balance Hue

    阴影平衡色调

    Floating Point

    0

    360

    0

    Shadows Balance Strength

    阴影平衡强度

    Floating Point

    0

    10

    0

    Shadows Gain Master

    阴影全通道增益(分别与RGB值相乘)

    Floating Point

    1

    10

    0

    Shadows Gain Red

    阴影Red增益

    Floating Point

    1

    10

    0

    ShadowsGain Green

    阴影Green增益

    Floating Point

    1

    10

    0

    Shadows Gain Blue

    阴影Blue增益

    Floating Point

    1

    10

    0

    ShadowsOffset Master

    阴影全通道偏移量(分别与R、G、B值相加)

    Floating Point

    0

    10

    -10

    ShadowsOffset Red

    阴影Red偏移量

    Floating Point

    0

    10

    -10

    Shadows Offset Green

    阴影Green偏移量

    Floating Point

    0

    10

    -10

    Shadows Offset Blue

    阴影Blue偏移量

    Floating Point

    0

    10

    -10

    Midtones Saturation

    中间调饱和度

    Floating Point

    1

    10

    0

    Midtones Contrast

    中间调对比度

    Floating Point

    1

    10

    0

    Midtones Balance Hue

    中间调平衡色调

    Floating Point

    0

    360

    0

    Midtones Balance Strength

    中间调平衡强度

    Floating Point

    0

    10

    0

    Midtones Gain Master

    中间调全通道增益(分别与RGB值相乘)

    Floating Point

    1

    10

    0

    Midtones Gain Red

    中间调Red增益

    Floating Point

    1

    10

    0

    Midtones Gain Green

    中间调Green增益

    Floating Point

    1

    10

    0

    Midtones Gain Blue

    中间调Blue增益

    Floating Point

    1

    10

    0

    Midtones Offset Master

    中间调全通道偏移量(分别与R、G、B值相加)

    Floating Point

    0

    10

    -10

    Midtones Offset Red

    中间调Red偏移量

    Floating Point

    0

    10

    -10

    Midtones Offset Green

    中间调Green偏移量

    Floating Point

    0

    10

    -10

    Midtones Offset Blue

    中间调Blue偏移量

    Floating Point

    0

    10

    -10

    Highlights Saturation

    高光饱和度

    Floating Point

    1

    10

    0

    Highlights Contrast

    高光对比度

    Floating Point

    1

    10

    0

    Highlights Balance Hue

    高光平衡色调

    Floating Point

    0

    360

    0

    Highlights Balance Strength

    高光平衡强度

    Floating Point

    0

    10

    0

    Highlights Gain Master

    高光全通道增益(分别与RGB值相乘)

    Floating Point

    1

    10

    0

    Highlights Gain Red

    高光Red增益

    Floating Point

    1

    10

    0

    Highlights Gain Green

    高光Green增益

    Floating Point

    1

    10

    0

    Highlights Gain Blue

    高光Blue增益

    Floating Point

    1

    10

    0

    Highlights Offset Master

    高光全通道偏移量(分别与R、G、B值相加)

    Floating Point

    0

    10

    -10

    Highlights Offset Red

    高光Red偏移量

    Floating Point

    0

    10

    -10

    Highlights Offset Green

    高光Green偏移量

    Floating Point

    0

    10

    -10

    Highlights Offset Blue

    高光Blue偏移量

    Floating Point

    0

    10

    -10

  • Lut滤镜
    表5 Lut滤镜参数

    参数名称

    参数说明

    参数类型

    默认值

    最大值

    最小值

    Data File Path

    lut文件路径。传入.mslut格式文件或者png。

    String

    N/A

    Intensity

    强度

    Floating Point

    1

    1

    0

获取推流信息

主要对推流的信息进行获取,可以用于数据做分析等用途。其中包括,视频的分辨率、码率、帧率和编码器类型等信息。

  • 回调实时帧率码率
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
        @Override
        public void onRtmpVideoFpsChanged(double fps) {
            vfps = (int) fps;
        }
    
        @Override
        public void onRtmpVideoBitrateChanged(double bitrate) {
            vbitrate = (int) (bitrate/1000);
        }
    
        @Override
        public void onRtmpAudioBitrateChanged(double bitrate) {
            abitrate = (int) bitrate;
        }
    
  • 获取设置信息
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    String isSoftEnc;
    if(mPublisher.isSoftEncoder()){
        isSoftEnc="soft";
    }
    else{
        isSoftEnc="hard";
    }
    
    mLogText.setText("vFPS:  " + vfps + "\n" + "vGOP:  " + mPublisher.getVgop() + "\n"
                                        + "vBitrate:  " + vbitrate  + " kb/s\n"
                                        + "vOutWidth:  " + mPublisher.getVOutWidth() + "\n" + "vOutHeigth:  " + mPublisher.getVOutHeight() + "\n"
                                        + "vPreViewWidth:  " + mPublisher.getPreviewResolution()[0] + "\n" + "vPreViewHeigth:  " + mPublisher.getPreviewResolution()[1] + "\n"
                                        + "vEncoder:  " + isSoftEnc + "\n"
                                        + "aSamplerate:  " + mPublisher.getASamplerate() + "\n"
                                        + "aBitrate:  " + abitrate / 1000 + " kb/s");
    
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区