LBAirDrop

立即使用

概述

乐播投屏简介

乐播投屏,是一款移动设备(手机/平板等)连接大屏终端(电视、盒子、投影、VR等智能设备)的多屏互动工具,可以实现将移动设备的内容无线投送(可镜像)到大屏终端。

LBAirDrop 模块概述 LBAirDrop 模块封装了一个移动投屏控件,具有投屏播放,设置音量,发送弹幕等以及其他一些功能。

模块使用攻略

使用之前须从乐播开放平台申请开发者账号并创建应用,获取 appID 和 AppSecret。

配置 config.xml 文件:

针对 ios 平台配置方法:

  • 配置示例:

    <feature name="LBAirDrop">
        <param name="appID" value="12325"/>
        <param name="AppSecret" value="a29129bb729ab38edfd54f4cf6b85b9b"/>
        <param name="appID_android" value="******"/>
        <param name="AppSecret_android" value="***************"/>
    </feature>

appId: 乐播云后台应用管理获取的iOS端AppID AppSecret: 乐播云后台应用管理获取的iOS端AppSecret

appID_android: 乐播云后台应用管理获取的android端AppID AppSecret_android: 乐播云后台应用管理获取的android端AppSecret

适配 iOS14 仍需配置如下:

  1. 云编译时配置访问本地网络权限提示语,如:此App将可发现和链接到您所用的局域网中的设备

2.配置 Info.plist 文件如下:

<key>NSBonjourServices</key>
<array>
    <string>_leboremote._tcp</string>
</array>

nfo.plist 文件配置详情,参考 APICloud 官方论坛帖子

模块接口

searchList

搜索可投屏的设备

searchList(callback(ret))

params

searchType

  • 类型:数字类型
  • 描述:(可选项)搜索类型(仅android支持)
  • 取值范围:0/搜索乐联和DLNA协议,1/仅搜索乐联协议
  • 默认值:0

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
  • 注意:没搜到设备时,不返回数据
{
    data: [{
    lelinkServiceName:'',   //字符串类型;搜到的接收端的名称
    tvUID:'',               //字符串类型:接收端的唯一标识,
    ipAddress:'',          //字符串类型:接收端的IP地址
    remotePort:123,         //数字类型;linux端口
    port:123,               //数字类型;android端口 
    receviverPackageName:'',//字符串类型;接收端包名 TV端乐播投屏apk的包名为com.hpplay.happyplay.aw,可在设备列表中判断receviverPackageName是否等于此包名,UI上可以加上推荐二字,用户的投屏体验更好
    UDN:'',                //字符串类型;接收端DLNA的uuid,注意此字段只针对特殊渠道有效,非通用字段(仅iOS有效)
    hasNewVersion:false,   //布尔类型;接收端是否有可升级的新版本 此属性是搜到TV端乐播投屏apk有新版可更新时,可提示用户升级接收端,体验更好
    alias:'',              //字符串类型;(非必要的)别名,开发者可开放出来供用户修改服务名称的别名,方便用户自己识别和区分自己的服务(没有则不不返回)
    frequentlyUsed:true,   //布尔类型;(非必要的)是否为常用(仅iOS有效)
    onceConnected:true,   //布尔类型;(非必要的)曾经连接过的服务(仅iOS有效)
    lastTimeConnected:true,//布尔类型;(非必要的)上次连接过的服务(仅iOS有效)
    isConnected:true,//布尔类型;是否已连接(仅android有效)
    fromQRCode:true,     //布尔类型;是否从二维码获得的设备(仅iOS有效)
    lelinkServiceAvailable:true, //布尔类型;服务是否可用,三个服务中的任意一个可用,则isLelinkServiceAvailable为YES,否则为NO(仅iOS有效)
    innerLelinkServiceAvailable:true,//布尔类型; 乐联服务是否可用 (仅iOS有效)
    upnpServiceAvailable:true, //布尔类型;DLNA服务是否可用(仅iOS有效)
    imServiceAvailable:true, //布尔类型; 公网服务是否可用(仅iOS有效)
    isOnline:,           //布尔类型;是否在线(仅android有效)
    isLocalWifi:,           //布尔类型;是否是局域网(仅android有效)
    pinCode:'',           //字符串类型;设备pin码(仅android有效)(没有则不不返回)
    w:,                       //数字类型;宽(仅android有效)
    h:,                      //数字类型;高(仅android有效)
    types:'',           //字符串类型;支持服务(仅android有效)
    channel:'',         //字符串类型;channel(仅android有效)



  /*  
 各类服务数据模型,可以结合服务可用状态判断当前的服务使用的何种投屏方式
 1、如果只有upnpDevice有值,则当前的接收端仅仅支持DLNA服务,非乐播的接收端的DLNA就属于此种情况

 2、如果只有imDevice有值,且isImServiceAvailable为YES,则当前服务使用公网投屏
 3、如果innerLelinkDevice和upnpDevice任意一个有值,则当前服务使用局域网投屏

 4、当多个服务有值时,服务使用的优先级,乐联 > DLNA > 公网
    1)都有值——>使用乐联
    2)乐联和DLNA都有值——>使用乐联
    3)乐联和公网都有值——>使用乐联
    4)DLNA和公网都有值——>使用DLNA
    5)注意此逻辑是SDK内部在使用服务建立连接和投屏时的选择逻辑,SDK使用者可忽略,感兴趣的可以了解一下
 */
    innerLelinkDevice:true,//布尔类型;乐联服务数据模型(仅iOS有效)
    upnpDevice:true,  //布尔类型; DLNA服务数据模型(仅iOS有效)
    imDevice:true   //布尔类型; 公网服务数据模型(仅iOS有效)
    }]
}

err:

  • 类型:JSON 对象
  • 内部字段:
    {
    msg:'',              //字符串类型;错误信息(仅android支持)
    }
    

示例代码

       var demo = api.require('LBAirDrop');
        demo.searchList(function(ret){
                       alert(JSON.stringify(ret));
                       });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

stopBrowse

停止搜索(仅android支持)

stopBrowse(callback(ret))

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:

    {
      status:,         //布尔类型;是否成功
    }
    

    err:

  • 类型:JSON 对象

  • 内部字段:
    {
    msg:'',              //字符串类型;错误信息
    }
    

示例代码

var demo = api.require('LBAirDrop');
demo.stopBrowse(function(ret){
alert(JSON.stringify(ret));
});

可用性

Android系统

可提供的1.0.0及更高版本

connect

链接投屏设备

connect(callback(ret))

params

uid:

  • 类型:字符串类型
  • 描述:要连接的设备uid,需要是已搜索到的设备或已获取到的设备uid(仅Android支持)

index:

  • 类型:数字类型
  • 描述:(仅iOS支持)searchList接口获取到的数组的index

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status:true,  //布尔值;链接成功与失败的状态/断开链接成功与失败的状态;当false时,不返回eventType
    eventType:'',
            -'disConnect' //字符串类型;断开链接成功
            -'connect'   //字符串类型;链接成功
            - ‘connectError’    //连接失败
    connectType:'',        //字符串类型;连接方式,eventType为connect时返回 取值范围:‘Lelink’/‘DLNA’/‘NEW_LELINK’/‘IM’(仅android支持)
    uid:'',                 //字符串类型;设备uid,(仅android支持)
    errorCode:,        //数字类型;eventType为connectError时返回;取值范围:212001/连接失败,212012/等待确认,212013/连接拒绝,212014/连接超时,212015/连接黑名单(仅android支持)

}

示例代码

var demo = api.require('LBAirDrop');
demo.connect({
uid:'',
},function(ret){
alert(JSON.stringify(ret));
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

disConnect

断开连接

disConnect(callback(ret))

callback(ret)

ret:

  • 类型:JSON对象
  • 内部字段:

    {
    status:,         //布尔类型;是否断开成功
    }
    

    err:

  • 类型:JSON 对象

  • 内部字段:
    {
    msg:''          // 字符串类型;错误信息
    }
    

    示例代码

var demo = api.require('LBAirDrop');
demo.disConnect({
},function(ret){
alert(JSON.stringify(ret));
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

getDeviceByPin

通过pin码获取设备,成功获取后可通过connect连接

getDeviceByPin(callback(ret))

params

pinCode:

  • 类型:字符串类型
  • 描述:设备pin码

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status:,         //布尔类型;是否获取成功
    device:{       //Json对象类型;设备信息
    tvUID:'',               //字符串类型:接收端的唯一标识,
    ipAddress:'',          //字符串类型:接收端的IP地址
    remotePort:123,         //数字类型;linux端口
    port:123,               //数字类型;android端口 
    receviverPackageName:'',//字符串类型;接收端包名 TV端乐播投屏apk的包名为com.hpplay.happyplay.aw,可在设备列表中判断receviverPackageName是否等于此包名,UI上可以加上推荐二字,用户的投屏体验更好
    hasNewVersion:false,   //布尔类型;接收端是否有可升级的新版本 此属性是搜到TV端乐播投屏apk有新版可更新时,可提示用户升级接收端,体验更好
    alias:'',              //字符串类型;(非必要的)别名,开发者可开放出来供用户修改服务名称的别名,方便用户自己识别和区分自己的服务
    isConnected:true,//布尔类型;是否已连接
    isOnline:,           //布尔类型;是否在线
    isLocalWifi:,           //布尔类型;是否是局域网
    pinCode:'',           //字符串类型;设备ping码
    w:,                       //数字类型;宽
    h:,                      //数字类型;高
    types:'',           //字符串类型;支持服务
    channel:'',         //字符串类型;channel
    },

}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:'',              //字符串类型;错误信息
}

示例代码

var demo = api.require('LBAirDrop');
demo.getDeviceByPin({
pinCode:'',
},function(ret){
alert(JSON.stringify(ret));
});

可用性

Android系统

可提供的1.0.0及更高版本

open

视频投屏

open({params}, callback(ret))

params

videoType

  • 类型:字符串
  • 描述:视频类型
  • 取值范围:
    • local :本地类型 (iOS暂不支持本地视频播放)
    • online :在线视频

path

  • 类型:字符串
  • 描述:视频文件的路径 (iOS暂不支持本地视频播放)

mediaType

  • 类型:数字类型
  • 描述:媒体播放类型
  • 取值范围:
    • 1 // 在线视频媒体类型
    • 2 //在线音频媒体类型
    • 3 //在线图片媒体类型
    • 4 //本地图片媒体类型
    • 5 //本地视频媒体类型
    • 6 //本地音频媒体类型

startPosition

  • 类型:数字类型
  • 描述:(可选项)播放的起始位置;默认:0

loopMode

  • 类型:字符串
  • 描述:播放循环模式
  • 默认:无
  • 取值范围:
    • 'SingleCycle'
    • 'Default'
    • ‘All’(仅android支持)

示例代码

       var demo = api.require('LBAirDrop');
        demo.open({    
                   videoType:'online'
                       });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

pause

暂停播放

pause(callback(ret))

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
{

  status:true   //布尔类型;暂停播放成功还是失败

}

示例代码

var demo = api.require('LBAirDrop');
demo.pause(function(ret){
alert(JSON.stringify(ret));
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

resumePlay

恢复播放

resumePlay(callback(ret))

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
  status:true   //布尔类型;恢复播放成功还是失败

}

示例代码

var demo = api.require('LBAirDrop');
demo.resumePlay(function(ret){
alert(JSON.stringify(ret));
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

seekTime

设置播放进度

seekTime({params})

params

playProgress:

  • 类型:数字类型
  • 描述:播放进度
  • 默认:0

示例代码

js
var demo = api.require('LBAirDrop');
demo.seekTime({
playProgress : 20
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

stop

退出播放

stop()

示例代码

js
 var demo = api.require('LBAirDrop');
 demo. stop();

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

setVolume

设置音量值

setVolume({params})

params

Volume:

  • 类型:数字类型
  • 描述:音量值,范围0 ~ 100
  • 默认:0

示例代码

js
 var demo = api.require('LBAirDrop');
 demo.setVolume({
 Volume : 50
 });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

addVolume

增加音量

addVolume()

示例代码

js
 var demo = api.require('LBAirDrop');
 demo.addVolume();

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

reduceVolume

加少音量

reduceVolume()

示例代码

js
 var demo = api.require('LBAirDrop');
 demo.reduceVolume();

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

scanString

通过扫描二维码获取到的字符串获取服务

scanString({params}, callback(ret))

params

codeStringValue:

  • 类型:字符串类型
  • 描述:二维码扫描获取到的字符串

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status:true,  //布尔值;获取服务成功还是失败
    device:{       //Json对象类型;设备信息  成功获取时返回(仅android支持)
    tvUID:'',               //字符串类型:接收端的唯一标识,
    ipAddress:'',          //字符串类型:接收端的IP地址
    remotePort:123,         //数字类型;linux端口
    port:123,               //数字类型;android端口 
    receviverPackageName:'',//字符串类型;接收端包名 TV端乐播投屏apk的包名为com.hpplay.happyplay.aw,可在设备列表中判断receviverPackageName是否等于此包名,UI上可以加上推荐二字,用户的投屏体验更好
    hasNewVersion:false,   //布尔类型;接收端是否有可升级的新版本 此属性是搜到TV端乐播投屏apk有新版可更新时,可提示用户升级接收端,体验更好
    alias:'',              //字符串类型;(非必要的)别名,开发者可开放出来供用户修改服务名称的别名,方便用户自己识别和区分自己的服务
    isConnected:true,//布尔类型;是否已连接
    isOnline:,           //布尔类型;是否在线
    isLocalWifi:,           //布尔类型;是否是局域网
    pinCode:'',           //字符串类型;设备ping码
    w:,                       //数字类型;宽
    h:,                      //数字类型;高
    types:'',           //字符串类型;支持服务
    channel:'',         //字符串类型;channel
    }

}

示例代码

       var demo = api.require('LBAirDrop');
        demo.scanString({ 
              codeStringValue:'aaaaa'                
                       },function(ret){
                       alert(JSON.stringify(ret));
                       });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

canSupportPushBarrage

是否支持推送弹幕

canSupportPushBarrage(callback(ret))

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status:true,  //布尔值;true为支持,false为不支持

}

示例代码

       var demo = api.require('LBAirDrop');
        demo.canSupportPushBarrage(function(ret){
                       alert(JSON.stringify(ret));
                       });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

canCurrentPushBarrage

是否现在可以推送弹幕(仅iOS支持)

canCurrentPushBarrage(callback(ret))

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status:true,  //布尔值;true为支持,false为不支持

}

示例代码

       var demo = api.require('LBAirDrop');
        demo.canCurrentPushBarrage(function(ret){
                       alert(JSON.stringify(ret));
                       });

可用性

iOS系统

可提供的1.0.0及更高版本

pushPriorityBarrage

推送弹幕

pushPriorityBarrage({params})

params

style:

  • 类型:JSON对象
  • 描述:弹幕设置
  • 内部字段:
{
    text: '点点滴滴',   //字符串类型;弹幕内容
    fontSize: 20,   //(可选项)数字类型;弹幕字体大小;默认值:20
    textColor: ‘’,  //(可选项)字符串;字体颜色;支持 rgb,rgba,#,默认白色
    danmukuId:,    //(可选项)数字类型;弹幕id;默认值:无
    displayTime:,    //(可选项)数字类型;弹幕在视频哪个时间点显示(单位:毫秒  默认为0) 设置为0则马上显示弹幕;默认值:0

}

示例代码

       var demo = api.require('LBAirDrop');
        demo.pushPriorityBarrage({ 
                                style:{
                                  text: '点点滴滴',
                                   fontSize: 20,   
                                   textColor:'#EEEE00' , 
                                   danmukuId: 200  
                                   displayTime: 0  
                                }
                       });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

setMediaListener

设置播控监听

setMediaListener({params})

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
    {
    eventType:'',     //字符串类型;回调事件;取值范围:
                              //‘loading’/正在加载
                              //‘start’/开始播放 (仅支持安卓)
                              //’playing‘/正在播放(仅支持iOS)
                              //‘unkown’/未知状态(仅支持iOS)
                              //‘pause’/暂停
                              //‘completion’/播放完成
                               //‘stop’/结束播放
                             //‘seekComplete’/进度调节 (仅支持安卓)
                             //‘error’/错误回调
                              //‘volumeChanged’/音量变化回调 (仅支持安卓)
                              //‘PositionUpdate’/播放进度回调
    seekPosition:,   //数字类型;进度调节,百分比,,仅eventType为‘seekComplete’时返回 
    errorCode1:,     //数字类型;错误码1,仅eventType为‘error’时返回 (仅支持安卓)
    errorCode2:,     //数字类型;错误码2,仅eventType为‘error’时返回 (仅支持安卓)
    volumePercent:,     //小数类型;音量变化,仅eventType为‘volumeChanged’时返回
    duration:,     //小数类型;总时长 单位:秒,仅eventType为‘PositionUpdate’时返回
    position:,     //小数类型;当前进度 单位:秒,仅eventType为‘PositionUpdate’时返回
    }
    

示例代码

var LBAirDrop = api.require('LBAirDrop');
LBAirDrop.setMediaListener(function(ret,err){
    alert(JSON.stringify(ret));
});

可用性

Android系统

可提供的1.0.0及更高版本

mirror

开启镜像(仅android支持)

mirror({params})

params

resolutionLevel:

  • 类型:数字类型
  • 描述:(可选项)分辨率
  • 取值范围:3/屏幕分辨率,2/720P分辨率,1/1080P分辨率
  • 默认:3

bitRateLevel:

  • 类型:数字类型
  • 描述:(可选项)比特率
  • 取值范围:4/高比特率,5/中比特率,6低比特率
  • 默认:5

audioEnable:

  • 类型:布尔类型
  • 描述:(可选项)是否开启录制声音
  • 默认:false

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
    {
    status:,     //布尔类型;是否成功执行
    }
    

err:

  • 类型:JSON 对象
  • 内部字段:
    {
    msg:'',     //字符串类型;错误信息
    }
    

示例代码

var LBAirDrop = api.require('LBAirDrop');
LBAirDrop.mirror({
},function(ret,err){
    alert(JSON.stringify(ret));
});

可用性

Android系统

可提供的1.0.0及更高版本

stopMirror

关闭镜像(仅android支持)

stopMirror({params})

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:

    {
    status:,     //布尔类型;是否成功执行
    }
    

    err:

  • 类型:JSON 对象

  • 内部字段:
    {
    msg:'',     //字符串类型;错误信息
    }
    

示例代码

var LBAirDrop = api.require('LBAirDrop');
LBAirDrop.stopMirror({
},function(ret,err){
    alert(JSON.stringify(ret));
});

可用性

Android系统

可提供的1.0.0及更高版本