2010-11-30 10 views
6

के साथ WP7 Shoutcast मैं MediaStreamSource के माध्यम से अपने MediaElement पर Shoutcast स्ट्रीमिंग को कार्यान्वित करने का प्रयास कर रहा हूं। यहां कुछ मूलभूत बातें हैं। रीडडाटा विधि के साथ मैं कच्चे ऑडियो डेटा (एमपी 3 नमूने) डाउनलोड कर सकता हूं, मेरा सवाल यह है कि मैं स्ट्रीम को MediaStreamSource पर कैसे सेट कर सकता हूं। इस तरह से यह काम नहीं करता है (यह संकलित करता है और MediaFailed ईवेंट पर कोई त्रुटि नहीं है लेकिन मैं कोई आवाज नहीं सुन सकता)। हो सकता है कि मैं इन सभी को अपने कस्टम ShoutcastMediaStreamSource में लागू करूँ? निश्चित स्ट्रीम के साथ कोई समस्या नहीं है, बस गैर-निश्चित के साथ। क्या कोई मुझे कुछ सलाह दे सकता है?मीडियास्ट्रीम स्रोत

WP7 पर "useUnsafeHeaderParsing" सेट करने की कोई संभावना नहीं है, इसलिए मुझे shoutcast मेटाडाटा - केवल कच्चे डेटा के साथ http शीर्षलेख नहीं मिल सकते हैं। ShoutcastMediaStreamSource में मैंने मैनेज्ड मीडिया हिल्पर के कुछ कोड लागू किए हैं।

धन्यवाद

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://radiozetmp3-02.eurozet.pl:8400/;"); 
     request.Method = "GET"; 
     request.Headers["Icy-MetaData"] = "1"; 
     request.UserAgent = "WinampMPEG/5.09"; 
     request.AllowReadStreamBuffering = false; 

     request.BeginGetResponse(new AsyncCallback(RequestComplete), request); 
     allDone.WaitOne(); 

     ShoutcastMediaStreamSource smss = new ShoutcastMediaStreamSource(stream); 
     player.SetSource(smss); // MediaElement 
     player.Play(); 
    } 

    public void RequestComplete(IAsyncResult r) 
    { 
     HttpWebRequest request = (HttpWebRequest)r.AsyncState; 
     HttpWebResponse response = request.EndGetResponse(r) as HttpWebResponse; 
     stream = response.GetResponseStream(); 

     IAsyncResult res = stream.BeginRead(buffer, 0, buffer.Length, callback, null); 

     allDone.Set(); 
    } 

    public void ReadData(IAsyncResult r) 
    { 
     int bytes = stream.EndRead(r); 

     if (bytes == 0) { Debug.WriteLine("No bytes readed"); } 
     else 
     { 
      Debug.WriteLine("readed: " + buffer.Length.ToString()); 
      stream.BeginRead(buffer, 0, buffer.Length, callback, buffer); 
     } 
    } 
+0

क्या आपने यह पता लगाया है, मैं समीकरण करने की कोशिश कर रहा हूं। कोई लीड? –

+0

बस किक्स के लिए, आईसीवाई हेडर पास न करें, बस नियमित HTTP का उपयोग करें, और इसे यूआरएल में अर्धविराम से लोड करें, जैसे: http: //10.12.13.14: 8000 /; ' – Brad

उत्तर

2

आप कस्टम MediaStreamSource विकसित करने की आवश्यकता। कोड में https://skydrive.live.com/redir.aspx?cid=eb0868f2135b874c&resid=EB0868F2135B874C!1037&parid=EB0868F2135B874C!169&authkey=!AGSYfCVvCasGArI

+0

मुझे कुछ मिल रहा है प्रत्येक 5 सेकंड या उससे भी ज्यादा में ध्वनि छोड़ें। कृपया सलाह दें कि हम इससे कैसे बच सकते हैं? –

+0

यह केवल 128 बिट दर धाराओं के लिए काम करता है। अन्यथा यह "चिम्पांजी आवाज" देता है – enadun

0

कोशिश संस्करण = 2:

आप एक है कि मैं अपनी परियोजनाओं यहाँ से एक के लिए विकसित की प्रोटोटाइप पा सकते हैं। यह कोड के एक पंक्ति को बदलने के बाद अब मेरे लिए काम करता है