阿里云直播Web

官方文档:Web播放器SDK常见问题_视频点播(VOD)-阿里云帮助中心

bug:播流的不稳定,直播总会进入 onM3u8Retry 监听,用户端就会黑屏,(但其实并没有关播,正常关播进入的是pause这个监听)目前没有解决。想到的方案是一旦进入这个监听,就强制重刷页面,再次获取直播详情,但还没有具体实施。

html 复制代码
<!-- index.html需要引入的直播文件 -->
<link rel="stylesheet" href="https://g.alicdn.com/apsara-media-box/imp-web-player/2.26.0/skins/default/aliplayer-min.css" />
<script type="text/javascript" charset="utf-8" src="https://g.alicdn.com/apsara-media-box/imp-web-player/2.26.0/aliplayer-min.js"></script>
<!-- 微信浏览器自动播放 -->
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
html 复制代码
<div
 class="firstContent"
 :style="{ height: innerHeight }"
 >
  <div class="prism-player" id="player-con" style="height: 100%"></div>
</div>
javascript 复制代码
let player = ref("");
// 判断安卓端 ios端
let isAndroid = ref(false);
let isIOS = ref(false);
// 这个方法在获取直播详情的接口中 如果正在直播 并且有播流的情况下调用并赋值
function checkPlatform(iosLiveUrl, AndroidLiveUrl) {
  const userAgent = navigator.userAgent || navigator.vendor || window.opera;
  if (
    userAgent.match(/iPad/i) ||
    userAgent.match(/iPhone/i) ||
    userAgent.match(/iPod/i)
  ) {
    isIOS.value = true;
    var ua = window.navigator.userAgent.toLowerCase();
    if (ua.match(/micromessenger/i) == "micromessenger") {
      // 微信浏览器环境(实现在微信浏览器自动播放)
      wx.config({
        // 配置信息, 即使不正确也能使用 wx.ready
        debug: false, //false代表关闭调试模式,true代表开启调试模式
        appId: "", //appId
        timestamp: 1, //生成签名的时间戳
        nonceStr: "", //生成签名的随机串
        signature: "", //签名
        jsApiList: [], //需要使用的JS接口列表
      });
      wx.ready(function () {
        // 在此处初始化播放器
        liveStart(iosLiveUrl);
      });
    } else {
      liveStart(iosLiveUrl);
    }
  } else if (userAgent.match(/Android/i)) {
    isAndroid.value = true;
    liveStart(AndroidLiveUrl);
  } else {
    // PC端
    liveStart(iosLiveUrl);
  }
}
// 播流URL
function liveStart(liveFlvUrl) {
  player.value = new Aliplayer(
    {
      id: "player-con",
      source: liveFlvUrl,
      width: "100%",
      height: "56vw",
      // autoplay: true, // 延迟播放
      isLive: true,
      rePlay: false,
      playsinline: true,
      preload: true,
      enableStashBufferForFlv: true,
      stashInitialSizeForFlv: 32,
      controlBarVisibility: "hover",
      useH5Prism: true,
      x5LandscapeAsFullScreen: false,
      enableWorker: false,
      mute: false,
      skinLayout: [
        { name: "bigPlayButton", align: "cc" }, // 大播放按钮位置调整
        { name: "infoDisplay", align: "brabs", x: -100, y: -100 }, // "设置为静音"位置调整
      ],
      skinLayoutIgnore: [
        "infoDisplay", // 隐藏"设置为静音"信息提示内容
      ],
    },
    function (player) {
      //初始化后,手动对视频进行静音处理(这样设置之后,按音量键也依旧是静音)
      // player.mute();
      // 这种对直播没效果
      // player.setVolume(0.5);
      // 监听播放
      player.on("play", function () {
        console.log("视频开始播放");
      });

      // 监听暂停
      player.on("pause", function () {
        console.log("视频暂停");
        // 这个方法是获取直播详情 如果直播结束 详情接口会返回liveStatus == 2 后面就是具体公司业务处理了
        getLiveDetail();
      });

      player.on("onM3u8Retry", function () {
        // 总是会莫名其妙到这步 直播没有结束 但是用户看到的是黑屏 刷新页面和重新进入直播间可以解决
        // 这里我想到的方案是页面强制刷新 没有尝试过 可以试下
        console.log("主播暂时离开,请稍后......");
        // 这个方法是获取直播详情
        getLiveDetail();
      });

      // 监听结束
      player.on("ended", function () {
        console.log("视频播放结束");
      });

      // 监听加载中
      player.on("waiting", function () {
        console.log("视频加载中");
      });

      // 监听播放错误
      player.on("error", function (e) {
        console.log("视频播放出错");
      });
    }
  );
}
相关推荐
森叶4 分钟前
Electron 主进程中使用Worker来创建不同间隔的定时器实现过程
前端·javascript·electron
霸王蟹13 分钟前
React 19 中的useRef得到了进一步加强。
前端·javascript·笔记·学习·react.js·ts
霸王蟹13 分钟前
React 19版本refs也支持清理函数了。
前端·javascript·笔记·react.js·前端框架·ts
繁依Fanyi18 分钟前
ColorAid —— 一个面向设计师的色盲模拟工具开发记
开发语言·前端·vue.js·编辑器·codebuddy首席试玩官
codelxy21 分钟前
vue引用cesium,解决“Not allowed to load local resource”报错
javascript·vue.js
程序猿阿伟1 小时前
《社交应用动态表情:RN与Flutter实战解码》
javascript·flutter·react native
明似水1 小时前
Flutter 开发入门:从一个简单的计数器应用开始
前端·javascript·flutter
沐土Arvin1 小时前
前端图片上传组件实战:从动态销毁Input到全屏预览的全功能实现
开发语言·前端·javascript
Zww08912 小时前
el-dialog鼠标在遮罩层松开会意外关闭,教程图文并茂
javascript·vue.js·计算机外设
爱编程的鱼2 小时前
C#接口(Interface)全方位讲解:定义、特性、应用与实践
java·前端·c#