155 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			HTML
		
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			HTML
		
	
	
| <!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 = ''
 | |
| 
 | |
|   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)
 | |
|     player = new Plyr(video, {
 | |
|       type: "",
 | |
|       autoplay: true,
 | |
|       controls: [
 | |
|         "play-large",
 | |
|         "play",
 | |
|         "current-time",
 | |
|         "duration",
 | |
|         "mute",
 | |
|         "volume",
 | |
|         "captions",
 | |
|         "fullscreen",
 | |
|       ],
 | |
|       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
 | |
|     initVideo()
 | |
|   });
 | |
| 
 | |
|   function htmlMessage(event) {
 | |
|     if (player) {
 | |
|       switch (event) {
 | |
|         case 'fullscreen.exit':
 | |
|           player.fullscreen.active && player.fullscreen.exit()
 | |
|           break
 | |
|         default:
 | |
|           player[event]()
 | |
|           break
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| </script>
 | |
| </html>
 |