2012-03-13 12 views
5

मैं जावास्क्रिप्ट में गतिशील रूप से बिटस्ट्रीम उत्पन्न करना चाहता हूं जो उदा। एक बड़ा ओजीजी-वीडियो। क्या ब्राउज़र को किसी स्थान पर HTTP-GET-request बनाने के बजाय बिटस्ट्रीम के लिए जावास्क्रिप्ट फ़ंक्शन से पूछना संभव है?क्या एचटीएमएल 5 वीडियो स्रोत के लिए जेएस में बिटस्ट्रीम उत्पन्न करना संभव है?

वीडियो-टैग में डेटा को खिलाने का एकमात्र संभावित तरीका, जो मैंने पाया, में डेटा होगा: -URLs। लेकिन इसके लिए पूरे वीडियो को दस्तावेज़ में एन्कोड करने की आवश्यकता है।

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

क्या किसी को पता है कि यह किसी भी तरह से संभव है?

+0

क्या आप एक का उपयोग कर मतलब "डेटा:: स्ट्रिंग"

यहाँ ऊपर के लिंक से एक उदाहरण है - एक img-टैग में एक के रूप में? (http://stackoverflow.com/questions/1207190/embedding-base64-images) – T4NK3R

उत्तर

0

यह अब MediaSource API के साथ संभव होना चाहिए।

var video = document.querySelector('video'); 

var assetURL = 'frag_bunny.mp4'; 
// Need to be specific for Blink regarding codecs 
// ./mp4info frag_bunny.mp4 | grep Codec 
var mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"'; 

if ('MediaSource' in window && MediaSource.isTypeSupported(mimeCodec)) { 
    var mediaSource = new MediaSource(); 
    //console.log(mediaSource.readyState); // closed 
    video.src = URL.createObjectURL(mediaSource); 
    mediaSource.addEventListener('sourceopen', sourceOpen); 
} else { 
    console.error('Unsupported MIME type or codec: ', mimeCodec); 
} 

function sourceOpen (_) { 
    //console.log(this.readyState); // open 
    var mediaSource = this; 
    var sourceBuffer = mediaSource.addSourceBuffer(mimeCodec); 
    fetchAB(assetURL, function (buf) { 
    sourceBuffer.addEventListener('updateend', function (_) { 
     mediaSource.endOfStream(); 
     video.play(); 
     //console.log(mediaSource.readyState); // ended 
    }); 
    sourceBuffer.appendBuffer(buf); 
    }); 
}; 

function fetchAB (url, cb) { 
    console.log(url); 
    var xhr = new XMLHttpRequest; 
    xhr.open('get', url); 
    xhr.responseType = 'arraybuffer'; 
    xhr.onload = function() { 
    cb(xhr.response); 
    }; 
    xhr.send(); 
}; 
0

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

एफएफ/क्रोम/आईई 9 के लिए ओजीजी और एमपी 4 दोनों की आवश्यकता होगी।

http://www.mediacollege.com/video/streaming/http.html

"दस्तावेज़ पर इनकोडिंग" कोई मतलब नहीं है। यह वीडियो आपके एन्कोडर द्वारा एन्कोड किया गया है और स्ट्रीमिंग के लिए ऑप्टिमाइज़ करने के लिए सेटिंग्स को आगे बढ़ाया जा सकता है (यह तेज़ बिट्रेट पर पहले एक्सएक्स सेकेंड को तेज़ी से शुरू करने के लिए एन्कोड करता है)।

1

मुझे नहीं पता कि जावास्क्रिप्ट के साथ क्या संभव है, लेकिन आप शायद जावा या जावास्क्रिप्ट (?) प्लेयर, जैसे कोर्टाडो के साथ ऐसा कुछ कर सकते हैं।

http://www.flumotion.net/cortado/

+0

धन्यवाद, यह उपयोगी है। मैंने कहीं एक जावास्क्रिप्ट डिकोडर देखा जो कैनवास पर फ्रेम खींचता है। यह स्पष्ट रूप से तेज़ नहीं है और कोई आवाज नहीं है। लेकिन यह सब एक कामकाज है। उदाहरण के लिए, कोर्टाडो को जावा की आवश्यकता है। – anty

संबंधित मुद्दे