leShiLive

initLive getLiveMachinesInfo pauseLive setFilter setTorchOpenState

概述

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

乐视云直播接入

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

1 申请乐视云账号并登录

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

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

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

leShiLive - 图1

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

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

leShiLive - 图2

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

leShiLive - 图3

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

模块使用攻略

在使用该模块前需要开发者先配置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
  • 配置示例:以下示例的值不可用,请开发者自行换为自己的值。
  1. <feature name="leShiLive">
  2. <param name="pushDomain" value="29586.mpush.live.lecloud.com"/>
  3. <param name="pullDomain" value="29586.mpull.live.lecloud.com"/>
  4. <param name="appKey" value="V5K67POCIJQSUF9U52LA"/>移动直播推流签名密钥
  5. <param name="secretKey" value="256g8419e7dhk554dhu5dwom84hkop6d5"/>乐视云直播推流用户私钥
  6. <param name="userId" value="951648"/>
  7. </feature>
  8. </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对象
  • 描述:返回是否生成地址成功,如成功则返回推流地址和播放地址
  • 内部字段:
  1. {
  2. status:1//数值型,1:生成成功,0:生成失败
  3. pushUrl:"rtmp://216.mpush.live.lecloud.com/live/leshitest?tm=20170120143801&sign=20f9bccb743418f2d16d94e3a67489a7",//推流地址,用于移动直播。status为1时有该字段
  4. playUrl: "rtmp://216.mpull.live.lecloud.com/live/leshitest?tm=20170120143801&sign=508a3020afb794b80289e6a7317a451f"//播放地址。status为1时有该字段
  5. }

示例代码

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

可用性

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即不在时间范围内不能直播成功。
  • 类型:字符串;

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对象
  • 描述:初始化是否成功
  • 内部字段:
  1. {
  2. status: 1 //整型;1(成功)||0(失败)
  3. }

示例代码

  1. var leShiLive = api.require('leShiLive');
  2. leShiLive.initLive({
  3. x : 0,
  4. y : 0,
  5. w : 320,
  6. h : 320,
  7. initType:"mobile",
  8. activityId:"A2016092500000x0",
  9. frameRate:24,
  10. bitrate:1000000,
  11. isBackCamare:true,
  12. fixedOn : api.frameName,
  13. fixed : false,
  14. previewWidth:320,
  15. previewHeight:320,
  16. isLandscape:false
  17. },function(ret,err){
  18. alert(JSON.stringify(ret)+" "+ JSON.stringify(err));
  19. });

可用性

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方法说明。
  • 内部字段:
  1. {
  2. status:1 //整型,1:调用了推流方法,0:调用推流方法失败
  3. }

err:

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

示例代码

  1. var leShiLive = api.require('leShiLive');
  2. leShiLive.generateURL({
  3. },function(ret,err){
  4. alert(JSON.stringify(ret)+" "+JSON.stringify(err));
  5. });
  6. function onPublish(status,msg){
  7. if(status == "RECORDER_OPEN_URL_SUCESS"){
  8. alert(msg);
  9. }else if(status == "RECORDER_OPEN_URL_FAILED"){
  10. alert(msg);
  11. }else if(status == "RECORDER_PUSH_FIRST_SIZE"){
  12. alert(msg);
  13. }else if(status == "RECORDER_PUSH_ERROR"){
  14. alert(msg);
  15. }
  16. }

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说明。该方法为耗时方法。
  • 内部字段:
  1. {
  2. "status": 1,//是否获取成功,1(成功)或 0(失败)
  3. "data": [
  4. {
  5. "machine": 1,//数字型,机位Id,注意machine是从1开始
  6. "status": 0,//整型,机位状态。0:空闲状态 1:正在直播
  7. "liveId": "201609253000001d8",//直播Id,机位的唯一对应的标识
  8. "streamId": "201609253000001d899",//直播流Id
  9. "pushUrl": "rtmp://w.gslb.lecloud.com/live/201609253000001d899?sign=18b5ef1fa337b30e724c3c9aefd72a2a&tm=20170120142423"//直播URL
  10. }
  11. ]
  12. }

err:

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

示例代码

可用性

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方法说明
  • 内部字段:
  1. "status": 1 //1:调用了开始乐视云直播方法;否则为0
  2. }

err:

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

示例代码

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

可用性

iOS系统,Android系统

pauseLive

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

pauseLive(callback(ret, err))

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var leShiLive = api.require('leShiLive');
  2. leShiLive.pauseLive(function(ret,err){
  3. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

stopLive

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

stopLive(callback(ret, err))

callback(ret, err)

ret:

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

err:

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

示例代码

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

iOS系统,Android系统

可提供的1.0.0及更高版本

setFilter

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

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

params

filter:

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

callback(ret, err)

ret:

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

err:

  • 类型:JSON对象
  • 描述:返回错误信息。
  • 内部字段:

示例代码

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

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

setCamare

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

setCamare(callback(ret, err))

callback(ret, err)

ret:

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

err:

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

示例代码

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

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

setTorchOpenState

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

setTorchOpenState(callback(ret, err))

callback(ret, err)

ret:

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

err:

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

示例代码

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

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

setMute

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

setMute(callback(ret, err))

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var leShiLive = api.require('leShiLive');
  2. leShiLive.setMute(function(ret,err){
  3. });

可用性

可提供的1.0.0及更高版本