PLMediaStreaming

推流

概述

七牛云服务:

七牛在视频直播大爆发时代,推出专为直播平台打造的全球化直播流服务和端到端直播场景解决方案,完美解决视频企业的三高之痛:技术门槛高、成本高、卡顿延时率高。 具体详见七牛云直播介绍

七牛优势:

从推流到播放的一站式解决

七牛自建实时流网络(LiveNet),采用智能调度等技术,满足直播特有的网络需求;数据监控平台实现质量透明,帮助用户完成运营闭环;深耕场景丰富性与开放性,全面降低直播平台开发的技术门槛。

1.全球化的实时流网络

采用全新网络技术,实时计算全链路状态,按需智能伸缩最佳路径节点。实现秒开、低延迟不卡顿,和节点故障常态处理等直播需求

2.端到端,场景化 SDK

提供多平台采集 SDK 和播放 SDK,并开放云端 API 实现透明播控管理,助力企业开发者快速构建直播平台的核心业务,提高开发效率。

3.智能化质量监控

基于单个直播流业务粒度的线路质量智能监控及实时动态的数据统计,提供自动容错及全方位的数据分析,定位并优化直播卡顿率。

模块简述:

PLMediaStreaming 封装了七牛直播云服务平台的移动端开放 SDK。该模块包括视频流采集和抖音美颜:

1,推流

开发者可通过调用 setStreamingProfile 接口打开一个的视频采集器(相当于 open 一个 frame),将摄像头收集到的视频推流到服务器端,注意这里需要开发者自己搭建业务服务器,可参考七牛直播入门指南。开发者可通过配置相应参数来自定义视频采集预览器样式、视频质量、美颜等功能。亦可以通过toggleCamera、startStream、stopStream、destroyStream 接口来控制视频采集器,实现停止、开始、切换前后摄像头等功能。

注意:

1, iOS平台,云编译的时候需要勾选相机和麦克风权限,并且最低版本是iOS8.0以上

2, 在iOS 平台上若要支持后台播放(声音)功能,请在 config.xml 文件内配置相关参数,申请后台运行权限,如下:

        <preference name="backgroundMode" value="audio"/>

3, 使用本模块前需先获取授权

网络异常处理

直播中,网络异常的情况比我们能意料到的可能会多不少,常见的情况一般有:

1,网络环境切换,比如 3G/4G 与 Wi-Fi 环境切换;

2,网络不可达,网络断开;

3,带宽不足,可能触发缓存速度跟不上播放速度;

作为开发者我们不能乐观的认为只要是 Wi-Fi 网就是好的,因为即便是 Wi-Fi 也有可能因为运营商下行限制,共享网络带宽等因素导致以上网络异常情况的出现。

为何在直播中要面对这么多的网络异常情况,而在其他上传/下载中很少遇到的,这是因为直播对实时性的要求使得它不得不面对这一情况,即无论网络是否抖动,是否能一直良好,直播都要尽可能是可持续,可观看的状态。

对于网络环境的切换,通常需要 App 整体做出调整,不单单是针对直播,所以七牛直播的 SDK 并未对这一情况做额外的监听,而是需要开发者自己对这些状态做出处理。之所以不处理,主要因素是考虑到 App 的业务逻辑场景多样而复杂,对于直播重连的次数、时机、间隔都会有不同的需求,而此时应该让开发者自己来决定是否重连,以及尝试重连的次数。

网络异常处理方案

当因为网络异常而触发了播放断开时,可通过 addEventListener 接口(name 为status时)监听。开发者可以在这个方法内通过重新调用 start 接口来尝试重连。此处建议不要立即重连,而是采用重连间隔加倍的方式,比如共尝试 3 次重连,第一次等待 0.5s, 第二次等待 1s, 第三次等待 2s,这样的方式主要考虑到弱网时网络带宽的缓解需要时间,而加倍重连可以更容易在网络恢复的时候连接,而非在网络已经拥塞时还不断做无用功的重连。

initPlugin

初始化美颜插件

initPlugin({params},callback(ret))

params

resourcePath:

  • 类型:字符串
  • 描述:美颜资源路径

callback

ret:

  • 类型:JSON 对象
  • 描述:返回值
{
     status: true,         // 布尔类型;是否初始化成功
     msg:''                // 初始化失败后的错误信息
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.initPlugin(function(ret){
    api.alert({msg:JSON.stringify(ret)});
});

可用性

Android 系统

可提供的 1.0.0 及更高版本

open

打开相机预览页面

open({params},callback(ret))

params

rect:

  • 类型:JSON 对象
  • 描述:(可选项)推流画面的位置及尺寸
  • 内部字段:
{
    x: 0,      //(可选项)数字类型;模块左上角的 x 坐标(相对于所属的 Window 或 Frame);默认值:0
    y: 0,      //(可选项)数字类型;模块左上角的 y 坐标(相对于所属的 Window 或 Frame);默认值:0
    w: 300,    //(可选项)数字类型;模块的宽度;默认:'auto'
    h: 400.    //(可选项)数字类型;模块的高度;默认:'auto'
}

encodingProfile:

  • 类型:JSON 对象
  • 描述:编码配置
  • 内部字段:
{
    maxAdaptiveBitrate:800, //(可选项)数字类型;最大适配比特率;默认值:800
    minAdaptiveBitrate:150, //(可选项)数字类型;最小适配比特率;默认值:800
    audioQualityPreset:1,   //(可选项)数字类型;音频编码质量;默认值:4
    bitrateAdjustMode:'auto', //(可选项)字符串;比特率调节模式;默认:auto
    codecType:'hw', //(可选项)字符串类型;编码方式;默认:hw
    isWatermarkEnabled:false, //(可选项)布尔类型;是否使用水印;默认:false
    watermarkLocation:'SOUTH_EAST', //(可选项)字符串;水印位置;默认:SOUTH_EAST
    watermarkAlpha:100, //(可选项)字符串;水印透明度;默认:100
    watermarkSize:'small',//(可选项)字符串;水印大小;默认:small
    yuvFilterMode:'linear', //(可选项)字符串;yuvFilter模式;默认:linear
    videoFPSControl:false, //(可选项)布尔类型;视频帧率控制;默认:false
    videoOrientationPortrait:true,//(可选项)布尔类型;是否竖屏;默认:true
    videoQualityPreset:4, //(可选项)数字类型,视频质量;默认:4
    videoSizePreset:1, //(可选项)数字类型;视频大小;默认:1
    quicEnable:true, //(可选项);布尔类型;默认:true
}

cameraSettings:

  • 类型:JSON 对象
  • 描述:相机配置
  • 内部字段:
{
    continuousAutoFocus:true, //(可选项)布尔类型;是否持续对焦;默认:true
    encodingMirror:true, // (可选项)布尔类型;编码是否镜像翻转;默认:true
    isFrontFacing:true,  // (可选项)布尔类型;是否使用前置摄像头;默认:true
    isCustomFaceBeauty:true, // (可选项)布尔类型;是否使用定制美颜功能;默认:true
    previewMirror:true,  // (可选项)布尔类型;是否开启预览页面镜像翻转;默认:true
    sizeLevel:'medium'  // (可选项)布尔类型;视频大小,默认:true
    sizeRatio:'16_9'    // (可选项)布尔类型;视频宽高比率,默认:true
}

publishUrl:

  • 类型:字符串
  • 描述:推流地址

fixedOn:

  • 类型:字符串
  • 描述:(可选项)模块添加到指定 frame 的名字(只指 frame,传 window 无效)
  • 默认:模块依附于当前 window

fixed:

  • 类型:布尔
  • 描述:(可选项)模块是否随所属 window 或 frame 滚动
  • 默认值:true(不随之滚动)

取值范围

audioQualityPreset 取值如下:

  • 0 AUDIO_QUALITY_LOW1,
  • 1 AUDIO_QUALITY_LOW2,
  • 2 AUDIO_QUALITY_MEDIUM1,
  • 3 AUDIO_QUALITY_MEDIUM2,
  • 4 AUDIO_QUALITY_HIGH1,
  • 5 AUDIO_QUALITY_HIGH2

bitrateAdjustMode 取值如下:

  • auto
  • manual
  • disable

codecType 取值如下:

  • hw-yuv
  • hw
  • sw

watermarkLocation 取值如下:

  • SOUTH_EAST
  • SOUTH_WEST
  • NORTH_EAST
  • NORTH_WEST

watermarkSize 取值如下:

  • small
  • medium
  • large

yuvFilterMode 取值如下:

  • linear
  • bilinear
  • box
  • none

videoQualityPreset 取值如下:

  • 0 VIDEO_QUALITY_LOW1,
  • 1 VIDEO_QUALITY_LOW2,
  • 2 VIDEO_QUALITY_LOW3,
  • 3 VIDEO_QUALITY_MEDIUM1,
  • 4 VIDEO_QUALITY_MEDIUM2,
  • 5 VIDEO_QUALITY_MEDIUM3,
  • 6 VIDEO_QUALITY_HIGH1,
  • 7 VIDEO_QUALITY_HIGH2,
  • 8 VIDEO_QUALITY_HIGH3

videoSizePreset 取值范围:

  • 0 "240p(320x240 (4:3), 424x240 (16:9))",
  • 1 "480p(640x480 (4:3), 848x480 (16:9))",
  • 2 "544p(720x544 (4:3), 960x544 (16:9))",
  • 3 "720p(960x720 (4:3), 1280x720 (16:9))",
  • 4 "1080p(1440x1080 (4:3), 1920x1080 (16:9))"

sizeLevel 取值范围如下:

  • small
  • medium
  • large

sizeRatio 取值如下:

  • 16_9
  • 4_3

callback

ret:

  • 类型:JSON 对象
  • 描述:返回值
{
     eventType:'show' // 预览窗口显示;取值范围如下:
              // ready 推流准备完毕
                  // show 预览窗口显示
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.open({
     //...
},function(ret){
api.alert({msg:JSON.stringify(ret)});
});

可用性

Android 系统

可提供的 1.0.0 及更高版本

close

关闭预览视图

close()

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.close();

可用性

Android 系统

可提供的 1.0.0 及更高版本

startStream

开始推流

startStream()

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.startStream();

可用性

Android 系统

可提供的 1.0.0 及更高版本

stopStream

停止推流

stopStream()

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.stopStream();

可用性

Android 系统

可提供的 1.0.0 及更高版本

setComposeNodes

设置特效组合,目前仅支持美颜、美型两种特效的任意叠加

setComposeNodes({params})

Params

nodes:

  • 类型:JSON数组
  • 描述:资源路径数组

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.setComposeNodes({
    nodes:[]
});

可用性

Android 系统

可提供的 1.0.0 及更高版本

setComposerMode

设置 composer 类型特效(美颜、美妆)是否可以与贴纸特效叠加

setComposerMode({params})

Params

mode:

  • 类型:字符串
  • 描述:叠加模式
  • 取值:
    • ALONE 不可叠加
    • SHARE 可叠加

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.setComposerMode({
    mode:'SHARE'
});

可用性

Android 系统

可提供的 1.0.0 及更高版本

updateComposeNode

更新某个特效的强度

updateComposeNode({params})

Params

key:

  • 类型:字符串
  • 描述:特效所对应的 key

value:

  • 类型:数字
  • 描述:特效强度

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.setComposeNodes({
    key:'',
    value:0.5
});

可用性

Android 系统

可提供的 1.0.0 及更高版本

updateIntensity

更新某个特效的强度

updateComposeNode({params})

Params

type:

  • 类型:字符串
  • 描述:强度类型
  • 取值:
    • filter
      • beautyWhite
    • beautySmooth
    • faceReshape
    • beautySharp

intensity:

  • 类型:数字
  • 描述:强度值 范围 0~1

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.updateIntensity({
    type:'',
    intensity:0.5
});

可用性

Android 系统

可提供的 1.0.0 及更高版本

getComposeNodes

获得已经开启的特效节点

getComposeNodes()

callback

ret:

  • 类型:JSON 对象
  • 描述:返回值
{
    nodes:[]
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.getComposeNodes(function(ret){
    alert(JSON.stringify(ret));
});

可用性

Android 系统

可提供的 1.0.0 及更高版本

recoverStatus

恢复特效设置

recoverStatus()

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.recoverStatus();

可用性

Android 系统

可提供的 1.0.0 及更高版本

destroyEffectSDK

释放特效资源

destroyEffectSDK()

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.destroyEffectSDK();

可用性

Android 系统

可提供的 1.0.0 及更高版本

getFilterList

获取支持的滤镜列表

getFilterList()

callback

ret:

  • 类型:JSON 对象
  • 描述:返回值
{
    filterItems:[{
        defaultIntensity:'',
            fileName:'',
            filterName:'',
            iconPath:''
    }]
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.getFilterList(function(ret){
    alert(JSON.stringify(ret));
});

可用性

Android 系统

可提供的 1.0.0 及更高版本

getStickerList

获取支持的贴纸列表

getStickerList()

callback

ret:

  • 类型:JSON 对象
  • 描述:返回值
{
    stickerItems:[{
        stickerName:'',
            fileName:'',
            tips:'',
            iconPath:''
    }]
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.getStickerList(function(ret){
    alert(JSON.stringify(ret));
});

可用性

Android 系统

可提供的 1.0.0 及更高版本

getShapeList

获取支持的美型列表

getShapeList()

callback

ret:

  • 类型:JSON 对象
  • 描述:返回值
{
    makeUpModels:[{
        defaultIntensity:0.5,
        effectName:'',
            fileName:'',
            key:'',
            iconPath:''
    }]
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.getShapeList(function(ret){
    alert(JSON.stringify(ret));
});

可用性

Android 系统

可提供的 1.0.0 及更高版本

getMakeUpList

获取支持的美妆类型列表

getMakeUpList()

callback

ret:

  • 类型:JSON 对象
  • 描述:返回值
{
    makeUpModels:[{
        defaultIntensity:0.5,
        effectName:'',
            fileName:'',
            key:'',
            iconPath:''
    }]
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.getMakeUpList(function(ret){
    alert(JSON.stringify(ret));
});

可用性

Android 系统

可提供的 1.0.0 及更高版本

getMakeUpOptionItems

获取支持的美妆效果集合

getMakeUpOptionItems()

callback

ret:

  • 类型:JSON 对象
  • 描述:返回值
{
    makeUpModels:[{
        defaultIntensity:0.5,
        effectName:'',
            fileName:'',
            key:'',
            iconPath:''
    }]
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.getMakeUpOptionItems(function(ret){
    alert(JSON.stringify(ret));
});

可用性

Android 系统

可提供的 1.0.0 及更高版本

getBodyList

获取支持的美体列表

getBodyList()

callback

ret:

  • 类型:JSON 对象
  • 描述:返回值
{
    makeUpModels:[{
        defaultIntensity:0.5,
        effectName:'',
            fileName:'',
            key:'',
            iconPath:''
    }]
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.getBodyList(function(ret){
    alert(JSON.stringify(ret));
});

可用性

Android 系统

可提供的 1.0.0 及更高版本

updateComposeList

更新 compose 类型特效列表

updateComposeList()

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.updateComposeList();

可用性

Android 系统

可提供的 1.0.0 及更高版本

updateFilterList

更新滤镜列表

updateFilterList()

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.updateFilterList();

可用性

Android 系统

可提供的 1.0.0 及更高版本

updateStickerList

更新动态贴纸列表

updateStickerList()

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.updateStickerList();

可用性

Android 系统

可提供的 1.0.0 及更高版本

updateAllList

更新全部特效列表

updateAllList()

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.updateAllList();

可用性

Android 系统

可提供的 1.0.0 及更高版本

isUsingEffect

判断是否正在使用特效

isUsingEffect()

Callback

ret:

  • 类型:JSON 对象
  • 描述:返回值
{
     status:true // 是否使用特效 
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.isUsingEffect(function(ret){
    alert(JSON.stringify(ret));
});

可用性

Android 系统

可提供的 1.0.0 及更高版本

isEffectSDKInited

检测 SDK 是否已经初始化完毕

isEffectSDKInited()

Callback

ret:

  • 类型:JSON 对象
  • 描述:返回值
{
     status:true // 是否初始化完毕
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.isEffectSDKInited(function(ret){
    alert(JSON.stringify(ret));
});

可用性

Android 系统

可提供的 1.0.0 及更高版本

isInited

是否初始化成功

isInited(callback(ret))

callback

ret:

  • 类型:JSON 对象
  • 描述:返回值
{
     status: true         //布尔类型;是否初始化成功
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');PLMediaStreaming.isInited(function(ret){
api.alert({msg:JSON.stringify(ret)});
});

可用性

iOS 系统

可提供的 1.0.0 及更高版本

setDeviceID

设置deviceID

setDeviceID({params})

params

deviceID:

  • 类型:字符串
  • 描述:deviceID

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.setDeviceID({
   deviceID:''
});

可用性

iOS 系统

提供的 1.0.0 及更高版本

setLogLevel

设置logLevel

setLogLevel({params})

params

logLevel:

  • 类型:字符串
  • 描述:logLeve
  • 默认:Off
  • 取值范围:
    • off:
    • error:
    • warning:
    • info:
    • debug:
    • verbose:

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.setLogLevel({
   logLevel:''
});

可用性

iOS 系统

可提供的 1.0.0 及更高版本

checkAndRequestPermission

检查获取摄像头权限

checkAndRequestPermission(callback(ret))

callback

ret:

  • 类型:JSON 对象
  • 描述:返回值
{ 
      granted: true       //布尔类型;是否获取权限
      status: 1           //数字类型;状态码
                          //0还没有确定是否授权
                          //1设备受限
                          //2拒绝授权
                         //3已授权
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.checkAndRequestPermission(function(ret){
    api.alert({msg:JSON.stringify(ret)});
});

可用性

iOS 系统

可提供的 1.0.0 及更高版本

setStream

配置直播流参数,初始化推流预览区域,初始化美颜特效授权

setStream({params},callback(ret,err))

params

modelFileDirPath:

  • 类型:字符串
  • 描述:算法模型文件所在目录路径,要求本地路径。如:widget://res/ModelResource.bundle

licenseFilePath:

  • 类型:字符串
  • 描述:授权文件路径,要求本地路径。如:widget://res/LicenseBag.bundle/qiniu_20200214_20210213_com.qbox.PLShortVideoKit.ByteDance.Demo_qiniu_v3.4.2.licbag

rect:

  • 类型:JSON 对象
  • 描述:(可选项)推流画面的位置及尺寸
  • 内部字段:
{
    x: 0,      //(可选项)数字类型;模块左上角的 x 坐标(相对于所属的 Window 或 Frame);默认值:0
    y: 0,      //(可选项)数字类型;模块左上角的 y 坐标(相对于所属的 Window 或 Frame);默认值:0
    w: 300,    //(可选项)数字类型;模块的宽度;默认:'auto'
    h: 400.    //(可选项)数字类型;模块的高度;默认:'auto'
}

videoCapture:

  • 类型:JSON对象
  • 描述:(可选项)视频采集相关参数
  • 内部字段:
{
      videoFrameRate: 30,                   //(可选项)数字类型;采集的视频数据的帧率,默认为 30
      sessionPreset:  '640*480',            //(可选项)字符类型;采集的视频的Preset,默认为'640*480',取值范围:'640*480','1280*720','1920x1080'
      previewMirrorFrontFacing: true ,      //(可选项) 布尔类型;前置预览是否开启镜像,默认为 true
      previewMirrorRearFacing: false,       //(可选项) 布尔类型;后置预览是否开启镜像,默认为 false
      streamMirrorFrontFacing:  false,      //(可选项) 布尔类型;前置摄像头,推的流是否开启镜像,默认 false
      streamMirrorRearFacing: false,        //(可选项) 布尔类型;后置摄像头,推的流是否开启镜像,默认 false
      videoOrientation: 'portrait',         //(可选项) 字符类型;采集摄像头的旋转方向,默认'portrait', 取值范围:'portrait','right','left','upsideDown'
      cameraPosition: 'front'              //(可选项) 字符类型;摄像头的位置,默认'front', 取值范围:'front','back'
}

previewSetting:

  • 类型:JSON对象
  • 描述:相机预览设置(该参数只适用于Android)
  • 内部字段:
{
    previewSizeLevel: 'small',    // 字符类型;相机预览大小等级
                                  // 取值范围:small, medium, large
    previewSizeRatio: 'ratio_4_3' // 字符类型;相机预览大小比例
                                  // 取值范围:ratio_4_3, ratio_16_9
}

videoEncodeHeight:

  • 类型:字符串
  • 描述:视频编码高度(该参数只适用于Android)
  • 取值范围:
    • '1088'
    • '720'
    • '544'
    • '480'
    • '240'

videoStream:

  • 类型:JSON对象
  • 描述:(可选项)视频流相关参数
  • 内部字段:
{
    videoSize:{                 //(可选项) JSON对象;编码分辨率
        width:320 ,              //数字类型;宽度;默认:320
        height:480               //数字类型;高度;默认:480
    },
    videoQuality: 'medium1'     //(可选项)字符串类型;编码质量;默认:medium1
                                //取值范围:
                                //low1:具体参数 videoSize: 272x480, expectedSourceVideoFrameRate: 24, videoMaxKeyframeInterval: 72, profile level: AVVideoProfileLevelH264BaselineAutoLevel, video bitrate: 128Kbps
                                //low2:具体参数 videoSize: 272x480, expectedSourceVideoFrameRate: 24, videoMaxKeyframeInterval: 72, profile level: AVVideoProfileLevelH264BaselineAutoLevel, video bitrate: 256Kbps。
                                //low3:具体参数 videoSize: 272x480, expectedSourceVideoFrameRate: 24, videoMaxKeyframeInterval: 72, profile level: AVVideoProfileLevelH264HighAutoLevel, video bitrate: 512Kbps
                                //medium1:具体参数 videoSize: 368x640, expectedSourceVideoFrameRate: 24, videoMaxKeyframeInterval: 72, profile level: AVVideoProfileLevelH264HighAutoLevel, video bitrate: 512Kbps
                                //medium2:具体参数 videoSize: 368x640, expectedSourceVideoFrameRate: 24, videoMaxKeyframeInterval: 72, profile level: AVVideoProfileLevelH264BaselineAutoLevel, video bitrate: 768Kbps
                                //medium3:具体参数 videoSize: 368x640, expectedSourceVideoFrameRate: 24, videoMaxKeyframeInterval: 72, profile level: AVVideoProfileLevelH264BaselineAutoLevel, video bitrate: 1Mbps
                                //high1:具体参数 videoSize: 720x1280, expectedSourceVideoFrameRate: 24, videoMaxKeyframeInterval: 72, profile level: AVVideoProfileLevelH264BaselineAutoLevel, video bitrate: 1Mbps
                                //high2:具体参数 videoSize: 720x1280, expectedSourceVideoFrameRate: 24, videoMaxKeyframeInterval: 72, profile level: AVVideoProfileLevelH264BaselineAutoLevel, video bitrate: 1.25Mbps
                                //high3:具体参数 videoSize: 720x1280, expectedSourceVideoFrameRate: 24, videoMaxKeyframeInterval: 72, profile level: AVVideoProfileLevelH264BaselineAutoLevel, video bitrate: 1.5Mbps            
}

audioQuality:

  • 类型:字符串
  • 描述:(可选项)音频质量
  • 默认:medium
  • 取值范围:
    • high:具体参数 audio bitrate: 128Kbps
    • medium:具体参数 audio bitrate: 96Kbps
    • low:具体参数 audio bitrate: 64Kbps

face:

  • 类型:JSON 对象
  • 描述:(可选项)美颜相关参数
  • 内部字段:
{
    beautify:false         //(可选项)布尔类型;是否开启美颜模式;默认:false
    setBeautify:0         //(可选项)数字类型;设置美颜程度,范围是从0 ~ 1,0为不美颜(如果美颜不开启,该参数无效);默认:0
    setWhiten:0           //(可选项)数字类型;设置美白程度,范围是从0 ~ 1,0为不美白(如果美颜不开启,该参数无效);默认:0
    setRedden: 0          //(可选项)数字类型;设置红润程度,范围是从0 ~ 1,0为不红润(如果美颜不开启,该参数无效);默认:0
}

continuousFocus:

  • 类型:布尔类
  • 描述:(可选项)是否持续对焦
  • 默认:false

encodeOritation:

  • 类型:字符串(暂仅支持android)
  • 描述:视频编码方向
  • 取值:
    • landscape 横向
    • protrait 纵向

fixedOn:

  • 类型:字符串
  • 描述:(可选项)模块添加到指定 frame 的名字(只指 frame,传 window 无效)
  • 默认:模块依附于当前 window

fixed:

  • 类型:布尔
  • 描述:(可选项)模块是否随所属 window 或 frame 滚动
  • 默认值:true(不随之滚动)

callback

ret:

  • 类型:JSON对象
  • 描述:返回值
{
    status: true       //布尔类型;预览界面是否打开成功
}

示例代码

PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.setStream({
        modelFileDirPath:"widget://res/ModelResource.bundle",
      licenseFilePath:"widget://res/LicenseBag.bundle/qiniu_20200214_20210213_com.qbox.PLMediaStreamingKit.ByteDance.Demo_qiniu_v3.4.2.licbag",
      rect:{
         x: 0,
         y: 0,
         w: 375,
         h: 425
      },
      videoCapture:{
          videoFrameRate: 30,
          sessionPreset:  '640*480',
          previewMirrorFrontFacing: true ,
          previewMirrorRearFacing: false,
          streamMirrorFrontFacing:  false,
          streamMirrorRearFacing: false,
          videoOrientation: 'portrait',
          cameraPosition: 'front'
      },
      videoStream:{
          videoSize:{
              width:320,
              height:480
          },
          videoQuality: 'medium1'
      },
      face: {
          beautify: false,
          setBeautify:0,
          setWhiten:0,
          setRedden:0
      },
      audioQuality: 'medium',
      continuousFocus: false,
      fixed: true
},function(ret) {
      api.alert({msg:JSON.stringify(ret)});
});

可用性

iOS 系统

可提供的 1.0.0 及更高版本

startStream

开始推流,当播放异常时亦可通过此接口发起重链请求,刷新视频播放器,(注:android只有在收到streamStatus状态为17(准备就绪)后才允许调用此方法) startStream({params},callback(ret))

params

pushStreamURL:

  • 类型:字符串
  • 描述:推流地址

callback

ret:

  • 类型:JSON对象
  • 描述:返回值
{
    status:true     //布尔类型;是否推流成功
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.startStream({
   pushStreamURL:''
},function(ret){
    api.alert(JSON.stringify(ret));
});

可用性

iOS 系统,Android 系统

可提供的 1.0.0 及更高版本

inputgainEnable

当前设备是否支持设置录音音量 注意:该方法仅支持ios

inputgainEnable(callback(ret))

callback

ret:

  • 类型:JSON对象
  • 描述:返回值
{
    enalbe: true       //布尔类型;是否支持设置麦克风音量
}

示例代码

PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.inputgainEnable(function(ret) {
      api.alert({msg:JSON.stringify(ret)});
});

可用性

iOS 系统

可提供的 1.0.0 及更高版本

getInputgain

获取麦克风音量大小,取值范围:0-1 注意:该方法仅支持ios

getInputgain(callback(ret))

callback

ret:

  • 类型:JSON对象
  • 描述:返回值
{
    inputgain: 0.7       //数字类型;麦克风音量
}

示例代码

PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.getInputgain(function(ret) {
      alert(JSON.stringify(ret));
});

可用性

iOS 系统

可提供的 1.0.0 及更高版本

setInputgain

设置麦克风音量大小,取值范围:0-1 注意:该方法仅支持ios

setInputgain({params}})

inputgain:

  • 类型:数字
  • 描述:(可选项)麦克风音量
  • 默认:0.6

示例代码

PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.setInputgain({
   inputgain:0.8
});

可用性

iOS 系统

可提供的 1.0.0 及更高版本

toggleCamera

切换前后摄像头

toggleCamera()

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.toggleCamera();

可用性

iOS 系统,Android 系统

可提供的 1.0.0 及更高版本

stopStream

结束推流

stopStream()

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.stopStream();

可用性

iOS系统,Android系统

可提供的 1.0.0 及更高版本

destroyStream

销毁推流,释放资源

destroyStream()

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.destroyStream();

可用性

iOS 系统,Android 系统

可提供的 1.0.0 及更高版本

turnLightOn

打开闪光灯

turnLightOn()

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.turnLightOn();

可用性

iOS 系统,Android 系统

可提供的 1.0.0 及更高版本

turnLightOff

关闭闪光灯

turnLightOff()

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.turnLightOff();

可用性

iOS 系统,Android 系统

可提供的 1.0.0及更高版本

setMuteMicrophone

设置是否静音

setMuteMicrophone({params})

params

microphone:

  • 类型:布尔
  • 描述:(可选项)是否静音
  • 默认:false

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.setMuteMicrophone({
   microphone:false
});

可用性

iOS 系统

可提供的 1.0.0 及更高版本

addEventListener

添加监听

addEventListener({params},callback(ret))

params

name:

  • 类型:字符串
  • 描述:监听事件名
  • 取值范围:
    • streamError:
    • streamState:
    • streamUpdate:
    • streamCamera:
    • streamMicrophone:

callback

ret:

  • 类型:JSON对象
  • 描述:状态
{           
   domain:   //字符串类型;错误信息,name为streamError时有值
   code:     //数字类型;错误码,name为streamError时有值


    state: 'started'    // 字符串类型;流状态变更事件,仅当name为streamState返回该值,取值范围如下:
                        // 0 代表: 未知状态,只会作为 init 的初始状态
                        // 1 代表:连接中状态
                        // 2 代表:已连接状态
                        // 3 代表:断开连接中状态
                        // 4 代表:已断开连接状态
                        // 5 代表:正在等待自动重连状态
                        // 6 代表:错误状态

    cameraStatus:      //数字类型; 
                        // 0 代表:还没有确定是否授权
                        // 1 代表:设备受限,一般在家长模式下设备会受限
                        // 2 代表:拒绝授权
                        // 3 代表:已授权

    microphoneStatus   //数字类型; 
                        // 0 代表:还没有确定是否授权
                        // 1 代表:设备受限,一般在家长模式下设备会受限
                        // 2 代表:拒绝授权
                        // 3 代表:已授权
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.addEventListener({
     name:'streamError'
},function(ret) {
     api.alert({msg:JSON.stringify(ret)});
});

可用性

iOS 系统,Android 系统

可提供的1.0.0及更高版本

getStickers

获取滤镜和贴纸

getStickers({params}, callback(ret))

params

type:

  • 类型:字符串
  • 描述:获取的类型
  • 默认:sticker
  • 取值范围:
    • sticker:贴纸
    • filter:滤镜

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:状态
{           
   stickers:  {           //数组类型; 
      displayName:,       //字符串类型;显示名称
      path:'',            //字符串类型;路径,拼接/icon.png即可获取该图片
      tip:'',             //字符串类型;触发类效果提示文案
      intensity:          //数字类型;强度
   } 
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.getStickers({
  type:'filter' 
},function(ret) {
   api.alert({msg:JSON.stringify(ret)});
});

可用性

iOS 系统,Android 系统

可提供的 1.0.0 及更高版本

setSticker

设置贴纸

setSticker()

displayName:

  • 类型:字符串
  • 描述:贴纸效果名称,若不传则表示去掉已设置的贴纸

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.setSticker({
   displayName: '招财猫'
});

可用性

iOS 系统

可提供的 1.0.0 及更高版本

setFillter

设置滤镜

setFillter()

displayName:

  • 类型:字符串
  • 描述:滤镜效果名称,若不传则表示去掉已设置的滤镜

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.setFillterr({
   displayName: '红唇'
});

可用性

iOS 系统

可提供的 1.0.0 及更高版本

getMakeUp

获取美颜、美型、美体、口红、腮红、修容、美瞳、染发、眼影、眉毛

getMakeUp({params}, callback(ret))

params

type:

  • 类型:字符串
  • 描述:获取的类型
  • 默认:sticker
  • 取值范围:
    • beauty:美颜
    • reshape:美型
    • body:美体
    • lip:口红
    • blush:晒红
    • facial:修容
    • pupil:美瞳
    • hair:染发
    • eyeshadow:眼影
    • eyebrow:眉毛

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:状态
{           
   makeUps:  {           //数组类型; 
      displayName:,       //字符串类型;显示名称
      path:'',            //字符串类型;路径,拼接/displayName/icon.png即可获取该图片
      internalKey:'',     //字符串类型;算法内部识别类型的key
      intensity:          //数字类型;强度
   } 
}

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.getMakeUp({
   type:'beauty' 
},function(ret) {
   api.alert({msg:JSON.stringify(ret)});
});

可用性

iOS 系统

可提供的 1.0.0 及更高版本

updateMakeupIntensity

更新美颜美妆及其强度

updateMakeupIntensity()

type:

  • 类型:字符串
  • 描述:获取的类型
  • 默认:sticker
  • 取值范围:
    • beauty:美颜
    • reshape:美型
    • body:美体
    • lip:口红
    • blush:晒红
    • facial:修容
    • pupil:美瞳
    • hair:染发
    • eyeshadow:眼影
    • eyebrow:眉毛

displayName:

  • 类型:字符串
  • 描述:贴纸效果名称,若不传则表示去掉已设置的

intensity:

  • 类型:字符串
  • 描述:强度 0.5

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.updateMakeupIntensity({
   type:'blush',
   intensity:0.5,
   displayName: '蜜桃'
});

可用性

iOS 系统

可提供的 1.0.0 及更高版本

updateMakeups

设置多个效果

updateMakeups()

type:

  • 类型:字符串
  • 描述:获取的类型
  • 默认:sticker
  • 取值范围:
    • beauty:美颜
    • reshape:美型
    • body:美体
    • lip:口红
    • blush:晒红
    • facial:修容
    • pupil:美瞳
    • hair:染发
    • eyeshadow:眼影
    • eyebrow:眉毛

displayNames:

  • 类型:数组
  • 描述:效果名称组成的数组,如['蜜桃','微醺','甜橙'],若不传则表示去掉已设置的

示例代码

var PLMediaStreaming = api.require('PLMediaStreaming');
PLMediaStreaming.setFillterr({
   type:'blush',
   displayName: ['蜜桃','微醺','甜橙']
});

可用性

iOS 系统

可提供的 1.0.0 及更高版本