J'essaye d'implémenter le streaming de Shoutcast à mon MediaElement via MediaStreamSource. Voici un code avec quelques bases. Avec la méthode ReadData je peux télécharger des données audio brutes (échantillons MP3), ma question est comment puis-je définir le flux à MediaStreamSource. De cette façon, cela ne fonctionne pas (il compile et il n'y a pas d'erreur sur l'événement MediaFailed mais je n'entends aucun son). Peut-être devrais-je implémenter tout cela dans ma ShoutcastMediaStreamSource personnalisée? Il n'y a pas de problème avec le flux fixe, juste avec non-fixe. Quelqu'un peut-il me donner un conseil?WP7 Shoutcast avec MediaStreamSource
Sur le WP7, il n'est pas possible de définir "useUnsafeHeaderParsing", donc je ne peux pas obtenir les en-têtes http avec les métadonnées shoutcast - uniquement les données brutes. Dans la ShoutcastMediaStreamSource j'ai implémenté du code de ManagedMediaHelpers.
Merci
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);
}
}
avez-vous compris cela, j'essaye d'obtenir le quelque chose fait. Des prospects? –
Juste pour les coups de pied, ne pas passer un en-tête ICY, juste utiliser HTTP régulier, et le charger avec un point-virgule dans l'URL, comme ceci: 'http: //10.12.13.14: 8000 /;' – Brad