एचटीएमएल 5 वीडियो आयाम


105

मैं एक वीडियो के आयाम प्राप्त करने की कोशिश कर रहा हूं, जिसमें मैं जावास्क्रिप्ट के साथ एक पृष्ठ पर ओवरलेइंग कर रहा हूं, हालांकि यह वास्तविक वीडियो के बजाय पोस्टर छवि के आयामों को वापस कर रहा है क्योंकि ऐसा लगता है कि वीडियो लोड होने से पहले इसकी गणना की जा रही है।


क्या आपने हार मान ली? यहाँ उत्तर के रूप में अच्छे सुराग हैं!
जुआन मेंडेस

जवाबों:


105
<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/multipage/embedded-content.html#the-video-element


क्या यह ओग प्रारूप के साथ संभव है क्योंकि मुझे नहीं लगता कि वीडियो में ऐसे मेटाडेटा शामिल होंगे?
इलियट

@Elliot मैंने इस डेमो पर Chrome में परीक्षण किया: People.opera.com/howcome/2007/video/controls.html और यह काम करता है ...
Vidime Vidas

ऐसा लगता है कि लिंक फिर से टूट गया है
मार्टिन डेलिले

क्षमा करें लिंक वास्तव में टूटा नहीं है
मार्टिन डेलिले

137

यह ध्यान दिया जाना चाहिए कि Sime Vidas द्वारा उपरोक्त वर्तमान में स्वीकृत समाधान वास्तव में आधुनिक ब्राउज़रों में काम नहीं करता है क्योंकि "लोडमेटडाटा" इवेंट के समाप्त होने के बाद तक VideoWidth और वीडियोहाइट गुण सेट नहीं होते हैं।

यदि आप उन गुणों के लिए क्वेरी करते हैं, जब तक कि VIDEO तत्व के प्रस्तुत होने के बाद यह कभी-कभी काम करता है, लेकिन ज्यादातर मामलों में यह दोनों गुणों के लिए 0 के मान को लौटा देगा।

यह सुनिश्चित करने के लिए कि आपको सही संपत्ति मूल्य मिल रहे हैं, आपको इनकी तर्ज पर कुछ करने की आवश्यकता है:

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

नोट: मैं Internet Explorer के पूर्व -9 संस्करणों के लिए लेखांकन को परेशान नहीं करता था जो कि addEventListener के बजाय अनुलग्नक का उपयोग करते हैं क्योंकि उस ब्राउज़र के पूर्व -9 संस्करण HTML5 वीडियो का समर्थन नहीं करते हैं, वैसे भी।


मुझे चौड़ाई और ऊंचाई दोनों के लिए 100 का मान मिल रहा है, और वीडियो में 100px नहीं है। यकीन नहीं होता क्यों ...
मिकेल

2
यह दुर्भाग्य से एंड्रॉइड 49 के लिए क्रोम पर काम नहीं करता है; केवल तभी जब वीडियो चलना शुरू हो गया है जानकारी उपलब्ध हो जाती है। इस पर कोई और जानकारी? PS1: मैंने केवल एक फ़ाइल चयनकर्ता इनपुट तत्व का उपयोग करके चयनित स्थानीय फ़ाइलों के URL के साथ यह कोशिश की। PS2: यह iOS सफारी पर काम करता है।
विएन्सकेपर

मैंने क्रोमियम बग ट्रैकर में इस मुद्दे को बनाया: Bugs.chromium.org/p/chromium/issues/detail?id=598218
Visionscaper

2
यह 100% बार काम नहीं करेगा। दुर्लभ अवसरों पर वीडियो और वीडियोहाइट, शून्य हो जाएगा जब loadedmetadataआग। मैंने इसे क्रोमियम 69 पर देखा था। यह सुनना loadeddataएक सुरक्षित शर्त है।
क्लोंग

18

फ़ंक्शन का उपयोग करने के लिए तैयार है

यहां फ़ंक्शन का उपयोग करने के लिए तैयार है, जो दस्तावेज़ में कुछ भी बदले बिना , एक वीडियो के आयामों को अतुलनीय रूप से लौटाता है ।

// ---- 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घटना के लिए सुनें जो तब भेजी जाती है जब उपयोगकर्ता एजेंट ने मीडिया संसाधन की अवधि और आयाम निर्धारित किए हों

खंड 4.7.10.16 ईवेंट सारांश

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

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

सही लिंक: w3.org/TR/html5/…
Visionscaper

1
@Visioncaper फिक्स्ड, धन्यवाद। जब वे मूल इरादे को नहीं बदलते हैं, तो दूसरे के उत्तरों को छोटा करने के लिए स्वतंत्र महसूस करें।
जुआन मेंडेस

Donwvoter: मैं एक स्पष्टीकरण की सराहना करता हूँ ताकि इसे बेहतर बनाया जा सके!
जुआन मेंडेस

1

इस प्रकार इसे Vue में किया जा सकता है:

<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

Vuejs में मैं घुड़सवार टैग में निम्नलिखित कोड का उपयोग करता हूं।

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
    },
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.