2015-01-15 14 views
7

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

http://www.w3.org/TR/media-source/#examples के अनुसार मुझे फ़ाइल की शुरुआत में "प्रारंभिक सेगमेंट" की आवश्यकता है।

मैं जेएस में वेबएम के "प्रारंभिक सेगमेंट" कैसे उत्पन्न कर सकता हूं ताकि मैं अपने द्वारा चुने गए किसी भी भाग को चला सकूं। क्या इसके लिए कोई मुक्ति है? (मैं WebM बाइट स्ट्रीम प्रारूप के बारे में कोई ज्ञान है)

+0

हैलो @nvcnvn! विषय के साथ कोई प्रगति? मैं udp बंदरगाह के लिए vp8 स्ट्रीम उत्पन्न करता हूं और मेरे छोटे सर्वर को udp-> websockets पर उत्पन्न करता हूं। मुझे यह भी नहीं पता कि मुझे किस तरह का प्रारंभिक सेगमेंट वितरित करना चाहिए और इसे कैसे उत्पन्न करना है .. – zarkone

+1

@zarkone, मैंने पाया कि यह मेरी परियोजना के लिए "मृत अंत" है, MediaRecoder वीडियो को टन भागों में विभाजित नहीं करता है खेल सकते हैं, यह बस बाइट्स के एक हिस्से में वीडियो को विभाजित करता है। मीडिया स्रोत – nvcnvn

उत्तर

2

आप मीडिया स्रोत एक्सटेंशन

उपयोग करने की आवश्यकता कृपया उदाहरण नीचे का उल्लेख

<script> 
    var appendID = "123"; 

    function onOpen(e) { 
    var video = e.target; 

    var headers = GetStreamHeaders(); 

    if (headers == null) { 
     // Error fetching headers. Signal end of stream with an error. 
     video.sourceEndOfStream(HTMLMediaElement.EOS_NETWORK_ERR); 
    } 

    video.sourceAddId(appendID, 'video/webm; codecs="vorbis,vp8"'); 

    // Append the stream headers (i.e. WebM Header, Info, and Tracks elements) 
    video.sourceAppend(appendID, headers); 

    // Append some initial media data. 
    video.sourceAppend(appendID, GetNextCluster()); 
    } 

    function onSeeking(e) { 
    var video = e.target; 

    // Abort current segment append. 
    video.sourceAbort(appendID); 

    // Notify the cluster loading code to start fetching data at the 
    // new playback position. 
    SeekToClusterAt(video.currentTime); 

    // Append clusters from the new playback position. 
    video.sourceAppend(appendID, GetNextCluster()); 
    video.sourceAppend(appendID, GetNextCluster()); 
    } 

    function onProgress(e) { 
    var video = e.target; 

    if (video.sourceState == video.SOURCE_ENDED) 
     return; 

    // If we have run out of stream data, then signal end of stream. 
    if (!HaveMoreClusters()) { 
     video.sourceEndOfStream(HTMLMediaElement.EOS_NO_ERROR); 
     return; 
    } 

    video.sourceAppend(appendID, GetNextCluster()); 
    } 

    var video = document.getElementById('v'); 
    video.addEventListener('sourceopen', onOpen); 
    video.addEventListener('seeking', onSeeking); 
    video.addEventListener('progress', onProgress); 
</script> 


<video id="v" autoplay> </video> 

<script> 
    var video = document.getElementById('v'); 
    video.src = video.mediaSourceURL; 
</script> 
+1

द्वारा इन हिस्सों को फिर से चलाने का कोई तरीका नहीं है तो "GetStreamHeaders" फ़ंक्शन को कैसे कार्यान्वित किया जा सकता है? ध्यान दें कि मेरा प्रश्न जावास्क्रिप्ट द्वारा हेडर पीढ़ी के बारे में है! – nvcnvn

+0

@nvcvn, क्लाइंट-साइड जावास्क्रिप्ट का उपयोग कर GetStreamHeaders के लिए ऐसा अनुकूलन करना संभव नहीं है, इसलिए आपको सर्वर की ओर से चीजों पर भरोसा करना होगा। आप https://gerrit.wikimedia.org/r/#/c/34560/1/includes/filerepo/file/File.php पर PHP का उपयोग करके विकी लिंक का उल्लेख कर सकते हैं – Mazzu

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