private MediaMetadata GetMetadataFromUrl(NSUrl nsUrl) {
MediaMetadata currentMedia = new MediaMetadata();
try {
SystemLogger.Log(SystemLogger.Module.PLATFORM, "getting metadata from nsUrl RelativeString: "+ nsUrl.RelativeString);
// Getting mime type
currentMedia.MimeType = MediaMetadata.GetMimeTypeFromExtension(nsUrl.RelativeString);
SystemLogger.Log(SystemLogger.Module.PLATFORM, "metadata mimetype: "+ currentMedia.MimeType);
// Getting media type
if(currentMedia.MimeType != null && currentMedia.MimeType.ToString().StartsWith("audio")) {
currentMedia.Type = MediaType.Audio;
} else if (currentMedia.MimeType != null && currentMedia.MimeType.ToString().StartsWith("video")) {
currentMedia.Type = MediaType.Video;
} else if (currentMedia.MimeType != null && currentMedia.MimeType.ToString().StartsWith("image")) {
currentMedia.Type = MediaType.Photo;
} else {
currentMedia.Type = MediaType.NotSupported;
}
AVUrlAsset urlAsset = AVUrlAsset.Create(nsUrl, new AVUrlAssetOptions());
if(urlAsset != null) {
currentMedia.Duration = urlAsset.Duration.Value;
if(urlAsset.Duration.TimeScale != 0) { // TimeScale could be null in some devices
currentMedia.Duration = urlAsset.Duration.Value / urlAsset.Duration.TimeScale;
}
AVMetadataItem[] metadataItems = urlAsset.CommonMetadata; // CommonMetadata could be null in some devices
if(metadataItems != null) {
foreach(AVMetadataItem metadataItem in metadataItems) {
if(metadataItem.CommonKey == "title") {
currentMedia.Title = metadataItem.StringValue.ToString();
currentMedia.Album = metadataItem.Value.ToString();
}
if(metadataItem.CommonKey == "artist") {
currentMedia.Artist = metadataItem.Value.ToString();
}
//TODO map category & handle
}
}
}
} catch (Exception ex) {
SystemLogger.Log(SystemLogger.Module.PLATFORM, "Error getting metadata from [" + nsUrl +"]", ex);
currentMedia = null;
}
return currentMedia;
}