void HandleCameraFinishedPickingMedia(object sender, UIImagePickerMediaPickedEventArgs e) { UIApplication.SharedApplication.InvokeOnMainThread(delegate { IPhoneServiceLocator.CurrentDelegate.MainUIViewController().DismissModalViewController(true); }); SystemLogger.Log(SystemLogger.Module.PLATFORM, "Camera FinishedPickingMedia " + e.Info); MediaMetadata mediaData = new MediaMetadata(); try { NSString mediaType = (NSString)e.Info.ValueForKey(UIImagePickerController.MediaType); UIImage image = (UIImage)e.Info.ValueForKey(UIImagePickerController.OriginalImage); if (image != null && mediaType != null && mediaType == "public.image") // "public.image" is the default UTI (uniform type) for images. { mediaData.Type = MediaType.Photo; mediaData.MimeType = MediaMetadata.GetMimeTypeFromExtension(".jpg"); mediaData.Title = (image.GetHashCode() & 0x7FFFFFFF) + ".JPG"; NSData imageData = image.AsJPEG(); if (imageData != null) { SystemLogger.Log(SystemLogger.Module.PLATFORM, "Getting image data raw data..."); byte[] buffer = new byte[imageData.Length]; Marshal.Copy(imageData.Bytes, buffer, 0, buffer.Length); IFileSystem fileSystemService = (IFileSystem)IPhoneServiceLocator.GetInstance().GetService("file"); SystemLogger.Log(SystemLogger.Module.CORE, "Storing media file on application filesystem..."); mediaData.ReferenceUrl = fileSystemService.StoreFile(IPhoneMedia.ASSETS_PATH, mediaData.Title, buffer); } SystemLogger.Log(SystemLogger.Module.PLATFORM, mediaData.MimeType + ", " + mediaData.ReferenceUrl + ", " + mediaData.Title); } } catch (Exception ex) { SystemLogger.Log(SystemLogger.Module.PLATFORM, "Error when extracting information from media file: " + ex.Message, ex); } IPhoneUtils.GetInstance().FireUnityJavascriptEvent("Appverse.Media.onFinishedPickingImage", mediaData); }
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); }
void HandleImagePickerControllerFinishedPickingMedia(object sender, UIImagePickerMediaPickedEventArgs e) { UIApplication.SharedApplication.InvokeOnMainThread(delegate { if (popover != null && popover.PopoverVisible) { popover.Dismiss(true); popover.Dispose(); } else { IPhoneServiceLocator.CurrentDelegate.MainUIViewController().DismissModalViewController(true); } }); SystemLogger.Log(SystemLogger.Module.PLATFORM, "FinishedPickingMedia " + e.Info); MediaMetadata mediaData = new MediaMetadata(); mediaData.Type = MediaType.NotSupported; try { NSString mediaType = (NSString)e.Info.ValueForKey(UIImagePickerController.MediaType); UIImage image = (UIImage)e.Info.ValueForKey(UIImagePickerController.OriginalImage); object url = e.Info.ValueForKey(UIImagePickerController.ReferenceUrl); NSUrl nsReferenceUrl = new NSUrl(url.ToString()); if (image != null && mediaType != null && mediaType == "public.image") // "public.image" is the default UTI (uniform type) for images. { mediaData.Type = MediaType.Photo; string fileExtension = Path.GetExtension(nsReferenceUrl.Path.ToLower()); mediaData.MimeType = MediaMetadata.GetMimeTypeFromExtension(fileExtension); mediaData.Title = this.GetImageMediaTitle(nsReferenceUrl.AbsoluteString); NSData imageData = null; if (mediaData.MimeType == "image/png" || mediaData.MimeType == "image/gif" || mediaData.MimeType == "image/tiff") { imageData = image.AsPNG(); } else if (mediaData.MimeType == "image/jpeg" || mediaData.MimeType == "image/jpg") { imageData = image.AsJPEG(); } if (imageData != null) { SystemLogger.Log(SystemLogger.Module.PLATFORM, "Getting image data raw data..."); byte[] buffer = new byte[imageData.Length]; Marshal.Copy(imageData.Bytes, buffer, 0, buffer.Length); IFileSystem fileSystemService = (IFileSystem)IPhoneServiceLocator.GetInstance().GetService("file"); SystemLogger.Log(SystemLogger.Module.CORE, "Storing media file on application filesystem..."); mediaData.ReferenceUrl = fileSystemService.StoreFile(IPhoneMedia.ASSETS_PATH, mediaData.Title, buffer); } SystemLogger.Log(SystemLogger.Module.PLATFORM, mediaData.MimeType + ", " + mediaData.ReferenceUrl + ", " + mediaData.Title); } } catch (Exception ex) { SystemLogger.Log(SystemLogger.Module.PLATFORM, "Error when extracting information from media file: " + ex.Message, ex); } IPhoneUtils.GetInstance().FireUnityJavascriptEvent("Appverse.Media.onFinishedPickingImage", mediaData); }