base_ui/components/other/MyVuePlyr.vue

160 lines
5.9 KiB
Vue
Raw Normal View History

2025-02-01 09:34:55 +00:00
<template>
<div class="mt-2" id="myVid">
<!-- video element -->
<!-- <vue-plyr :options="options">
<video controls crossorigin playsinline data-poster="poster.jpg">
<source size="720" src="/path/to/video-720p.mp4" type="video/mp4" />
<source size="1080" src="/path/to/video-1080p.mp4" type="video/mp4" />
<track
default
kind="captions"
label="English captions"
src="/path/to/english.vtt"
srclang="en"
/>
</video>
</vue-plyr> -->
<!-- audio element -->
<vue-plyr ref="plyr" :options="options">
<video v-if="type == 'video'" controls crossorigin playsinline>
<source
size="720"
:src="file.attachment.url"
:type="'video/' + file.attachment.ext"
/>
</video>
<audio v-else controls crossorigin playsinline data-poster="poster.jpg">
<source
:src="file.attachment.url"
:type="'audio/' + file.attachment.ext"
/>
</audio>
</vue-plyr>
<p class="my-2">
{{ file.attachment.name }}
</p>
<p class="my-2">
{{ formatBytes(file.attachment.length) }}
</p>
</div>
</template>
<script>
/**
* @vue-prop {String} [type] - نوع فایل
* @vue-prop {Object} [file] - فایل
*
* @vue-data {undefined} [canvas=undefined] - یک محیط توسعه وب برای رسم شکلها، تصاویر، ویدیوها و سایر عناصر گرافیکی است.
* @vue-data {Object} [options] - گزینههای ویدیو پلیر
* @vue-data {Array} [options.controls] - کنترلهای ویدیو پلیر
* @vue-data {Array} [options.controls=["play", "progress", "current-time", "mute", "volume", "settings", "download"]] - کنترلهای ویدیو پلیر (پخش، پیشرفت، زمان فعلی، بیصدا، میزان صدا، تنظیمات، دانلود)
* @vue-data {Object} [options.speed] - سرعت پخش ویدیو
* @vue-data {Number} [options.speed.selected=1] - سرعت پخش انتخاب شده
* @vue-data {Array} [options.speed.options=[0.75, 1, 1.5, 2]] - گزینههای سرعت پخش ویدیو
*/
export default {
props: ["type", "file"],
data() {
return {
canvas: undefined,
options: {
controls: [
// "play-large", // The large play button in the center
//'restart', // Restart playback
// "rewind", // Rewind by the seek time (default 10 seconds)
"play", // Play/pause playback
// "fast-forward", // Fast forward by the seek time (default 10 seconds)
"progress", // The progress bar and scrubber for playback and buffering
"current-time", // The current time of playback
// "duration", // The full duration of the media
"mute", // Toggle mute
"volume", // Volume control
// "captions", // Toggle captions
"settings", // Settings menu
// "pip", // Picture-in-picture (currently Safari only)
// "airplay", // Airplay (currently Safari only)
"download", // Show a download button with a link to either the current source or a custom URL you specify in your options
// "fullscreen", // Toggle fullscreen
],
speed: { selected: 1, options: [0.75, 1, 1.5, 2] },
},
};
},
methods: {
/**
* گرفتن عکس از ویدیو.
* این متد یک عکس از ویدیویی که در آن زمان مشخص شده است، گرفته و آن را به عنوان پوستر ویدیو تنظیم میکند.
*/
captureSnapshot() {
// var video = this.$refs.mediaPlayer;
// this.canvas = document.getElementById("snapshotCanvas");
// var context = canvas.getContext("2d");
// canvas.width = video.videoWidth;
// canvas.height = video.videoHeight;
// video.currentTime = 10;
// context.drawImage(video, 0, 0, canvas.width, canvas.height);
var container = document.getElementById("myVid"),
video = document.createElement("video"),
canCapture = true;
if (!video.canPlayType("video/wmv")) {
/* If you don't have multiple sources, you can load up a Flash fallback here
(like jPlayer), but you won't be able to capture frames */
canCapture = false;
return;
}
video.src = this.file.attachment.url;
video.currentTime = "10.0";
container.appendChild(video);
video.play(); //or put this in a button click handler if you want your own controls
var canvas = document.createElement("canvas");
canvas.width = 640;
canvas.height = 480;
var ctx = canvas.getContext("2d");
// if you want to preview the captured image,
// attach the canvas to the DOM somewhere you can see it.
//draw image to canvas. scale to target dimensions
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
//convert to desired file format
this.$refs.plyr.player.poster = canvas.toDataURL("image/jpeg"); // can also use 'image/png'
},
/**
* فرمت کردن حجم فایل.
* این متد حجم فایل را به صورت خوانا و فرمتداده شده با واحدهای مناسب برمیگرداند.
*
* @param {number} bytes - حجم فایل به بایت
* @param {number} [decimals=2] - تعداد اعشار برای نمایش
* @returns {string} - حجم فایل به صورت فرمتداده شده
*/
formatBytes(bytes, decimals = 2) {
if (!+bytes) return "0 Bytes";
const k = 1024;
const dm = decimals < 0 ? 0 : decimals;
const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
},
},
mounted() {
// this.captureSnapshot()
},
};
</script>
<style scoped></style>