2010-12-15 59 views
0

J'ai du mal à comprendre ce problème. J'ai une application Silverlight 4 qui charge des fichiers audio et vidéo à partir d'URL. Les URL sont le même domaine que l'application hébergée et fonctionne très bien pour la vidéo.Silverlight MediaElement refusant de jouer de l'audio

Les URL sont en fait des contrôleurs mvc asp.net qui sont chargés de lire le fichier à partir d'un emplacement partagé et le serveur et de servir un flux de fichiers. Les URL ressemblent à ceci:

http://localhost:31479/CourseMedia?path= \ omnisandbox1 \ ILMSShare2 \ Demo-Fire + Comportement \ media \ Disclaim.wma & crypté = False & id = 00000000-0000-0000-0000-000000000000

Si je mettre l'URL directement dans le navigateur le fichier charge et joue dans Windows Media Player très bien, et si j'utilise un projet de test Silverlight distinct pour charger l'URL, il fonctionne aussi, mais pour la vie de moi, je ne peux pas le faire fonctionner correctement dans mon projet principal.

Ceci est la routine que j'utilise pour faire réellement le réglage de la source:

protected void SetPlayerURL(MediaElement player, string url) 
{ 
     if (player != null && url.Length > 0) 
     { 
      player.ClearValue(MediaElement.SourceProperty); 
      player.Source = new Uri(this.Packet.GetMediaUrl(url, false, Guid.Empty));     
     } 
} 

et la fonction GetMediaURL construit simplement le format d'URL vu ci-dessus:

public string GetMediaUrl(
     string path, 
     bool encrypted, 
     Guid key) 
    { 
     StringBuilder builder = new StringBuilder(); 

     builder.AppendFormat("http://{0}/CourseMedia?path={1}&encrypted={2}&id={3}", 
      this.Host, 
      System.Windows.Browser.HttpUtility.UrlEncode(path), 
      encrypted, 
      key); 

     return builder.ToString(); 
    } 

La demande au contrôleur est jamais fait pour les médias quand il est audio. Cela me semble étrange car ce code fonctionne très bien pour la vidéo. L'état MediaElement ne quitte jamais "Closed" et les événements CurrentStateChanged, MediaOpened et MediaFailed ne sont jamais déclenchés.

Je suis à perte!

+0

Avez-vous vérifié que this.Host et chemin d'accès est valide? – thomasmartinsen

Répondre

0

Essayez de définir ScrubbingEnabled de MediaElement sur false, il y avait quelques problèmes avec Framework version 3.5 et audio et la solution de contournement définissait false. Cela pourrait valoir la peine d'essayer.

Essayez également de capturer BufferingStarted, BufferingEnded, MediaEnded avec vos événements MediaFailed et MediaOpened. Je suis curieux de savoir si c'est un problème de mise en mémoire tampon.

+0

Nous avons finalement compris. Nous avons dû définir Response.BufferingEnabled sur false, puis les médias ont commencé à bien fonctionner. – moshjeier