এইচটিএমএল 5 ভিডিও মাত্রা


108

আমি জাভাস্ক্রিপ্ট সহ একটি পৃষ্ঠায় ওভারলাইজ করছি এমন একটি ভিডিওর মাত্রা পাওয়ার চেষ্টা করছি, তবে এটি প্রকৃত ভিডিওর পরিবর্তে পোস্টার চিত্রের মাত্রাগুলি ফিরিয়ে দিচ্ছে কারণ মনে হচ্ছে ভিডিওটি লোড হওয়ার আগে এটি গণনা করা হচ্ছে।


আপনি কি হাল ছেড়ে দিয়েছেন? উত্তর হিসাবে এখানে ভাল সংকেত আছে!
হুয়ান মেন্ডেস

উত্তর:


109
<video id="foo" src="foo.mp4"></video>

var vid = document.getElementById("foo");
vid.videoHeight; // returns the intrinsic height of the video
vid.videoWidth; // returns the intrinsic width of the video

স্পেস: https://html.spec.whatwg.org/m Multipage/e এমবেডড- কনটেন্ট। Html#the-video- element


ওগ ফর্ম্যাট দিয়ে এটি কি সম্ভব কারণ আমি ভাবি না যে ভিডিওতে এমন মেটাডেটা অন্তর্ভুক্ত থাকবে?
এলিয়ট

@ এলিওট আমি এই ডেমোটিতে ক্রোমে পরীক্ষিত করেছি: people.opera.com/howcome/2007/video/controls.html এবং এটি কাজ করে ...
Šime

দেখে মনে হচ্ছে লিঙ্কটি আবার ভেঙে গেছে
মার্টিন ডিলি

দুঃখিত লিঙ্কটি আসলে ভাঙা হয়নি
মার্টিন ডিলি

140

এটি লক্ষ করা উচিত যে সিম ভিদাসের দ্বারা বর্তমানে গৃহীত সমাধানগুলি আধুনিক ব্রাউজারগুলিতে আসলে কাজ করে না, যেহেতু "লোডমেডেডাটা" ইভেন্টটি চালিত হওয়ার আগে পর্যন্ত ভিডিওউইথ এবং ভিডিও হাইটের বৈশিষ্ট্যগুলি সেট করা হয় না।

আপনি যদি ভিআইডিইও উপাদানটি রেন্ডার হওয়ার পরেও যথেষ্ট পরিমাণে এই সম্পত্তিগুলির জন্য জিজ্ঞাসা করে থাকেন তবে এটি কখনও কখনও কাজ করতে পারে তবে বেশিরভাগ ক্ষেত্রে এটি উভয় বৈশিষ্ট্যের জন্য 0 এর মান প্রদান করবে।

আপনি সঠিক সম্পত্তির মান পাচ্ছেন তা নিশ্চিত করার জন্য আপনাকে এর লাইন ধরে কিছু করতে হবে:

var v = document.getElementById("myVideo");
v.addEventListener( "loadedmetadata", function (e) {
    var width = this.videoWidth,
        height = this.videoHeight;
}, false );

দ্রষ্টব্য: আমি ইন্টারনেট এক্সপ্লোরার এর প্রাক -9 সংস্করণগুলির জন্য অ্যাকাউন্টিংকে বিরক্ত করি নি যা এড ব্রাউজারের 9-পূর্ব সংস্করণটি যেভাবেই এইচটিএমএল 5 ভিডিও সমর্থন করে না কারণ অ্যাডএভেন্টলিস্টনার পরিবর্তে সংযুক্তিভেন্ট ব্যবহার করে।


প্রস্থ এবং উচ্চতা উভয়ের জন্যই আমি 100 এর মান পাচ্ছি, এবং ভিডিওতে 100px নেই। কেন নিশ্চিত তা নয় ...
মাইকেল

4
দুর্ভাগ্যক্রমে Android 49 এর জন্য এটি ক্রোমে কাজ করে না; ভিডিওটি প্লে করা শুরু করলেই তথ্যটি উপলভ্য হয়। এই সম্পর্কে আরও কোন অন্তর্দৃষ্টি? PS1: আমি কেবল ফাইল সিলেক্টর ইনপুট উপাদানটি ব্যবহার করে সিলেক্ট করা স্থানীয় ফাইলগুলিতে URL গুলি দিয়ে চেষ্টা করেছি। পিএস 2: এটি আইওএস সাফারিটিতে কাজ করে।
ভিশনস্কেপ

আমি ক্রোমিয়াম বাগ ট্র্যাকারে এই সমস্যাটি তৈরি করেছি: বাগগুলি। Chromium.org/p/chromium/issues/detail?id=598218
ভিশনস্কেপ

4
এটি সময়ের 100% কাজ করবে না। বিরল অনুষ্ঠানে ভিডিও প্রস্থ এবং ভিডিও উচ্চতা শূন্য হবে যখন loadedmetadataআগুন লাগে । আমি এটি কেবলমাত্র ক্রোমিয়াম 69 এ দেখেছি for এর loadeddataজন্য শ্রবণ করা একটি নিরাপদ বাজি।
সাফ করুন

21

ফাংশন ব্যবহার করতে প্রস্তুত

এখানে ফাংশনটি ব্যবহারের জন্য প্রস্তুত যা ডকুমেন্টের কোনও পরিবর্তন না করেই অ্যাসিঙ্ক্রোসালি কোনও ভিডিওর মাত্রা প্রদান করে

// ---- Definitions ----- //

/**
 Returns the dimensions of a video asynchrounsly.
 @param {String} url Url of the video to get dimensions from.
 @return {Promise} Promise which returns the dimensions of the video in 'width' and 'height' properties.
 */
function getVideoDimensionsOf(url){
	return new Promise(function(resolve){
		// create the video element
		let video = document.createElement('video');

		// place a listener on it
		video.addEventListener( "loadedmetadata", function () {
			// retrieve dimensions
			let height = this.videoHeight;
			let width = this.videoWidth;
			// send back result
			resolve({
				height : height,
				width : width
			});
		}, false );

		// start download meta-datas
		video.src = url;
	});
}


// ---- Use ---- //
getVideoDimensionsOf("http://clips.vorwaerts-gmbh.de/VfE_html5.mp4")
   .then(({width, height}) => {
	console.log("Video width: " + width) ;
	console.log("Video height: " + height) ;
    });

আপনি যদি এটি দেখতে চান তবে স্নিপেটের জন্য ব্যবহৃত ভিডিওটি এখানে রয়েছে: বিগ বুক বানি


ভিডিও ট্যাগ ডেটা বিতরণ করার প্রতিশ্রুতির দুর্দান্ত ব্যবহার, আমি যা যা ধন্যবাদ
খুঁজছিলাম

দুর্দান্ত কোড এবং এতে একটি দুর্দান্ত ব্রাউজার সমর্থন রয়েছে: ক্রোম 32, অপেরা 19, ফায়ারফক্স 29, সাফারি 8 এবং মাইক্রোসফ্ট এজ হিসাবে, প্রতিশ্রুতিগুলি ডিফল্টরূপে সক্ষম হয়।
জেফ ক্লেটন

13

loadedmetadataব্যবহারকারী এজেন্ট যখন মিডিয়া সংস্থানটির সময়কাল এবং মাত্রা সবেমাত্র নির্ধারণ করেছে তখন প্রেরণ করা ইভেন্টটির জন্য শোনো Listen

বিভাগ 4.7.10.16 ইভেন্টের সংক্ষিপ্তসার

https://www.w3.org/TR/html5/semantics-ebded-content.html#eventdef-media-loadedmetadata

videoTagRef.addEventListener('loadedmetadata', function(e){
    console.log(videoTagRef.videoWidth, videoTagRef.videoHeight);
});

সঠিক লিঙ্ক: w3.org/TR/html5/…
ভিশনস্কেপ

4
@ ভিশনস্কেপ স্থির, ধন্যবাদ অন্যের উত্তরগুলি যখন মূল উদ্দেশ্যটি পরিবর্তন না করে তবে ছোট সম্পাদনাগুলি নির্দ্বিধায় করুন।
হুয়ান মেন্ডেস

ডনভোটার: আমি একটি ব্যাখ্যাটির প্রশংসা করব যাতে এটি আরও উন্নত করা যায়!
হুয়ান মেন্ডেস

1

ভ্যুতে এটি এটি করা যায়:

<template>
    <div>
        <video src="video.mp4" @loadedmetadata="getVideoDimensions"></video>
    </div>
</template>

<script>
export default {
    methods: {
        getVideoDimensions (e) {
            console.log(e.target.videoHeight)
            console.log(e.target.videoWidth)
        }
    }
}
</script>

-1

ভয়েজগুলিতে আমি মাউন্ট করা ট্যাগে নিম্নলিখিত কোডগুলি ব্যবহার করি।

var app = new Vue({
    el: '#id_homepage',
    mounted: function () {
        var v = document.getElementById("id_video");
        var width = v.offsetWidth;
        v.height = Math.floor(width*(9/16)); // dynamically setting video height to maintain aspect ratio
    },
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.