easyplayer-pro播放器学习

发布于:2024-12-21 ⋅ 阅读:(256) ⋅ 点赞:(0)

背调

查询官方文档,EasyPlayer-pro支持ws-flv, http-flv, hls, webrtc(webrtc://xxx)格式,电子放大、水印(动态水印、幽灵水印)、显示上一个视频最后一帧、播放器快照截图、视频录制(WebM格式(音频+视频)、MP4格式(视频),FLV格式(音频+视频))、超时、断网重连、异常暂停播放等

属性配置 

属性 说明 类型 默认值
container

播放器容器

- -

decoder

wasm解码地址

String

-

isResize

是否拉伸

Boolean

true

loadingText

加载显示的文字

String

加载中

videoBuffer

设置最小缓冲时长,单位秒,播放器会自动消除延迟

Number

1

hasAudio

是否解析音频

Boolean

true

useMSE

MSE模式

Boolean

false

useWCS

WCS模式

Boolean

false

useSIMD

强制使用wasm模式

Boolean

false

background

视频封面图片

String

-

qualityConfig

配置清晰度

Array

['普清', '高清', '超清', '4K', '8K']

defaultStreamQuality

默认显示的清晰度,如果不设置,会显示第一个清晰度

String

-

isNotMute

是否渲染音频

Boolean

false

recordType

视频录制默认mp4格式

String

mp4, flv

playbackForwardMaxRateDecodeIFrame

录像倍数

Number

-

debug

控制台日志打印

Boolean

false

debugLevel

打印日志级别默认warn

String

debug, warn

调用方法和事件回调

方法/事件 说明
play 播放

playback

播放录像

pause

暂停播放

isPause

返回是否暂停中状态

setBufferTime

设置最大缓冲时长

setVolume

设置音量

getVolume

获取音量

exitFullscreen

退出全屏(取消全屏)播放视频

mute

静音

cancelMute

取消静音

isMute

返回是否静音

screenshot

获取快照

setFullscreen

全屏

setStreamQuality

设置分辨率,必须是qualityConfig里面的数据

forward

设置录像倍数

setPlaybackStartTime

设置录像跳转时间/s

getVideoInfo

获取视频信息

getAudioInfo

获取音频信息

destroy

关闭视频,释放底层资源

play

播放事件

pause

暂停事件

videoInfo

视频信息

audioInfo

音频信息

mute

音频事件

error

播放异常

kBps

当前网速,单位KB 每秒1次

recordEnd

录制结束的事件

recordStart

录制开始的事件

fullscreen

当前是否全屏

streamQualityChange

清晰度回调

playbackSeek

录像时间轴跳转回调

playbackPreRateChange

录像倍数的回调

currentPts

监听当前渲染帧的时间戳(流里面的)

应用

npm install easyplayerpro
import { createApp } from 'vue';
import App from './App.vue';
import EasyPlayerPro from 'easyplayerpro';

const app = createApp(App);

// 将 EasyPlayerPro 挂载到全局属性
app.config.globalProperties.$EasyPlayerPro = EasyPlayerPro;

app.mount('#app');
<template>
  <div class="container">
    <div class="row">
      <div class="col-md-8">
        <!-- 播放器容器 -->
        <div ref="videoContainer" id="video" class="player-container"></div>
      </div>
      <div class="col-md-4">
        <!-- 配置选项 -->
        <div class="config-options">
          <label>
            <input type="checkbox" v-model="config.useMSE" /> MSE 硬解
          </label>
          <label>
            <input type="checkbox" v-model="config.useSIMD" /> WASM 解码
          </label>
          <label>
            <input type="checkbox" v-model="config.hasAudio" /> 渲染音频
          </label>
          <label>
            <input type="checkbox" v-model="config.websocket1006ErrorReplay" /> 自动重连
          </label>
          <label>
            延迟重播时间:<input type="number" v-model.number="config.reconnectTime" /> ms
          </label>
          <label>
            水印配置:<input type="text" v-model="config.watermark.text" />
          </label>
          <label>
            视频封面 URL:<input type="text" v-model="config.poster" />
          </label>
          <label>
            播放地址:<input type="text" v-model="config.url" id="playHref" />
          </label>
        </div>

        <!-- 控制按钮 -->
        <div class="control-buttons">
          <button id="play" @click="createPlayer">播放</button>
          <button id="rePlay" @click="rePlay">重播</button>
          <button id="destroy" @click="destroyPlayer">销毁</button>
          <button @click="screenshotFn">截图</button>
        </div>
      </div>
    </div>
  </div>
</template>

<script setup>
import { reactive, onMounted, ref } from 'vue';

// 获取全局属性
const { proxy } = getCurrentInstance();

// 初始化播放器配置
const config = reactive({
  useMSE: false,
  useSIMD: false,
  hasAudio: false,
  websocket1006ErrorReplay: false,
  reconnectTime: 5000, // 5秒重连
  watermark: {
    text: ''
  },
  poster: '',
  url: 'http://192.168.1.37:8888/live/001.live.flv'
});

// 声明
let easypro;
const videoContainer = ref(null);
const playHref = ref(null);

// 实例初始化
function createPlayer () {
  if (easypro) {
    easypro.destroy(); // 销毁存在的实例
    console.log('Existing player destroyed');
  }

  easypro = new proxy.$EasyPlayerPro({
    container: videoContainer.value,
    videoBuffer: 0.2,
    videoBufferDelay: config.videoBufferDelay || 0, // 使用 config 中的值
    useMSE: config.useMSE,
    useSIMD: config.useSIMD,
    hasAudio: config.hasAudio,
    websocket1006ErrorReplay: config.websocket1006ErrorReplay,
    reconnectTime: config.reconnectTime,
    networkDelayTimeoutReplay: false,
    heartTimeout: 10000,
    replayUseLastFrameShow: false,
    background: config.background || '',
    timeout: 10,
    qualityConfig: ['普清', '高清', '超清', '4K', '8K'],
    debug: true,
    debugLevel: "debug",
    operateBtns: {
      fullscreen: true,
      screenshot: true,
      play: true,
    },
  });

  const url = config.url;
  if (url) {
    easypro.play(url);
    console.log(`Playing video from: ${url}`);
  } else {
    console.warn('No video URL provided!');
  }
}

// 重播
function rePlay () {
  if (easypro) {
    easypro.play(config.url);
    console.log('Replaying the video');
  } else {
    createPlayer();
  }
}

// 销毁
function destroyPlayer () {
  if (easypro) {
    easypro.destroy();
    console.log('Player destroyed');
  }
}

// 截图
function screenshotFn () {
  if (easypro) {
    easypro.screenshot();
    console.log('Screenshot taken');
  } else {
    console.warn('No player instance found to take a screenshot');
  }
}

onMounted(() => {
  playHref.value = document.getElementById('playHref');
});
</script>

<style scoped>
.player-container {
  width: 100%;
  height: 500px;
  background-color: #000;
}

.config-options label {
  display: block;
  margin-bottom: 8px;
}

.control-buttons button {
  margin-right: 10px;
}
</style>


网站公告

今日签到

点亮在社区的每一天
去签到