leShiLive

来自于:开发者立即使用

概述

leShiLive封装了乐视云平台移动直播SDK的功能,可直接将直播视图嵌入到html页面中,实现html页面直播功能。该模块分两种类型的直播:移动直播和乐视云直播。本文所说的"乐视云直播"对应乐视云直播后台中的"标准直播"。

乐视云直播接入

要使用该模块,开发者需要到乐视云官网申请相应appKey等。

申请步骤

1 申请乐视云账号并登录

乐视云官网地址:http://uc.lecloud.com/login.do。用户登录后需要申请开通“移动直播”和“标准点播”功能,其中“标准点播”对应“乐视云直播”,本文的“标准点播”也叫“乐视云直播”。用户可以在“控制台”中选择进入“移动直播”或“标准点播”管理界面。

2 进入账号管理进行资质认证,如下图

3 认证成功后,进入控制台->移动直播 -> 应用管理 -> 创建应用,具体如下图

4 获取AppKey和推流域名、播放域名,具体如下图

5 获取用户id和私钥,用于乐视云直播配置,用户中心 -> 用户私钥,具体如下图

6 获取乐视云直播活动Id,用于乐视云直播配置。需要创建活动后即可获取活动Id,控制台 -> 标准点播 -> 活动管理,具体如下图

7、视频分辨率,总码率(kbps)对应参考值。

信号源       视频分辨率               总码率(kbps)
高清 1920*1080P 5000
1280*720P 1800
960*540P 1300
960*540P 1300
640*360P 800
640*360P 350
标清 720*576P 1800
720*576P 1300
720*576P 800
640*480P 350

模块使用攻略

在使用该模块前需要开发者先配置widget中的config.xml文件,这些参数值的获取方法见上面的"申请步骤",配置方法如下:

  • feature名称:leShiLive
  • 参数:pushDomain、pullDomain、appKey、secretKey、userId
  • 字段描述:
    1. pushDomain:(必填)移动直播推流域名,在官网移动直播创建应用后可拿到,见步骤4
    2. pullDomain:(必填)移动直播播放域名,在官网移动直播创建应用后可拿到,见步骤4
    3. appKey:(必填)移动直播推流签名密钥,在官网移动直播创建应用后可拿到,见步骤4
    4. secretKey:(必填)乐视云直播推流用户私钥,用户可以在官网用户中心拿到,见步骤5
    5. userId:(必填)乐视云直播推流用户userId,用户可以在官网用户中心拿到,见步骤5
  • 配置示例:以下示例的值不可用,请开发者自行换为自己的值。
<root>
    <feature name="leShiLive">
        <param name="pushDomain" value="29586.mpush.live.lecloud.com"/>
        <param name="pullDomain" value="29586.mpull.live.lecloud.com"/>
        <param name="appKey" value="V5K67POCIJQSUF9U52LA"/>移动直播推流签名密钥
        <param name="secretKey" value="256g8419e7dhk554dhu5dwom84hkop6d5"/>乐视云直播推流用户私钥
        <param name="userId" value="951648"/>
    </feature> 
</root>

移动直播的接口调用顺序:

  1. 生成移动直播推流地址:generateURL ;
    这一步如果开发者有自己的推流地址,可使用自己的推流地址,无需调用generateURL。
  2. 初始化移动直播预览:initLive (对于Android initType参数传入"mobile"值,iOS无需传initType参数);
  3. 开始移动直播:startPushWithUrl (传入generateURL生成的推流地址或自己已有的推流地址)。

乐视云直播的接口调用顺序:

  1. 初始化乐视云直播预览:initLive (对于Android initType参数传入"le"值,iOS无需传initType参数) ;
  2. 获取乐视云直播机位信息:getLiveMachinesInfo ;
  3. 开始乐视云直播:startCloudLive(传入getLiveMachinesInfo获取到的机位信息)。

模块接口

generateURL

生成推流地址和播放地址,推流地址用于移动直播。

generateURL({params},callback(ret))

params

streamName:

  • 类型:字符串
  • 描述:(必填项)移动直播流名称。流名称可以是任意数字、字母的组合

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回是否生成地址成功,如成功则返回推流地址和播放地址
  • 内部字段:
{
    status:1,//数值型,1:生成成功,0:生成失败
    pushUrl:"rtmp://216.mpush.live.lecloud.com/live/leshitest?tm=20170120143801&sign=20f9bccb743418f2d16d94e3a67489a7",//推流地址,用于移动直播。status为1时有该字段
    playUrl: "rtmp://216.mpull.live.lecloud.com/live/leshitest?tm=20170120143801&sign=508a3020afb794b80289e6a7317a451f"//播放地址。status为1时有该字段
}

示例代码

var leShiLive = api.require('leShiLive');
leShiLive.generateURL({
    streamName:'leshitest'
},function(ret,err){
        alert(JSON.stringify(ret)+"   "+JSON.stringify(err));
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

initLive

初始化直播,移动直播和乐视云直播的初始化都用该接口,移动直播initType参数传入"mobile",乐视云直播initType传入"le"。调用该方法后就设置了乐视sdk的回调,当直播状态发生变化时,该模块会回调onPublish方法,onPublish方法由开发者自行实现,详见下面onPublish方法说明。

initLive({params},callback(ret))

params

x:

  • 类型:数字类型;
  • 描述:(必填)模块左上角的 x 坐标(相对于所属的 Window 或 Frame)。

y:

  • 类型:数字类型;
  • 描述:(必填)模块左上角的 y 坐标(相对于所属的 Window 或 Frame)。

w:

  • 类型:数字类型;
  • 描述:(可选)播放视图的宽度;
  • 默认值: 所属的 Window 或 Frame的宽度。

h:

  • 类型:数字类型;
  • 描述:(可选)播放视图的高度;
  • 默认值: 所属的 Window 或 Frame的高度。

initType:

  • 类型:字符串类型;
  • 描述:(Android必填)初始化的类型,该参数只对Android平台有效;
  • 取值范围:1、"mobile":初始化移动直播; 2、"le":初始化乐视云直播。

activityId:

  • 类型:字符串类型;
  • 描述:乐视云直播的活动Id,initType为"le"时必填,initType为"mobile"时可不填;用户开通乐视云直播功能,需要在乐视云官网登录账号后到用户中心创建活动,创建活动后即可拿到活动Id。要注意在乐视后台看activityId的活动有效时间,无效的activityId即不在时间范围内不能直播成功。

fixedOn:

  • 类型:字符串;
  • 描述:(可选)模块所属 Frame 的名字,如果不传该模块默认归属于当前 Window;

fixed:

  • 类型:布尔型;
  • 描述:(可选)模块是否固定在所属 Window 或 Frame上,true为固定,即模块不随所属 Window 或 Frame滚动;
  • 默认值: false

previewWidth:

  • 类型:数字类型;
  • 描述:(可选)摄像头预览分辨率的宽,要求宽度必须是16的整倍数,高度没有要求;
  • 默认值: 640

previewHeight:

  • 类型:数字类型;
  • 描述:(可选)摄像头预览分辨率的高;
  • 默认值: 480

isLandscape:

  • 类型:布尔型;
  • 描述:(可选)是否横屏直播,该参数只对Android平台有效;
  • 默认值: false

isBackCamare:

  • 类型:布尔型;
  • 描述:(可选)是否默认开启后置摄像头,为false则默认开启前置摄像头;
  • 默认值: false

frameRate:

  • 类型:数字类型;
  • 描述:(可选)推流每秒的视频帧数,该参数只对iOS有效;
  • 默认值: 24

bitrate:

  • 类型:数字类型;
  • 描述:(可选)推流的视频流比特率;
  • 默认值: 1000000

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:初始化是否成功
  • 内部字段:
{
    status: 1  //整型;1(成功)||0(失败)
}

示例代码

var leShiLive = api.require('leShiLive');
leShiLive.initLive({
    x : 0,
    y : 0,
    w : 320,
    h : 320,
    initType:"mobile",
    activityId:"A2016092500000x0",
    frameRate:24,
    bitrate:1000000,
    isBackCamare:true,
    fixedOn : api.frameName,
    fixed : false,
    previewWidth:320,
    previewHeight:320,
    isLandscape:false
},function(ret,err){
    alert(JSON.stringify(ret)+"  "+ JSON.stringify(err));
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

startPushWithUrl

开始移动直播。

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

params

pushUrl:

  • 类型:字符串
  • 描述:(必填)移动直播推流地址

callback(ret, err)

ret:

  • 类型:JSON对象
  • 描述:返回是否调用了推流方法,此处的返回只是返回是否调用了SDK中开始推流的方法。要判断是否推流成功,开发者需要自己实现onPublish(status,msg)方法(js方法)。开始推流后(调用startPushWithUrl方法)模块会异步回调onPublish方法,该方法有各种推流的状态回调,开发者可根据相应状态做出相应处理。详见onPublish方法说明。
  • 内部字段:
{
    status:1 //整型,1:调用了推流方法,0:调用推流方法失败    
}

err:

  • 类型:JSON对象
  • 内部字段:
{
    msg:"" //错误信息   
}

示例代码

var leShiLive = api.require('leShiLive');
leShiLive.generateURL({
    streamName:'leshitest'
},function(ret,err){
        alert(JSON.stringify(ret)+"   "+JSON.stringify(err));
});
function onPublish(status,msg){
    if(status == "RECORDER_OPEN_URL_SUCESS"){
        alert(msg);
    }else if(status == "RECORDER_OPEN_URL_FAILED"){
        alert(msg);
    }else if(status == "RECORDER_PUSH_FIRST_SIZE"){
        alert(msg);
    }else if(status == "RECORDER_PUSH_ERROR"){
        alert(msg);
    }
}

onPublish(status,msg)

msg:

  • 类型:字符串
  • 描述:相应状态的中文解释

status:

  • 类型:字符串
  • 描述:推流状态,取值范围如下:
    1. Android的取值范围:
      乐视云直播、移动直播都有的状态:
      RECORDER_OPEN_URL_SUCESS: 推流连接成功:只有当连接成功以后才能开始推流
      RECORDER_OPEN_URL_FAILED: 推流连接失败:如果失败,大多是推流地址不可用或者网络问题
      RECORDER_PUSH_FIRST_SIZE: 第一针画面推流成功,代表成功的开始推流了:推流成功的标志回调
      RECORDER_PUSH_AUDIO_PACKET_LOSS_RATE: 音频出现丢帧现象。如果一分钟丢帧次数大于5次,导致声音跳动:可以对网络进行判定
      RECORDER_PUSH_VIDEO_PACKET_LOSS_RATE: 视频出现丢帧现象,如果一分钟丢帧次数大于5次,导致画面跳动:可以对网络进行判定
      RECORDER_PUSH_ERROR: 推流失败,原因:网络较差,编码出错,推流崩溃,第一针数据发送失败...等等各种原因导致
      RECORDER_PUSH_STOP_SUCCESS: 成功的关闭了底层推流,可以进行下次推流了:保证推流成功关闭
      乐视云直播独有状态:
      LIVE_STATE_END_ERROR: 直播已结束
      LIVE_STATE_CANCEL_ERROR: 直播已取消
      LIVE_STATE_NEED_RECORD: 直播开启转点播功能
      LIVE_STATE_NOT_STARTED_ERROR: 直播时间未到
      LIVE_STATE_OTHER_ERROR: 其他直播错误
      LIVE_STATE_PUSH_COMPLETE: 推流完成
      LIVE_STATE_TIME_REMAINING: 直播剩余时间:在剩余5分钟和30分钟时都会回调
    2. iOS的取值范围:(乐视云直播、移动直播都有)
      LCStreamingSessionStateNone:直播的默认状态
      LCStreamingSessionStatePreviewStarted: 初始化成功,准备开始直播
      LCStreamingSessionStateStarting: 正在开始直播
      LCStreamingSessionStateStarted: 已经开始直播
      LCStreamingSessionStateEnded: 暂停直播
      LCStreamingSessionStateError: 直播出错,请检查参数或者时间

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

getLiveMachinesInfo

获取乐视云直播机位信息,用于乐视云直播。乐视云直播一个活动ID可以对应多个推流地址。最常规的用法就是在发布会上通过4个角落一起推流。然后用户选择其中一个点进行观看,在观看过程也可以切换到其他点。但是对于推流而言,一个设备只能在其中一个点进行推流。这一个点我们称呼为一个机位。

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

params

activityId:

  • 类型:字符串
  • 描述:(必填项)活动Id;用户开通乐视云直播功能,需要在乐视云官网登录账号后到用户中心创建活动,创建活动后即可拿到活动Id。

callback(ret, err)

ret:

  • 类型:JSON对象
  • 描述:返回是否获取成功,如成功则返回机位信息,如下所示,err中无内容;如不成功ret中status为0,无data字段返回,err中有msg字段,详见err说明。该方法为耗时方法。
  • 内部字段:
{
    "status": 1,//是否获取成功,1(成功)或 0(失败)
    "data": [
        {
            "machine": 1,//数字型,机位Id,注意machine是从1开始
            "status": 0,//整型,机位状态。0:空闲状态 1:正在直播
            "liveId": "201609253000001d8",//直播Id,机位的唯一对应的标识
            "streamId": "201609253000001d899",//直播流Id
            "pushUrl": "rtmp://w.gslb.lecloud.com/live/201609253000001d899?sign=18b5ef1fa337b30e724c3c9aefd72a2a&tm=20170120142423"//直播URL
        }
    ]
}

err:

  • 类型:JSON对象
  • 描述:获取失败时返回错误信息。
  • 内部字段:
{
    "msg": "请先初始化直播" //错误消息说明
}

示例代码

var leShiLive = api.require('leShiLive');
leShiLive.getLiveMachinesInfo({
    activityId:'A2016092500000x0'
},function(ret,err){
    alert(JSON.stringify(ret)+"  "+ JSON.stringify(err));
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

startCloudLive

开始乐视云直播。

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

params

machineid:

  • 类型:数字型
  • 描述:(必填项)机位Id。传入getLiveMachinesInfo获取到的machine参数,注意machineid是从1开始,而不是0.

callback(ret, err)

ret:

  • 类型:JSON对象
  • 描述:返回是否调用了开始乐视云直播方法。此处的返回只是返回是否调用了SDK中开始乐视云直播的方法。要判断是否开始乐视云直播成功,开发者需要自己实现onPublish(status,msg)方法(js方法)。详见以上的onPublish方法说明
  • 内部字段:
{
    "status": 1  //1:调用了开始乐视云直播方法;否则为0
}

err:

  • 类型:JSON对象
  • 描述:返回调用的错误信息。
  • 内部字段:
{
    "msg": "请先初始化直播" //错误消息说明,ret中status为0时有该字段
}

示例代码

var leShiLive = api.require('leShiLive');
leShiLive.startCloudLive({
    machineid:1
},function(ret,err){
    alert(JSON.stringify(ret)+"  "+ JSON.stringify(err));
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

pauseLive

暂停直播。暂停移动直播或乐视云直播。暂停后,如果要重新开始直播,移动直播再次调用startPushWithUrl方法即可,乐视云直播依次调用getLiveMachinesInfo、startCloudLive即可。无需再次初始化直播。

pauseLive(callback(ret, err))

callback(ret, err)

ret:

  • 类型:JSON对象
  • 描述:是否暂停成功
  • 内部字段:
{
    "status": 1 //1(成功)或 0(失败)
}

err:

  • 类型:JSON对象
  • 描述:返回错误信息。
  • 内部字段:
{
    "msg": "请先初始化直播" //错误消息说明,ret中status为0时有该字段
}

示例代码

var leShiLive = api.require('leShiLive');
leShiLive.pauseLive(function(ret,err){
    alert(JSON.stringify(ret)+"  "+ JSON.stringify(err));
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

stopLive

停止直播。停止移动直播或乐视云直播。停止直播后,需要再次调用初始化直播方法才能开始下一次直播,一般在关闭直播页面后调用该方法。

stopLive(callback(ret, err))

callback(ret, err)

ret:

  • 类型:JSON对象
  • 描述:是否停止成功
  • 内部字段:
{
    "status": 1 //1(成功)或 0(失败)
}

err:

  • 类型:JSON对象
  • 描述:返回错误信息。
  • 内部字段:
{
    "msg": "请先初始化直播" //错误消息说明,ret中status为0时有该字段
}

示例代码

var leShiLive = api.require('leShiLive');
leShiLive.stopLive(function(ret,err){
    alert(JSON.stringify(ret)+"  "+ JSON.stringify(err));
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

setFilter

设置滤镜。开始直播后调用,移动直播和乐视云直播都可设置滤镜

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

params

filter:

  • 类型:数字型
  • 描述:(必填项)滤镜效果。
    取值范围:
    0: 不使用滤镜
    1: 美颜效果
    2: 温暖效果
    3: 平静效果
    4: 浪漫效果

callback(ret, err)

ret:

  • 类型:JSON对象
  • 描述:设置滤镜是否成功
  • 内部字段:
{
    "status": 1 //1(成功)或 0(失败)
}

err:

  • 类型:JSON对象
  • 描述:返回错误信息。
  • 内部字段:
{
    "msg": "请先初始化直播" //错误消息说明,ret中status为0时有该字段
}

示例代码

var leShiLive = api.require('leShiLive');
leShiLive.setFilter({
        filter:1
    },function(ret,err){
    alert(JSON.stringify(ret)+"  "+ JSON.stringify(err));
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

setCamare

切换摄像头。开始直播后调用,移动直播和乐视云直播都可切换摄像头,需要注意,切换摄像头不能太频繁,如果太频繁会导致应用程序崩溃。建议最快10秒一次。

setCamare(callback(ret, err))

callback(ret, err)

ret:

  • 类型:JSON对象
  • 描述:切换摄像头是否成功
  • 内部字段:
{
    "status": 1 //1(成功)或 0(失败)
}

err:

  • 类型:JSON对象
  • 描述:返回错误信息。
  • 内部字段:
{
    "msg": "请先初始化直播" //错误消息说明,ret中status为0时有该字段
}

示例代码

var leShiLive = api.require('leShiLive');
leShiLive.setCamare(function(ret,err){
    alert(JSON.stringify(ret)+"  "+ JSON.stringify(err));
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

setTorchOpenState

设置闪光灯开关。开始直播后调用,移动直播和乐视云直播都可设置闪光灯开关,但是注意当前置摄像头打开时不能打开闪光灯。

setTorchOpenState(callback(ret, err))

callback(ret, err)

ret:

  • 类型:JSON对象
  • 描述:设置是否成功
  • 内部字段:
{
    "status": 1 //1(成功)或 0(失败)
}

err:

  • 类型:JSON对象
  • 描述:返回错误信息。
  • 内部字段:
{
    "msg": "请先初始化直播" //错误消息说明,ret中status为0时有该字段
                          //打开前置摄像头时,如进行打开闪光灯操作,该字段返回:已打开前置摄像头,不能操作闪关灯
}

示例代码

var leShiLive = api.require('leShiLive');
leShiLive.setTorchOpenState(function(ret,err){
    alert(JSON.stringify(ret)+"  "+ JSON.stringify(err));
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

setMute

设置静音。开始直播后调用,移动直播和乐视云直播都可设置静音。

setMute(callback(ret, err))

callback(ret, err)

ret:

  • 类型:JSON对象
  • 描述:设置是否成功
  • 内部字段:
{
    "status": 1 //1(成功)或 0(失败)
}

err:

  • 类型:JSON对象
  • 描述:返回错误信息。
  • 内部字段:
{
    "msg":"请先初始化直播" //错误消息说明,ret中status为0时有该字段                      
}

示例代码

var leShiLive = api.require('leShiLive');
leShiLive.setMute(function(ret,err){
    alert(JSON.stringify(ret)+"  "+ JSON.stringify(err));
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本