2008-09-03 31 views
13

में वीडियोडिस्प्ले का उपयोग करके लाइव स्ट्रीमिंग वीडियो कैसे प्रदर्शित करें मैं सोच रहा हूं कि एक वीडियोडिस्प्ले ऑब्जेक्ट (एमएक्सएमएल में परिभाषित) का उपयोग कैसे करें ताकि नेटस्ट्रीम के माध्यम से एफएमएस से स्ट्रीम किए गए वीडियो को प्रदर्शित किया जा सके।फ्लेक्स

Flex3 docs सुझाव है कि यह संभव है:

वीडियो प्रदर्शन ... HTTP पर प्रगतिशील डाउनलोड, Flash मीडिया सर्वर से स्ट्रीमिंग का समर्थन करता है, और एक कैमरा वस्तु से स्ट्रीमिंग।

हालांकि, बाद में दस्तावेज़ों में जो मैं देख सकता हूं वह एक संलग्नकैमेरा() विधि है। पुराने वीडियो ऑब्जेक्ट की तरह अटैचस्ट्रीम() विधि प्रतीत नहीं होती है।

ऐसा लगता है कि आप स्रोत प्रॉपर्टी का उपयोग करके HTML पर एक निश्चित फ़ाइल चला सकते हैं, लेकिन मुझे NetStream को अटैचमेंट करने के बारे में कुछ भी नहीं दिखाई देता है।

पुराना Video ऑब्जेक्ट अभी भी मौजूद है, हालांकि यह UIComponent पर आधारित नहीं है और यह एमएक्सएमएल में उपयोग करने योग्य प्रतीत नहीं होता है।

मुझे this blog post मिला जो दिखाता है कि नियमित वीडियो ऑब्जेक्ट के साथ इसे कैसे किया जाए, लेकिन मैं वीडियोडिस्प्ले (या कुछ और जिसे सीधे एमएक्सएमएल में रखा जा सकता है) का उपयोग करना पसंद करूंगा।

उत्तर

6

दुर्भाग्य से आप केवल वीडियो ऑब्जेक्ट पर नेटस्ट्रीम() संलग्न कर सकते हैं। इसलिए यदि आप एफएमएस से डेटा प्राप्त करना चाहते हैं तो आप एम का उपयोग करने के लिए बर्बाद हो गए हैं।

रास्ता attachCamera() विधि द्वारा प्रकाशित करता है सर्वर से स्थानीय कैमरा वीडियो इसलिए सावधान रहना;)

4

यह काम करता है।

mx: VideoDisplay लाइव = "true" ऑटोप्ले = "true" स्रोत = "RTMP: //server.com/appname/streamname" />

है कि आप दे देंगे एक videodisplay के माध्यम से वीडियो रहते हैं ... समस्या यह है कि यह मौजूदा नेटकनेक्शन ऑब्जेक्ट का उपयोग नहीं करेगा, यह इसे स्वयं बनाता है ... जो मैं आसपास के लिए एक काम खोजने की कोशिश कर रहा हूं।

+0

भी आप मक्खीके स्रोत संपादित कर सकते हैं my_vid.source = "rtmp: //server.com/appname/" + stream_name; इस तरह ... फिर भी प्रत्येक प्रदर्शन समस्या के लिए नई एनसी को ठीक नहीं करता है। –

2

मैं नमूना कोड को देखा है जहां कुछ इस तरह काम करता है:

// Connect to the video stream in question. 
var stream:NetStream = new NetStream(chatNC); 
stream.addEventListener(NetStatusEvent.NET_STATUS, handleStreamStatus); 
stream.addEventListener(IOErrorEvent.IO_ERROR, handleIOError); 

// Build the video player on the UI. 
var video:Video = new Video(246, 189); 
var uiComp:UIComponent = new UIComponent(); 
uiComp.addChild(video); 
uiComp.width = 246; 
uiComp.height = 189; 
stream.play(streamName); 
video.attachNetStream(stream); 
video.smoothing = true; 
video.width = 246; 
video.height = 189; 
view.videoPlayerPanel.removeAllChildren(); 
view.videoPlayerPanel.addChild(uiComp); 

लेकिन मैं वास्तव में यह अपने आप काम करने के लिए नहीं मिल सकता है। अगर मैं इसे समझ सकता हूं तो मैं बाद में यहां पोस्ट करूंगा।

15

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

हालांकि, उस घटक के लिए एक संदर्भ mx_internal नाम स्थान में साथ आयोजित किया जाता है, तो निम्नलिखित चाल करना चाहिए: एक लिंक यहाँ

videoDisplay.mx_internal::videoPlayer.attachNetStream(incomingStream); 
videoDisplay.mx_internal::videoPlayer.visible = true; 

(आप mx.core.mx_internal नाम स्थान आयात करने की आवश्यकता)

+0

यह पूरी तरह से काम करता है! वास्तव में स्वीकार्य उत्तर होना चाहिए। धन्यवाद कॉस्मा। –

+0

मुझे "संलग्ननेट स्ट्रीम" पर कॉल पर 1069 मिल रहा है, फिर भी ऑडियो संलग्न है और वीडियो नहीं है। चूंकि आप इन चीजों पर काफी तेज लगते हैं, मुझे लगा कि शायद आप मदद कर सकते हैं। मैं समझ नहीं सकता कि फ्लैश से सभ्य स्टैकट्रैक कैसे प्राप्त करें। – TheSoftwareJedi

+1

mx_internal नेमस्पेस का अर्थ है कि गुण और विधियां समर्थित नहीं हैं और भविष्य में एसडीके संस्करणों में बदला जा सकता है। हो सकता है कि एडोब ने आपके द्वारा उपयोग किए जा रहे एसडीके संस्करण में वीडियोडिस्प्ले के आंतरिक कार्यान्वयन को बदल दिया .. मैं आपके एसडीके वितरण में वीडियोडिस्प्ले क्लास के स्रोतों को देखने का सुझाव देता हूं। –

4

कैसे वीडियो का उपयोग करने पर उदाहरण के लिए: http://blog.flexexamples.com/2008/03/01/displaying-a-video-in-flex-using-the-netconnection-netstream-and-video-classes/

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="vertical" 
    verticalAlign="middle" 
    backgroundColor="white" 
    creationComplete="init();"> 

<mx:Script> 
<![CDATA[ 
    import mx.utils.ObjectUtil; 

    private var nc:NetConnection; 
    private var ns:NetStream; 
    private var video:Video; 
    private var meta:Object; 

    private function init():void { 
    var nsClient:Object = {}; 
    nsClient.onMetaData = ns_onMetaData; 
    nsClient.onCuePoint = ns_onCuePoint; 

    nc = new NetConnection(); 
    nc.connect(null); 

    ns = new NetStream(nc); 
    ns.play("http://www.helpexamples.com/flash/video/cuepoints.flv"); 
    ns.client = nsClient; 

    video = new Video(); 
    video.attachNetStream(ns); 
    uic.addChild(video); 
    } 

    private function ns_onMetaData(item:Object):void { 
    trace("meta"); 
    meta = item; 
    // Resize Video object to same size as meta data. 
    video.width = item.width; 
    video.height = item.height; 
    // Resize UIComponent to same size as Video object. 
    uic.width = video.width; 
    uic.height = video.height; 
    panel.title = "framerate: " + item.framerate; 
    panel.visible = true; 
    trace(ObjectUtil.toString(item)); 
    } 

    private function ns_onCuePoint(item:Object):void { 
    trace("cue"); 
    } 
]]> 
</mx:Script> 

<mx:Panel id="panel" visible="false"> 
    <mx:UIComponent id="uic" /> 
    <mx:ControlBar> 
    <mx:Button label="Play/Pause" click="ns.togglePause();" /> 
    <mx:Button label="Rewind" click="ns.seek(0); ns.pause();" /> 
    </mx:ControlBar> 
</mx:Panel> 
</mx:Application>