一、触发条件
1、从给定直播地址拉流 2、使用腾讯云的TcPlayer播放器 3、当网站允许flash时,如果给定的直播地址存在flv时,优先使用flash 4、播放器被隐藏
二、问题描述
使用腾讯云的TcPlayer从给定的直播地址拉流,在初始化播放器时,播放器支持设置一个listener方法,可以监听流是否拉取成功。
刚开始时是把播放器设置display:none,隐藏起来的,因为还要展示一个未开始播放的状态,拉到流之后才需要展示播放器。
此时(播放器被隐藏)如果有m3u8的流(采用h5的video播放),是没问题的,可以正常通过listener函数监听,但是播放flv时,flash就无法通过listener函数监听到流的状态,必须要把display:none干掉才行。
listener: function (msg) {
if(msg.type == 'error') {
console.log(msg, '播放报错');
_this.$emit('update-stream-state', 3);
// 可以尝试5次拉流
if (_this.player) {
timer = setTimeout(() => {
_this.player && _this.player.load();
console.log('重试拉流');
}, 5000);
setInterval(() => {
clearTimeout(timer);
}, 25000);
}
} else if (msg.type == 'play'){
// TODO
console.log(msg, '拉流成功');
// 清楚拉流的定时器
clearTimeout(timer);
_this.$emit('update-stream-state', 1);
}
}