简述
插件封装了腾讯的直播视频播放器。直播(LIVE)的视频源是主播实时推送的。因此,主播停止推送后,播放端的画面也会随即停止,而且由于是实时直播,所以播放器在播直播 URL 的时候是没有进度条的。
通常使用的直播协议如下,App 端推荐使用 FLV 协议的直播地址(以“http”打头,以“.flv”结尾):
关于AVM方式
本插件支持 AVM 方式打开。通过 AVM 标签方式打开的插件,在 js 代码中需要通过 document.getElementById 的形式获取该插件实例对象然后进行其它逻辑的操作。否则会产生莫名其妙的问题。
该插件同时也支持 api.require 方式调用,通过 configView 接口相当于 AVM 的标签打开了一个视频播放区域的 frame(view)插件,用户点击全屏按钮后,插件自动代码一个 window 来全屏播放视频。
关于后台播放功能
如需支持后台播放功能请参考 config.xml 配置说明文档里关于 BackgroundMode 的配置
配置实例如下:
<preference name="backgroundMode" value="audio"/>
注意:iOS端1.0.3版(原生SDK 10.1版本)本开始增加授权校验,详情参考腾讯文档
设置验证
setLicence({params})
licenceURL:
licenceKey:
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.setLicence({
licenceURL:'',
licenceKey:''
})
iOS 系统
可提供的 1.0.3 及更高版本
配置直播播放器视图。
注意:本接口仅支持引擎2.0方式调用。引擎3.0上可直接通过 mo-txliveplayer 标签配置使用播放器。
configPlayerView({params})
rect:
{
x: 0, //(可选项)数字类型;插件左上角的 x 坐标(相对于所属的 Window 或 Frame);默认值:0
y: 0, //(可选项)数字类型;插件左上角的 y 坐标(相对于所属的 Window 或 Frame);默认值:0
w:300, //(可选项)数字类型;插件宽度(相对于所属的 Window 或 Frame;默认:100%
h:600 //(可选项)数字类型;插件高度(相对于所属的 Window 或 Frame;默认:100%
}
fixedOn:
fixed:
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.configPlayerView({
rect:{
x:,
y:,
w:,
h:
},
fixedOn:'',
fixed:false
})
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
重设播放器位置和大小
注意:本接口仅对 configPlayerView 打开的播放器有效
resizePlayerView({params})
rect:
{
x: 0, //(可选项)数字类型;插件左上角的 x 坐标(相对于所属的 Window 或 Frame);默认值:原x坐标
y: 0, //(可选项)数字类型;插件左上角的 y 坐标(相对于所属的 Window 或 Frame);默认值:原y坐标
w:300, //(可选项)数字类型;插件宽度(相对于所属的 Window 或 Frame;默认:原宽度
h:600 //(可选项)数字类型;插件高度(相对于所属的 Window 或 Frame;默认:原高度
}
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.resizePlayerView({
rect:{
x:,
y:,
w:,
h:
}
})
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
隐藏播放试图的 frame
hidePlayerView()
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.hidePlayerView()
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
恢复显示播放试图的 frame
showPlayerView()
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.showPlayerView()
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
初始化播放器
initPlayer()
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.initPlayer()
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
关闭播放器
closePlayer()
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.closePlayer()
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
播放自定义视频
playWithUrl({params})
videoURL:
type:
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.playWithUrl({
type:'rtmp',
videoURL:'http://af1fb2ef33ba36ebbfad.qiniucdn.apicloud-system.com/apicloud/1b99aa5822f858abd1da8b2bb8332055.MP4'
})
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
开启硬件加速,播放前设置有效。
enableHWAcceleration({params})
HWAcceleration:
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.enableHWAcceleration({
HWAcceleration: true
})
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
播放配置
setPlayConfig({params})
cacheTime:
bAutoAdjustCacheTime:
maxAutoAdjustCacheTime:
minAutoAdjustCacheTime:
videoBlockThreshold:
connectRetryCount:
connectRetryInterval:
enableAEC:
enableMessage:
enableMetaData:
flvSessionKey:
HTTP 响应头中除了“content-length”、“content-type”等标准字段,不同云服务商还可能会添加一些非标准字段。
比如腾讯云会在直播 CDN 的 HTTP-FLV 格式的直播流中增加 “X-Tlive-SpanId” 响应头,并在其中设置一个随机字符串,用来唯一标识一次直播。
如果您在使用腾讯云的直播 CDN,可以设置 flvSessionKey 为 @“X-Tlive-SpanId”,SDK 会在 HTTP 响应头里解析这个字段,并通过 TXLivePlayListener 中的 onPlayEvent(EVT_PLAY_GET_FLVSESSIONKEY) 事件通知给您的 App。
【特别说明】每条音视频流中只能解析一个 flvSessionKey,除非断网重连,否则 EVT_PLAY_GET_FLVSESSIONKEY 只会抛送一次。
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.setPlayConfig({
cacheTime: 5,
bAutoAdjustCacheTime:true,
maxAutoAdjustCacheTime:5,
flvSessionKey:'X-Tlive-SpanId'
})
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
停止播放音视频流
stopPlay()
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.stopPlay()
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
isPlaying()
是否正在播放
ret:
{
isPlaying:, //布尔类型;是否正在播放
}
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.isPlaying(function(ret){
api.alert({msg: JSON.stringify(ret)});
});
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
暂停播放
pause()
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.pause()
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
恢复播放
resume()
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.resume()
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
设置视频旋转角度
setRenderRotation({params})
orientation:
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.setRenderRotation({
orientation:
})
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
设置视频显示模式
setRenderMode({params})
mode:
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.setRenderMode({
mode:
})
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
获取截图
snapshot(callback(ret))
ret:
{
status:, //布尔类型;是否获取成功
path: //字符串类型;截图路径
}
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.snapshot(function(ret){
api.alert({msg: JSON.stringify(ret)});
});
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本,注意Android只支持推流过程中本地截图。
设置是否开启静音,播放前设置有效。
setMute({params})
enable:
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.setMute({
enable: true
})
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
设置音量
setVolume({params})
volume:
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.setVolume({
volume: 1
})
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
设置声音播放模式(切换扬声器,听筒)
setAudioRoute({params})
audioRoute:
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.setAudioRoute({
audioRoute:'speaker'
})
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
监听音量大小变化
setAudioVolumeEvaluationListener(callback(ret))
ret:
{
volume: //数字类型; 当前音量大小
}
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.setAudioVolumeEvaluationListener(function(ret){
api.alert({msg: JSON.stringify(ret)});
});
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
设置播放开始时间,在 playWithUrl 前设置,修改开始播放的起始位置
enableAudioVolumeEvaluation({params})
interval:
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.enableAudioVolumeEvaluation({
interval: 300
})
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
addEventListener(callback(ret))
添加直播事件监听
ret:
{
evtID: '', //字符串类型;回调事件类型,详情参见本页附录 TXLiveAVEvent
evtMsg:, //字符串类型;事件描述
evtTime:'', //字符串类型;事件发生的UTC毫秒时间戳
evtBlockTime:, //字符串类型;卡顿时间(毫秒)
evtParam1:'', //字符串类型;事件参数1
evtParam2:'', //字符串类型;事件参数2
evtPlayProgress:, //字符串类型;视频播放进度
evtPlayDuration:'', //字符串类型;视频总时长
evtPlayableDuration:,//字符串类型;视频可播放时长
evtPlayCoverUrl:'', //字符串类型;视频封面
evtPlayUrl:'', //字符串类型;视频播放地址
evtPlayName:'', //字符串类型;视频名称
evtPlayDescription:'',//字符串类型;视频简介
}
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.addEventListener(function(ret){
api.alert({msg: JSON.stringify(ret)});
});
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
添加网络事件监听
addNetStatusListener(callback(ret))
ret:
{
cpuUsage: '', //字符串类型; 进程 CPU 占用率
cpuUsageD:, //字符串类型;系统 CPU 占用率
videoWidth:'', //字符串类型;视频分辨率宽度
videoHeight:, //字符串类型;视频分辨率高度
videoFPS:'', //字符串类型;视频帧率:也就是视频编码器每秒生产了多少帧画面。
videoGop:'', //字符串类型;关键帧间隔:即每两个关键帧(I帧)间隔时长,单位:秒
videoBitrate:, //字符串类型;视频码率:即视频编码器每秒生产了多少视频数据,单位:kbps。
audioBitrate:'', //字符串类型;音频码率:即音频编码器每秒生产了多少音频数据,单位:kbps。
netSpeed:, //字符串类型;传输速度:即每秒钟发送或接收了多少字节的数据。
videoCache:'', //字符串类型;播放端缓冲的视频总时长。
audioCache:'', //字符串类型;播放端缓冲的音频总时长。
audioInfo:'', //字符串类型;音频信息:包括采样率信息和声道数信息
netJitter:'', //字符串类型;网络抖动:数值越大表示抖动越大,网络越不稳定
netQuality:'', //字符串类型;网络质量:0:未定义 1:最好 2:好 3:一般 4:差 5:很差 6:不可用
}
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.addNetStatusListener(function(ret){
api.alert({msg: JSON.stringify(ret)});
});
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
直播时移准备,拉取该直播流的起始播放时间。使用时移功能需在播放开始后调用此方法,否则时移失败。
该接口已废弃,用playWithUrl实现时移
prepareLiveSeek({params})
domain:
bizId:
ret:
{
state: //数字类型; 0:OK;-1:无播放地址;-2:appId 未配置
}
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.prepareLiveSeek({
domain:'',
bizId:4563
})
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
停止时移播放,返回直播
resumeLive(callback(ret))
ret:
{
state: //数字类型;0:成功;其它:失败
}
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.resumeLive(function(ret){
api.alert({msg: JSON.stringify(ret)});
});
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
播放跳转到音视频流某个时间
该接口已废弃
seek({params},callback(ret))
toTime:
ret:
{
state: //数字类型;0:成功;其它:失败
}
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.seek({
toTime:
},function(ret){
api.alert({msg: JSON.stringify(ret)});
});
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
设置播放速率。
该接口已废弃
setRate({params},callback(ret))
rate:
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.setRate({
rate:
});
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
设置状态浮层
setLogViewMargin({params},callback(ret))(仅IOS支持)
edgeMargin:
{
top:, //数字类型;上边距
left:, //数字类型;左边距
bottom:, //数字类型;下边距
right: //数字类型;右边距
}
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.setLogViewMargin({
edgeMargin:{
top:,
left:,
bottom:,
right:
}
});
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
是否显示播放状态统计及事件消息浮层
showVideoDebugLog({params}) (仅IOS支持)
showLog:
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.showVideoDebugLog({
showLog:
},function(ret){
api.alert({msg: JSON.stringify(ret)});
});
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
直播无缝切换
switchStream({params},callback(ret))
playUrl:
ret:
{
state: //数字类型;0:成功;其它:失败
}
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.switchStream({
playUrl:
},function(ret){
api.alert({msg: JSON.stringify(ret)});
});
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
addRecordListener(callback(ret))
添加录制视频事件监听
ret:
{
eventType: '', //字符串类型;交互事件类型;取值范围:
//progress:正在进行录制
//complete:完成
milliSecond: //数字类型;录制时间,仅当 eventType 为 progress 时有值
result:{ //JSON对象;,仅当 eventType 为 complete 时有值
retCode:, //数字类型;状态码
descMsg:'', //字符串类型;状态信息
videoPath:'' //字符串类型;视频路径
}
}
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.addRecordListener(function(ret){
api.alert({msg: JSON.stringify(ret)});
});
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
开始录制
startRecord(callback(ret))
ret:
{
state: //数字类型;0:成功;其它:失败
}
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.startRecord(function(ret){
api.alert({msg: JSON.stringify(ret)});
});
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本 ,注意:Android目前只支持录制直播流
停止录制
stopRecord({params},callback(ret))
ret:
{
state: //数字类型;0:成功;其它:失败
}
var TXLivePlayer = api.require('TXLivePlayer');
TXLivePlayer.stopRecord(function(ret){
api.alert({msg: JSON.stringify(ret)});
});
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
EVT_RTMP_PUSH_CONNECT_SUCC = 1001, ///< 直播,已经连接 RTMP 推流服务器 EVT_RTMP_PUSH_BEGIN = 1002, ///< 直播,已经与 RTMP 服务器握手完毕,开始推流 EVT_CAMERA_START_SUCC = 1003, ///< 打开摄像头成功 EVT_SCREEN_CAPTURE_SUCC = 1004, ///< 录屏启动成功 EVT_UP_CHANGE_RESOLUTION = 1005, ///< 上行动态调整分辨率 EVT_UP_CHANGE_BITRATE = 1006, ///< 码率动态调整 EVT_FIRST_FRAME_AVAILABLE = 1007, ///< 首帧画面采集完成 EVT_START_VIDEO_ENCODER = 1008, ///< 编码器启动成功 EVT_SNAPSHOT_COMPLETE = 1022, ///< 一帧截图完成 EVT_CAMERA_REMOVED = 1023, ///< 摄像头设备已被移出(Windows 和 Mac 版 SDK 使用) EVT_CAMERA_AVAILABLE = 1024, ///< 摄像头设备重新可用(Windows 和 Mac 版 SDK 使用) EVT_CAMERA_CLOSE = 1025, ///< 关闭摄像头完成(Windows 和 Mac 版 SDK 使用) EVT_RTMP_PUSH_PUBLISH_START = 1026, ///< 直播,与 RTMP 服务器连接后,收到 NetStream.Publish.Start 消息,表明流发布成功(SDK 内部事件,不会对外抛出) EVT_HW_ENCODER_START_SUCC = 1027, ///< 硬编码器启动成功 EVT_SW_ENCODER_START_SUCC = 1028, ///< 软编码器启动成功 EVT_LOCAL_RECORD_RESULT = 1029, ///< 本地录制结果 EVT_LOCAL_RECORD_PROGRESS = 1030, ///< 本地录制状态通知
EVT_PLAY_LIVE_STREAM_CONNECT_SUCC = 2001, ///< 直播,已经连接 RTMP 拉流服务器
EVT_PLAY_LIVE_STREAM_BEGIN = 2002, ///< 直播,已经与 RTMP 服务器握手完毕,开始拉流
EVT_RENDER_FIRST_I_FRAME = 2003, ///< 渲染首个视频数据包(IDR)
EVT_VIDEO_PLAY_BEGIN = 2004, ///< 视频播放开始
EVT_VIDEO_PLAY_PROGRESS = 2005, ///< 视频播放进度
EVT_VIDEO_PLAY_END = 2006, ///< 视频播放结束
EVT_VIDEO_PLAY_LOADING = 2007, ///< 视频播放 loading
EVT_START_VIDEO_DECODER = 2008, ///< 解码器启动
EVT_DOWN_CHANGE_RESOLUTION = 2009, ///< 下行视频分辨率改变
EVT_GET_VODFILE_MEDIAINFO_SUCC = 2010, ///< 点播,获取点播文件信息成功
EVT_VIDEO_CHANGE_ROTATION = 2011, ///< 视频旋转角度发生改变
EVT_PLAY_GET_MESSAGE = 2012, ///< 消息事件
EVT_VOD_PLAY_PREPARED = 2013, ///< 点播,视频加载完毕
EVT_VOD_PLAY_LOADING_END = 2014, ///< 点播,loading 结束
EVT_PLAY_LIVE_STREAM_SWITCH_SUCC = 2015, ///< 直播,切流成功(切流可以播放不同画面大小的视频)
EVT_VOD_PLAY_TCP_CONNECT_SUCC = 2016, ///< 点播,TCP 连接成功(SDK 内部事件,不会对外抛出)
EVT_VOD_PLAY_FIRST_VIDEO_PACKET = 2017, ///< 点播,收到首帧数据(SDK 内部事件,不会对外抛出)
EVT_VOD_PLAY_DNS_RESOLVED = 2018, ///< 点播,DNS 解析完成(SDK 内部事件,不会对外抛出)
EVT_VOD_PLAY_SEEK_COMPLETE = 2019, ///< 点播,视频播放 Seek 完成(SDK 内部事件,不会对外抛出)
EVT_VIDEO_DECODER_CACHE_TOO_MANY_FRAMES = 2020, ///< 视频解码器缓存帧数过多,超过40帧(SDK 内部事件,不会对外抛出)
EVT_HW_DECODER_START_SUCC = 2021, ///< 硬解码器启动成功(SDK 内部事件,不会对外抛出)
EVT_SW_DECODER_START_SUCC = 2022, ///< 软解码器启动成功(SDK 内部事件,不会对外抛出)
EVT_AUDIO_JITTER_STATE_FIRST_LOADING = 2023, ///< 音频首次加载(SDK 内部事件,不会对外抛出)
EVT_AUDIO_JITTER_STATE_LOADING = 2024, ///< 音频正在加载(SDK 内部事件,不会对外抛出)
EVT_AUDIO_JITTER_STATE_PLAYING = 2025, ///< 音频正在播放(SDK 内部事件,不会对外抛出)
EVT_AUDIO_JITTER_STATE_FIRST_PLAY = 2026, ///< 音频首次播放(SDK 内部事件,不会对外抛出)
EVT_MIC_START_SUCC = 2027, ///< 麦克风启动成功
EVT_PLAY_GET_METADATA = 2028, ///< 视频流MetaData事件
EVT_MIC_RELEASE_SUCC = 2029, ///< 释放麦克风占用
EVT_AUDIO_DEVICE_ROUTE_CHANGED = 2030, ///< 音频设备的route发生改变,即当前的输入输出设备发生改变,比如耳机被拔出
EVT_PLAY_GET_FLVSESSIONKEY = 2031, ///< TXLivePlayer 接收到http响应头中的 flvSessionKey 信息
EVT_ROOM_ENTER = 1018, ///< 进入房间成功
EVT_ROOM_EXIT = 1019, ///< 退出房间
EVT_ROOM_USERLIST = 1020, ///< 下发房间成员列表(不包括自己)
EVT_ROOM_NEED_REENTER = 1021, ///< WiFi 切换到4G 会触发断线重连,此时需要重新进入房间(拉取最优的服务器地址)
EVT_ROOM_ENTER_FAILED = 1022, ///< 自己进入房间失败
EVT_ROOM_USER_ENTER = 1031, ///< 进房通知
EVT_ROOM_USER_EXIT = 1032, ///< 退房通知
EVT_ROOM_USER_VIDEO_STATE = 1033, ///< 视频状态位变化通知
EVT_ROOM_USER_AUDIO_STATE = 1034, ///< 音频状态位变化通知
EVT_ROOM_REQUEST_IP_SUCC = 8001, ///< 拉取接口机服务器地址成功
EVT_ROOM_CONNECT_SUCC = 8002, ///< 连接接口机服务器成功
EVT_ROOM_REQUEST_AVSEAT_SUCC = 8003, ///< 请求视频位成功