2013-06-30 3 views
1

J'ai un scénario spécifique à mon application. Je gère la playlist de fichiers musicaux en XML pour mon application de métro. Et son chemin réel comme fichiers musicaux sauver ceMediaelement dans Windows 8 Metro App

D: \ MesMédias \ 1.mp3

Je élément multimédia dans ma page XAML et je suis en train de sa source comme celui-ci.

mediaElement.Source = new Uri(@"D:\MyMedia\1.mp3", UriKind.Absolute); 
mediaElement.Play(); 

mais son ne joue pas les médias et leur donner l'erreur comme celui-ci

MF_MEDIA_ENGINE_ERR_SRC_NOT_SUPPORTED : HRESULT - 0x80070005 

Alors quelqu'un me dire comment je peux jouer un fichier multimédia dans MediaElement de l'application du métro avec le chemin absoulte. Ou comment je peux obtenir le flux de mon fichier local pour lire ce média dans mon application mediaElement of Metro.

Répondre

3

Pour ouvrir des fichiers sur le système local, vous pouvez utiliser FileOpenPicker pour obtenir le fichier et SetSource pour définir la source de média.

var openPicker = new Windows.Storage.Pickers.FileOpenPicker(); 

openPicker.FileTypeFilter.Add(".mp3"); 
var file = await openPicker.PickSingleFileAsync(); 

var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read); 

if (null != file) 
{ 
    mediaElement.SetSource(stream, file.ContentType); 
    mediaElement.Play(); 
} 
+0

@Antorio: Comme je l'ai mentionné dans ma question J'ai déjà la liste de lecture signifie tous les endroits. Ensuite, il n'y a pas de logique pour ouvrir filepicker et ce n'est pas la vraie réponse de ma question, mais merci pour votre poste –

+1

@ArslanPervaiz Je pense que c'est la réponse précise à votre question. Le code que vous utilisez fonctionne dans les applications WPF mais dans mon expérience n'est pas dans WinRT. Par conséquent vous devez SetSource selon cette réponse plutôt que Source = selon que vous postez. – rism

0

Cela peut se faire sans un sélecteur de fichier. Vous n'avez qu'à ajouter des fonctionnalités de bibliothèque musicale à votre manifeste d'application, assurez-vous que la musique est dans Ma musique ou sur une carte SD, et utilisez KnownFolders.MusicLibrary.

En bref et en accord avec le thème de la musique de la question:

"Vous pourriez penser sélecteur de fichiers ...

... mais tout ce que je besoin est StorageFile"

// 
    // Opens and plays song titled "[Cars]You_Might_Think.mp3" 
    // in the 80s folder. 
    // 
    // IMPORTANT: the example song must be in the user's Music 
    // folder or SD card to be found. Also, the app manifest 
    // must have 'Music Library' capabilities enabled. 
    // 
    // 
    // 
    async void OpenAndPlayAwesomeSongFromThe80s() 
    {    
     Windows.Storage.StorageFolder folder = KnownFolders.MusicLibrary; 

     StorageFile song = await folder.GetFileAsync("80s\\[Cars]You_Might_Think.mp3"); 

     if (song != null) 
     { 
      IRandomAccessStream stream = await song.OpenAsync(Windows.Storage.FileAccessMode.Read); 

      if (stream != null) 
      { 
       mediaElement = new MediaElement(); 
       mediaElement.SetSource(stream, song.ContentType); 
       mediaElement.Play(); 
      } 
     } 
    } 
0

Je sais qu'il est un vieux problème, je l'ai trouvé une solution très simple ..

Windows.Storage.StorageFile file = null; 
mediaElement player = new MediaElement(); 


    async Task PlayAsync() 
    { 
     if (file == null) 
     { 
      file = await OpenFileAsync(); 

      try { player.MediaOpened -= Player_MediaOpenedAsync; } catch { } 
      try { player.MediaEnded -= Player_MediaEnded; } catch { } 
      try { player.MediaFailed -= Player_MediaFailed; } catch { } 

      player.MediaOpened += Player_MediaOpenedAsync; 
      player.MediaEnded += Player_MediaEnded; 
      player.MediaFailed += Player_MediaFailed; 

      player.SetPlaybackSource(MediaSource.CreateFromStorageFile(file)); //Works with media playback.. 
      //player.Source = new Uri(mediasource, UriKind.RelativeOrAbsolute); //Doesn't work with media playback for some reason.. 
      Playing = true; 
      Paused = false; 
     } 
     else 
     { 
      if (Paused) 
      { 
       player.Play(); 
       Paused = false; 
      } 
      else 
      { 
       player.Pause(); 
       Paused = true; 
      } 
     } 
    } 

    async Task<StorageFile> OpenFileAsync() 
    { 
     try 
     { 
      var ofd = new FileOpenPicker(); 
      ofd.FileTypeFilter.Add("*"); 
      return await ofd.PickSingleFileAsync(); 
     } 
     catch { } 
     return null; 
    } 
Questions connexes