private async Task PrepareAndPlayMediaPlayerAsync() { try { if (NativeVersion.IsAtLeast(21)) { MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever(); await mediaPlayer.SetDataSourceAsync(ApplicationContext, AndroidNet.Uri.Parse(AudioUrl)); await metaRetriever.SetDataSourceAsync(AudioUrl, new Dictionary <string, string>()); var focusResult = audioManager.RequestAudioFocus(new AudioFocusRequestClass .Builder(AudioFocus.Gain) .SetOnAudioFocusChangeListener(this) .Build()); if (focusResult != AudioFocusRequest.Granted) { // Could not get audio focus Console.WriteLine("Could not get audio focus"); } UpdatePlaybackState(PlaybackStateCode.Buffering); mediaPlayer.PrepareAsync(); AquireWifiLock(); UpdateMediaMetadataCompat(metaRetriever); StartNotification(); byte[] imageByteArray = metaRetriever.GetEmbeddedPicture(); if (imageByteArray == null) { Cover = await BitmapFactory.DecodeResourceAsync(Resources, Resource.Drawable.player_play); } else { Cover = await BitmapFactory.DecodeByteArrayAsync(imageByteArray, 0, imageByteArray.Length); } } } catch (Exception ex) { UpdatePlaybackState(PlaybackStateCode.Stopped); mediaPlayer.Reset(); mediaPlayer.Release(); mediaPlayer = null; // Unable to start playback log error Console.WriteLine(ex); } }
public static Drawable GetSongPicture(string id) { MediaMetadataRetriever metadata = GetMetadata(id); byte[] pictureByteArray = metadata.GetEmbeddedPicture(); if (pictureByteArray != null) { return(new BitmapDrawable(Application.Context.Resources, BitmapFactory.DecodeByteArray(pictureByteArray, 0, pictureByteArray.Length))); } return(null); }
public void GetMetadata(string filepath) { MediaMetadataRetriever artistInfo = new MediaMetadataRetriever(); artistInfo.SetDataSource(filepath); Album = artistInfo.ExtractMetadata(MetadataKey.Album); Artist = artistInfo.ExtractMetadata(MetadataKey.Artist); Genre = artistInfo.ExtractMetadata(MetadataKey.Genre); Duration = artistInfo.ExtractMetadata(MetadataKey.Duration); try { byte[] art = artistInfo.GetEmbeddedPicture(); Image = BitmapFactory.DecodeByteArray(art, 0, art.Length); } catch (Exception e) { Image = null; } }
public async Task <IMediaFile> ExtractMediaInfo(IMediaFile mediaFile) { if (mediaFile.MetadataExtracted) { return(mediaFile); } MediaMetadataRetriever metaRetriever = await GetMetadataRetriever(mediaFile); SetMetadata(mediaFile, metaRetriever); byte[] imageByteArray = null; try { imageByteArray = metaRetriever.GetEmbeddedPicture(); } catch (Exception ex) { Console.WriteLine(ex.Message); } if (imageByteArray == null) { mediaFile.Metadata.AlbumArt = GetTrackCover(mediaFile); } else { try { mediaFile.Metadata.AlbumArt = await BitmapFactory.DecodeByteArrayAsync(imageByteArray, 0, imageByteArray.Length); } catch (Java.Lang.OutOfMemoryError) { mediaFile.Metadata.AlbumArt = null; throw; } } mediaFile.MetadataExtracted = true; return(mediaFile); }
private Bitmap GetCoverFromRetriever(MediaMetadataRetriever retriever) { var bytes = retriever.GetEmbeddedPicture(); return(bytes == null ? null : BitmapFactory.DecodeByteArray(bytes, 0, bytes.Length)); }
/// <summary> /// Intializes the player. /// </summary> public async Task Play() { if (mediaPlayer != null && MediaPlayerState == PlaybackStateCompat.StatePaused) { //We are simply paused so just start again mediaPlayer.Start(); UpdatePlaybackState(PlaybackStateCompat.StatePlaying); StartNotification(); //Update the metadata now that we are playing UpdateMediaMetadataCompat(); return; } if (mediaPlayer == null) { InitializePlayer(); } if (mediaSessionCompat == null) { InitMediaSession(); } if (mediaPlayer.IsPlaying) { UpdatePlaybackState(PlaybackStateCompat.StatePlaying); return; } try { MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever(); await mediaPlayer.SetDataSourceAsync(ApplicationContext, Android.Net.Uri.Parse(audioUrl)); await metaRetriever.SetDataSourceAsync(audioUrl, new Dictionary <string, string>()); var focusResult = audioManager.RequestAudioFocus(this, Stream.Music, AudioFocus.Gain); if (focusResult != AudioFocusRequest.Granted) { //could not get audio focus Console.WriteLine("Could not get audio focus"); } UpdatePlaybackState(PlaybackStateCompat.StateBuffering); mediaPlayer.PrepareAsync(); AquireWifiLock(); UpdateMediaMetadataCompat(metaRetriever); StartNotification(); byte[] imageByteArray = metaRetriever.GetEmbeddedPicture(); if (imageByteArray == null) { Cover = await BitmapFactory.DecodeResourceAsync(Resources, Resource.Drawable.album_art); } else { Cover = await BitmapFactory.DecodeByteArrayAsync(imageByteArray, 0, imageByteArray.Length); } } catch (Exception ex) { UpdatePlaybackState(PlaybackStateCompat.StateStopped); mediaPlayer.Reset(); mediaPlayer.Release(); mediaPlayer = null; //unable to start playback log error Console.WriteLine(ex); } }
protected async Task <IMediaItem> ExtractMediaInfo(MediaMetadataRetriever mediaMetadataRetriever, IMediaItem mediaItem) { if (string.IsNullOrEmpty(mediaItem.Album)) { mediaItem.Album = mediaMetadataRetriever.ExtractMetadata(MetadataKey.Album); } if (string.IsNullOrEmpty(mediaItem.AlbumArtist)) { mediaItem.AlbumArtist = mediaMetadataRetriever.ExtractMetadata(MetadataKey.Albumartist); } if (string.IsNullOrEmpty(mediaItem.Artist)) { mediaItem.Artist = mediaMetadataRetriever.ExtractMetadata(MetadataKey.Artist); } if (string.IsNullOrEmpty(mediaItem.Author)) { mediaItem.Author = mediaMetadataRetriever.ExtractMetadata(MetadataKey.Author); } var trackNumber = mediaMetadataRetriever.ExtractMetadata(MetadataKey.CdTrackNumber); if (!string.IsNullOrEmpty(trackNumber) && int.TryParse(trackNumber, out int trackNumberResult)) { mediaItem.TrackNumber = trackNumberResult; } if (string.IsNullOrEmpty(mediaItem.Compilation)) { mediaItem.Compilation = mediaMetadataRetriever.ExtractMetadata(MetadataKey.Compilation); } if (string.IsNullOrEmpty(mediaItem.Composer)) { mediaItem.Composer = mediaMetadataRetriever.ExtractMetadata(MetadataKey.Composer); } if (string.IsNullOrEmpty(mediaItem.Date)) { mediaItem.Date = mediaMetadataRetriever.ExtractMetadata(MetadataKey.Date); } var discNumber = mediaMetadataRetriever.ExtractMetadata(MetadataKey.DiscNumber); if (!string.IsNullOrEmpty(discNumber) && int.TryParse(discNumber, out int discNumberResult)) { mediaItem.DiscNumber = discNumberResult; } var duration = mediaMetadataRetriever.ExtractMetadata(MetadataKey.Duration); if (!string.IsNullOrEmpty(duration) && int.TryParse(duration, out int durationResult)) { mediaItem.Duration = TimeSpan.FromMilliseconds(durationResult); } if (string.IsNullOrEmpty(mediaItem.Genre)) { mediaItem.Genre = mediaMetadataRetriever.ExtractMetadata(MetadataKey.Genre); } var numTracks = mediaMetadataRetriever.ExtractMetadata(MetadataKey.NumTracks); if (!string.IsNullOrEmpty(numTracks) && int.TryParse(numTracks, out int numTracksResult)) { mediaItem.NumTracks = numTracksResult; } if (string.IsNullOrEmpty(mediaItem.Title)) { mediaItem.Title = mediaMetadataRetriever.ExtractMetadata(MetadataKey.Title); } if (string.IsNullOrEmpty(mediaItem.Writer)) { mediaItem.Writer = mediaMetadataRetriever.ExtractMetadata(MetadataKey.Writer); } var year = mediaMetadataRetriever.ExtractMetadata(MetadataKey.Year); if (!string.IsNullOrEmpty(year) && int.TryParse(year, out int yearResult)) { mediaItem.Year = yearResult; } byte[] imageByteArray = null; try { imageByteArray = mediaMetadataRetriever.GetEmbeddedPicture(); } catch (Exception ex) { Console.WriteLine(ex.Message); } if (imageByteArray == null) { mediaItem.AlbumArt = GetTrackCover(mediaItem); } else { try { mediaItem.AlbumArt = await BitmapFactory.DecodeByteArrayAsync(imageByteArray, 0, imageByteArray.Length); } catch (Java.Lang.OutOfMemoryError) { mediaItem.AlbumArt = null; } } mediaItem.IsMetadataExtracted = true; return(mediaItem); }