美文网首页
React:音视频播放

React:音视频播放

作者: 精神病患者link常 | 来源:发表于2022-12-23 18:21 被阅读0次

    音频

    import { Button } from 'antd'
    import Head from 'next/head'
    import type { NextPage } from 'next'
    import Layout from '../components/Layout'
    import * as echarts from 'echarts';
    import { useEffect, useRef, useState } from 'react';
    import styled from 'styled-components';
    
    const musicUrl = 'https://music.163.com/song/media/outer/url?id=1349292048.mp3'
    const videoUrl = 'https://media.w3.org/2010/05/sintel/trailer.mp4'
    
    const Music:NextPage = (props:any)=> {
      const audioRef= useRef<any>()
      const [timer,setTimer] = useState('00:00')
      const [duration,setDuration] = useState('00:00')
    
      /**
       * 开始、暂停、倍速、当前播放时间、总时间、音量、播放进度
       */
      useEffect(()=>{
        audioRef.current.ontimeupdate = () => {
          const timer = (Math.floor(audioRef.current.currentTime / 60) + "").padStart(2,"0") + ':' +
          (Math.floor(audioRef.current.currentTime % 60) + "").padStart(2, "0")
          setTimer(timer)
        }
        const dura = (Math.floor(audioRef.current.duration / 60) + "").padStart(2,"0") + ':' +
        (Math.floor(audioRef.current.duration % 60) + "").padStart(2, "0")
        setDuration(dura)
    
      },[audioRef.current])
      return (
        <MainView>
          <audio ref={audioRef} src={musicUrl} controls onCanPlay={()=>{
            // 用户可以开始播放视频/音频时触发。
            console.log('onCanPlay');
          }} onCanPlayThrough={()=>{
            // 在视频/音频可以正常播放且无需停顿和缓冲时触发。
            console.log('onCanPlayThrough');
          }} onEnded={()=>{
            // 视频/音频播放结束时触发。
            console.log('onEnded');
          }} onWaiting={()=>{
            // 视频/音频由于要播放下一帧而需要缓冲时触发。
          }} onError={()=>{
            // 视频/音频数据加载期间发生错误时触发。
          }}/>
          <FlexView>
            <button onClick={()=>{
              audioRef.current.play()
            }}>开始</button>
            <button onClick={()=>{
              audioRef.current.pause()
            }}>暂停</button>
            <button onClick={()=>{
              audioRef.current.playbackRate = '2';
            }}>2倍播放</button>
            <button onClick={()=>{
              audioRef.current.playbackRate = '4';
            }}>4倍播放</button>
            <button>当前时间:{timer}</button>
            <button>总时间{duration}</button>
            <button onClick={()=>{
              audioRef.current.volume = 0.2
            }}>20音量</button>
            <button onClick={()=>{
              audioRef.current.volume = 0.5
            }}>50音量</button>
            <button onClick={()=>{
              audioRef.current.volume = 0.8
            }}>80音量</button>
            <button onClick={()=>{
              audioRef.current.currentTime = 62
            }}>进度:1分钟</button>
            <button onClick={()=>{
              audioRef.current.currentTime = 124
            }}>进度:2分钟</button>
          </FlexView>
        </MainView>
      )
    }
    const MainView = styled.div`
      flex-direction: column;
      justify-content: center;
      align-items: center;
      width: 100%;
      height: 100%;
      display: flex;
    `
    const FlexView = styled.div`
      flex-direction: row;
      justify-content: center;
      align-items: center;
      width: 100%;
      display: flex;
    `
    export default Music
    
    

    视频

    yarn add @types/video.js

    
    // https://videojs.com/guides/options/
    var options = {};
    
    var player = videojs('my-player', options, function onPlayerReady() {
      videojs.log('Your player is ready!');
    
      // In this context, `this` is the player that was created by Video.js.
      this.play();
    
      // How about an event listener?
      this.on('ended', function() {
        videojs.log('Awww...over so soon?!');
      });
    });
    
    
    <video
        id="my-player"
        class="video-js"
        controls
        preload="auto"
        poster="//vjs.zencdn.net/v/oceans.png"
        data-setup='{}'>
      <source src="//vjs.zencdn.net/v/oceans.mp4" type="video/mp4"></source>
      <source src="//vjs.zencdn.net/v/oceans.webm" type="video/webm"></source>
      <source src="//vjs.zencdn.net/v/oceans.ogv" type="video/ogg"></source>
      <p class="vjs-no-js">
        To view this video please enable JavaScript, and consider upgrading to a
        web browser that
        <a href="https://videojs.com/html5-video-support/" target="_blank">
          supports HTML5 video
        </a>
      </p>
    </video>
    

    OR

    import { Button } from 'antd'
    import Head from 'next/head'
    import type { NextPage } from 'next'
    import Layout from '../components/Layout'
    import * as echarts from 'echarts';
    import { useEffect, useRef, useState } from 'react';
    import styled from 'styled-components';
    
    const videoUrl = 'https://media.w3.org/2010/05/sintel/trailer.mp4'
    
    const Video:NextPage = (props:any)=> {
      const videoRef= useRef<any>()
      useEffect(()=>{
        if (videoRef.current){
          console.log('player=',videoRef.current);
        }
      },[videoRef])
      return (
        <MainView>
          <video
            ref={videoRef}
            controls
            preload="auto"
            // poster="MY_VIDEO_POSTER.jpg"
            data-setup="{}"
            style={{width:'100%',height:400,backgroundColor:'red'}}
            onCanPlay={()=>{
              // 用户可以开始播放视频/音频时触发。
              console.log('onCanPlay');
            }} onCanPlayThrough={()=>{
              // 在视频/音频可以正常播放且无需停顿和缓冲时触发。
              console.log('onCanPlayThrough');
            }} onEnded={()=>{
              // 视频/音频播放结束时触发。
              console.log('onEnded');
            }} onWaiting={()=>{
              // 视频/音频由于要播放下一帧而需要缓冲时触发。
            }} onError={()=>{
              // 视频/音频数据加载期间发生错误时触发。
            }}
          >
            <source src={videoUrl} type="video/mp4"></source>
            {/* <source src="//vjs.zencdn.net/v/oceans.webm" type="video/webm"></source>
            <source src="//vjs.zencdn.net/v/oceans.ogv" type="video/ogg"></source> */}
          </video>
        </MainView>
      )
    }
    const MainView = styled.div`
      flex-direction: column;
      justify-content: center;
      align-items: center;
      width: 100%;
      height: 100%;
      display: flex;
    `
    const FlexView = styled.div`
      flex-direction: row;
      justify-content: center;
      align-items: center;
      width: 100%;
      display: flex;
    `
    export default Video
    
    

    相关文章

      网友评论

          本文标题:React:音视频播放

          本文链接:https://www.haomeiwen.com/subject/wmnvqdtx.html