<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<link rel="stylesheet" href="./plyr/plyr.css"/>
<style>
    * {
        margin: 0;
        padding: 0;
    }

    .plyr {
        --plyr-control-icon-size: 5vmin;
        --plyr-font-size-time: 4.5vmin;

        .plyr__time + .plyr__time {
            display: block !important;
        }
    }

    #player {
        width: 100%;
        height: 100%;
    }
</style>
<body>
<div>
    <video id="player" playsinline controls data-poster="" style="width: 100vw">
        <source src="" type="video/mp4"/>
    </video>
</div>
</body>
<script src="./js/hybrid_html_uni.webview.1.5.5.js"></script>
<script src="./plyr/plyr.js"></script>
<script src="./hls/hls.js"></script>
<script>
  let player = null
  let hls = null
  let currentTimeTimer = null
  let isSeekEnd = false
  let src = ''
  let playTime = ''
  let poster = ''
  let isProgress = false

  function setCurrentTime(type) {
    currentTimeTimer && clearTimeout(currentTimeTimer);
    currentTimeTimer = setTimeout(() => {
      player.currentTime = playTime;
      // 如果初始没有设置上开始播放时间,递归调用直到设置上为止
      if (type === "ready" && !isSeekEnd && Math.abs(player.currentTime - playTime) > 2) {
        setCurrentTime(type);
      }
    }, 500);
  }

  function initVideo() {
    const video = document.querySelector("#player")
    video.setAttribute('data-poster', src)
    video.querySelector('source').setAttribute('src', poster)
      const controls = [
          "play-large",
          "play",
          "current-time",
          "duration",
          "mute",
          "volume",
          "captions",
          "fullscreen",
      ]
      isProgress === '1' && controls.splice(2, 0, 'progress')
      player = new Plyr(video, {
      type: "",
      autoplay: true,
      controls,
      seekTime: 0,
      ratio: "16:9",
      speed: {selected: 1, options: [1]},
    });
    hls = new Hls();
    hls.loadSource(src);
    hls.attachMedia(video);
    player.play();
    player.on("ready", () => {
      setCurrentTime("ready")
      document.title = JSON.stringify({
        eventName: 'ready',
        currentTime: player ? player.currentTime : ''
      })
    });
    player.on("seeking", () => {
      isSeekEnd = false;
      document.title = JSON.stringify({
        eventName: 'seeking',
        currentTime: player ? player.currentTime : ''
      })
    });
    player.on("seeked", () => {
      isSeekEnd = true;
      document.title = JSON.stringify({
        eventName: 'seeked',
        currentTime: player ? player.currentTime : ''
      })
    });
    player.on("play", () => {
      document.title = JSON.stringify({
        eventName: 'play',
        currentTime: player ? player.currentTime : ''
      })
    });
    player.on("pause", () => {
      document.title = JSON.stringify({
        eventName: 'pause',
        currentTime: player ? player.currentTime : ''
      })
    });
    player.on("ended", () => {
      document.title = JSON.stringify({
        eventName: 'ended',
        currentTime: player ? player.currentTime : ''
      })
    });
    player.on("timeupdate", () => {
      if (player.currentTime - playTime > 5) {
        playTime = player.currentTime;
        document.title = JSON.stringify({
          eventName: 'timeupdate',
          currentTime: player ? player.currentTime : ''
        })
      }
    });
  }

  document.addEventListener('UniAppJSBridgeReady', function () {
    const data = plus.webview.getWebviewById("video")
    src = data.src
    poster = data.poster
    playTime = +data.playTime
      isProgress = data.isProgress
    initVideo()
  });

  function htmlMessage(event) {
    if (player) {
      switch (event) {
        case 'fullscreen.exit':
          player.fullscreen.active && player.fullscreen.exit()
          break
        default:
          player[event]()
          break
      }
    }
  }
</script>
</html>