示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }