2013-07-04 12 views
9

का उपयोग कर स्ट्रीम मीडिया फ़ाइल यहां मेरा उपयोग मामला है: ऐलिस के पास एक अच्छा नया मीडिया ट्रैक है कि वह बॉब को सुनना चाहती है। वह अपने ब्राउज़र में मीडिया फ़ाइल का चयन करती है और मीडिया फ़ाइल बॉब के ब्राउज़र में तुरंत खेलना शुरू कर देती है।वेबआरटीसी

मुझे अभी भी यह सुनिश्चित नहीं है कि वेबआरटीसी एपीआई का उपयोग करना संभव है या नहीं। सभी उदाहरण मैं getUserMedia (के माध्यम से प्राप्त उपयोग धाराओं) प्राप्त कर सकते हैं, लेकिन यह है कि मैं क्या है:

var context = new AudioContext(); 
var pc = new RTCPeerConnection(pc_config); 

function handleFileSelect(event) { 
    var file = event.target.files[0]; 

    if (file) { 
     if (file.type.match('audio*')) { 
      console.log(file.name); 
      var reader = new FileReader(); 

      reader.onload = (function(readEvent) { 
       context.decodeAudioData(readEvent.target.result, function(buffer) { 
        var source = context.createBufferSource(); 
        var destination = context.createMediaStreamDestination(); 
        source.buffer = buffer; 
        source.start(0); 
        source.connect(destination); 
        pc.addStream(destination.stream); 
        pc.createOffer(setLocalAndSendMessage); 
       }); 
      }); 

      reader.readAsArrayBuffer(file); 
     } 
    } 
} 

प्राप्त तरफ मैं निम्नलिखित है:

function gotRemoteStream(event) { 
    var mediaStreamSource = context.createMediaStreamSource(event.stream); 
    mediaStreamSource.connect(context.destination); 
} 

इस कोड (मीडिया नहीं है संगीत) प्राप्त करने वाले पक्ष पर खेलते हैं। हालांकि मुझे ईवेंट समाप्त हो गया है, वेबआरटीसी हैंडशेक के ठीक बाद और मिला रिमोटस्ट्रीम फ़ंक्शन को कॉल किया गया था। gotRemoteStream फ़ंक्शन को मीडिया कहा जाता है जिसे खेलना शुरू नहीं होता है।

एलिस की तरफ जादू का मानना ​​है कि स्रोत.कनेक्ट (गंतव्य) कहता है। जब मैं स्रोत.कनेक्ट (context.destination) के साथ उस पंक्ति को प्रतिस्थापित करता हूं तो मीडिया ऐलिस के स्पीकर के माध्यम से सही ढंग से खेलना शुरू कर देता है।

बॉब की तरफ एक मीडिया स्ट्रीम स्रोत एलिस की धारा के आधार पर बनाया गया है। हालांकि जब स्थानीय स्पीकर मीडियास्ट्रीमसोर्स.कनेक्ट (context.destination) का उपयोग कर कनेक्ट होते हैं तो संगीत वक्ताओं के माध्यम से खेलना शुरू नहीं करता है।

जरुर मैं हमेशा एक DataChannel के माध्यम से मीडिया फ़ाइल भेज सकता है लेकिन जहां कि में मज़ा है ...

क्या मेरी कोड या कैसे मेरे उपयोग के मामले को प्राप्त करने पर कुछ विचार के साथ कुछ गलत है पर कोई सुराग होगा बहुत सराहना कीजिए!

मैं नवीनतम और सबसे बड़ी क्रोम कैनरी का उपयोग कर रहा हूं।

धन्यवाद।

+0

मेरे कोड में एक त्रुटि के कारण बॉब की तरफ से प्राप्त स्ट्रीम समाप्त हो गई क्योंकि एलिस की तरफ से एसडीपी जवाब सही ढंग से संभाला नहीं गया था। इस मुद्दे को ठीक करने के बाद मीडिया अभी भी नहीं खेलता है लेकिन उदाहरण अलग-अलग व्यवहार करता है। मैंने तदनुसार सवाल अपडेट किया। – Eelco

+0

यह असंबंधित हो सकता है (मुझे वेबआरटीसी के साथ कोई अनुभव नहीं है) लेकिन क्या https://github.com/wearefractal/holla आपकी मदद कर सकता है? – rickyduck

उत्तर

3

यह इस तरह ऑडियो तत्व का उपयोग ऑडियो खेलने के लिए संभव है।

1

क्रोम के बारे में निश्चित ध्यान दें; एक बग की तरह लगता है।

इसे फ़ायरफ़ॉक्स पर आज़माएं (रात में मैं सुझाव देता हूं); हमारे पास WebAudio समर्थन है हालांकि मुझे वर्तमान में समर्थित समर्थन के बारे में सभी विवरण नहीं पता हैं।

इसके अलावा, फ़ायरफ़ॉक्स पर कम से कम हमारे पास स्ट्रीम = media_element.captureStreamUntilEnded(); हम मानते हैं कि हम डोम/मीडिया/परीक्षण/मोचसाइट्स में हमारे कुछ परीक्षणों में इसका उपयोग करते हैं। यह आपको कोई ऑडियो या वीडियो तत्व लेने देता है और आउटपुट को मध्यस्थ के रूप में कैप्चर करता है।

संपादित करें: नीचे देखें; क्रोम और फ़ायरफ़ॉक्स दोनों WebRTC PeerConnections के साथ वेबऑडियो के संयोजन में याद करते हैं, लेकिन विभिन्न स्थानों पर। मोज़िला को जल्द ही आखिरी बग को ठीक करने की उम्मीद है। WebAudio API यह (अभी तक) मेरे लिए काम नहीं कर के माध्यम से ऑडियो वापस बजाना

function gotRemoteStream(event) { 
    var player = new Audio(); 
    attachMediaStream(player, event.stream); 
    player.play(); 
} 

:

+1

संकेत के लिए धन्यवाद। मैंने कोशिश की लेकिन वर्तमान में फ़ायरफ़ॉक्स ने अभी तक _MediaContext.createMediaStreamSource_ को लागू नहीं किया है। – Eelco

+0

यह क्रोम बग करता है: वेबौडियो दूरस्थ स्ट्रीम का समर्थन नहीं करता है। यहां: https://code.google.com/p/chromium/issues/detail?can=2&q=121673&colspec=ID%20Pri%20M%20Iteration%20ReleaseBlock%20Cr%20Status%20Owner%20Summary%20OS%20Modified&groupby=&sort= और आईडी = 121673 – Imskull

+0

हां, अभी क्रोम PeerConnection इनपुट पर WebAudio का समर्थन करता है, लेकिन आउटपुट नहीं (बग @Imskull से जुड़ा हुआ देखें)। फ़ायरफ़ॉक्स PeerConnection आउटपुट पर WebAudio का समर्थन करता है, लेकिन इनपुट पर नहीं। एक छोटी सी मुद्दा बनी हुई है; उस निश्चित के साथ हम भी इसका समर्थन करेंगे। शायद 39 में, शायद 38, * शायद * 37 अगर यह मामूली है। – jesup

0

पृष्ठ MediaStream Integration देखें।यह वेब ऑडियो एपीआई के साथ वेबआरटीसी एकीकरण को दर्शाता है। विशेष रूप से इस उदाहरण अपने प्रश्न के लिए प्रासंगिक है:

  1. Capture microphone input, visualize it, mix in another audio track and stream the result to a peer
<canvas id="c"></canvas> 
<audio src="back.webm" id="back"></audio> 
<script> 
    navigator.getUserMedia('audio', gotAudio); 
    var streamRecorder; 
    function gotAudio(stream) { 
     var microphone = context.createMediaStreamSource(stream); 
     var backgroundMusic = context.createMediaElementSource(document.getElementById("back")); 
     var analyser = context.createAnalyser(); 
     var mixedOutput = context.createMediaStreamDestination(); 
     microphone.connect(analyser); 
     analyser.connect(mixedOutput); 
     backgroundMusic.connect(mixedOutput); 
     requestAnimationFrame(drawAnimation); 

     peerConnection.addStream(mixedOutput.stream); 
    } 
</script> 

मुझे डर है, तथापि, कि यह केवल एक प्रस्ताव वर्तमान में है।

+0

दुर्भाग्यवश, यह क्रोम 59 में काम नहीं करेगा। जब आप 'peerConnection.addStream (मिश्रित आउटपुट.स्ट्रीम)' करते हैं, तो आपको त्रुटि मिलती है: '' RTCPeerConnection 'पर' addStream 'निष्पादित करने में विफल: पैरामीटर 1 प्रकार का नहीं है' मीडियास्ट्रीम '। –

+0

वैसे, फ़ायरफ़ॉक्स 53 में एक ही त्रुटि:' टाइपरर: आरटीसीपीयर कनेक्शन का तर्क 1। इंटरस्टेस मीडियास्ट्रीम को लागू नहीं करता है। ' –

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