Пример #1
0
        void InitVideoPlayer()
        {
            var path = Path.Combine(NSBundle.MainBundle.BundlePath, Element.Source);

            if (!NSFileManager.DefaultManager.FileExists(path))
            {
                Console.WriteLine("Video not exist");
                _videoPlayer = new AVPlayerViewController();
                _videoPlayer.ShowsPlaybackControls = false;
                _videoPlayer.Player.Volume         = 0;
                _videoPlayer.VideoGravity          = AVLayerVideoGravity.ResizeAspectFill;


                _videoPlayer.View.BackgroundColor = UIColor.Clear;
                SetNativeControl(_videoPlayer.View);
                return;
            }

            _queuePlayer = new AVQueuePlayer();

            // Load the video from the app bundle.
            NSUrl videoUrl = new NSUrl(path, false);


            // Create and configure the movie player.
            _videoPlayer = new AVPlayerViewController
            {
                View =
                {
                    Bounds           = Bounds,
                    AutoresizingMask = AutoresizingMask
                },
                Player = (Element.Loop)?_queuePlayer: new AVPlayer(videoUrl)
            };
            var playerItem = new AVPlayerItem(videoUrl);

            _videoPlayer.ShowsPlaybackControls = false;
            _videoPlayer.Player.Volume         = 0;
            _videoPlayer.VideoGravity          = AVLayerVideoGravity.ResizeAspectFill;
            _looper = new AVPlayerLooper(_queuePlayer, playerItem, CoreMedia.CMTimeRange.InvalidRange);

            _videoPlayer.View.BackgroundColor = UIColor.Clear;
            foreach (UIView subView in _videoPlayer.View.Subviews)
            {
                subView.BackgroundColor = UIColor.Clear;
            }

            if (Element.Loop)
            {
                _queuePlayer.Play();
            }
            else
            {
                _videoPlayer.Player.Play();
            }

            SetNativeControl(_videoPlayer.View);
        }
Пример #2
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            if (string.IsNullOrEmpty(FilePath) || !File.Exists(FilePath))
            {
                NavigationController.PopViewController(true);
            }

            string taskType = Task.TaskType.IdName;

            if (taskType == "LISTEN_AUDIO" || taskType == "REC_AUDIO" || taskType == "TAKE_VIDEO")
            {
                // Load video, play and loop
                playerItem   = AVPlayerItem.FromUrl(NSUrl.FromFilename(FilePath));
                player       = AVQueuePlayer.FromItems(new AVPlayerItem[] { playerItem });
                playerLayer  = AVPlayerLayer.FromPlayer(player);
                playerLooper = AVPlayerLooper.FromPlayer(player, playerItem);

                if (taskType == "TAKE_VIDEO")
                {
                    playerLayer.Frame = View.Frame;
                    View.Layer.AddSublayer(playerLayer);
                }
                else
                {
                    ImageView.Hidden = true;
                    AudioIcon.Hidden = false;
                    DescLabel.Text   = Task.Description;
                }

                player.Play();
            }
            else
            {
                // Load image
                ImageService.Instance.LoadFile(FilePath).Error((e) =>
                {
                    Console.WriteLine("ERROR LOADING IMAGE: " + e.Message);
                    NavigationController.PopViewController(true);
                }).Into(ImageView);
            }

            if (DeleteResult != null)
            {
                UIBarButtonItem customButton = new UIBarButtonItem(
                    UIImage.FromFile("ic_delete"),
                    UIBarButtonItemStyle.Plain,
                    (s, e) =>
                {
                    ConfirmDelete();
                }
                    );

                NavigationItem.RightBarButtonItem = customButton;
            }
        }
Пример #3
0
        public void TestLoopingEnabled()
        {
            string file = Path.Combine(NSBundle.MainBundle.ResourcePath, "Hand.wav");

            Assert.True(File.Exists(file), file);
            using (var url = new NSUrl(file))
                using (var playerItem = AVPlayerItem.FromUrl(url))
                    using (AVQueuePlayer player = AVQueuePlayer.FromItems(new[] { playerItem }))
                        using (var playerLooper = AVPlayerLooper.FromPlayer(player, playerItem)) {
                            Assert.True(playerLooper.LoopingEnabled, "The default value should be true.");
                            playerLooper.DisableLooping();
                            Assert.False(playerLooper.LoopingEnabled, "Looping enabled should return false after 'DisableLooping'");
                        }
        }
Пример #4
0
        private void Play()
        {
            if (string.IsNullOrEmpty(MediaUrl))
            {
                LoadingSpinner.Hidden = true;
                return;
            }

            //f4v is not supported on iOS (thanks Apple)
            if (MediaUrl.EndsWith(".f4v", StringComparison.CurrentCultureIgnoreCase))
            {
                //Show alert
                LoadingSpinner.Hidden = true;
                _dialog.Show(Translation.alert_display_failed_title,
                             Translation.alert_display_failed_body,
                             Translation.general_close,
                             async() => { await ViewModel?.CloseCommand?.ExecuteAsync(); });
                return;
            }

            if (MediaUrl.EndsWith(".mp4", StringComparison.CurrentCultureIgnoreCase) ||
                MediaUrl.EndsWith(".m4v", StringComparison.CurrentCultureIgnoreCase))
            {
                ImageView.Hidden = true;

                NSUrl        url  = NSUrl.CreateFileUrl(MediaUrl, null);
                AVPlayerItem item = new AVPlayerItem(url);

                _avLooper = new AVPlayerLooper(_avplayer, item, CoreMedia.CMTimeRange.InvalidRange);
                _avplayer.ReplaceCurrentItemWithPlayerItem(item);
                _avplayer.Play();
            }
            else if (MediaUrl.EndsWith(".png", StringComparison.CurrentCultureIgnoreCase))
            {
                _avplayer.Dispose();
                _avplayer = null;

                _avplayerController.RemoveFromParentViewController();
                _avplayerController.View.RemoveFromSuperview();
                _avplayerController.Dispose();
                _avplayerController = null;

                UIImage image = UIImage.FromFile(MediaUrl);
                ImageView.Image = image;
            }


            LoadingSpinner.Hidden = true;
        }
        private void PlayVideo()
        {
            var videoUrl = GetVideoUrl(Element.Source);

            if (videoUrl == null)
            {
                Console.WriteLine($"Video {Element.Source} not found");
                return;
            }

            var itemToPlay = new AVPlayerItem(AVAsset.FromUrl(videoUrl));

            _playerLooper = AVPlayerLooper.FromPlayer(_player, itemToPlay, CMTimeRange.InvalidRange);

            if (itemToPlay != null)
            {
                _player.Play();
            }
        }
Пример #6
0
        public void PhotoLibraryDidChange(PHChange changeInstance)
        {
            // Call might come on any background queue. Re-dispatch to the main queue to handle it.
            DispatchQueue.MainQueue.DispatchAsync(() =>
            {
                // Check if there are changes to the asset we're displaying.
                PHObjectChangeDetails changeDetails = changeInstance.GetObjectChangeDetails(Asset);
                if (changeDetails == null)
                {
                    return;
                }

                // Get the updated asset.
                var assetAfterChanges = changeDetails.ObjectAfterChanges as PHAsset;
                if (assetAfterChanges == null)
                {
                    return;
                }

                Asset = (PHAsset)assetAfterChanges;

                if (Asset != null)
                {
                    FavoriteButton.Title = Asset.Favorite ? "♥︎" : "♡";
                }

                // If the asset's content changed, update the image and stop any video playback.
                if (changeDetails.AssetContentChanged)
                {
                    UpdateContent();

                    playerLayer?.RemoveFromSuperLayer();
                    playerLayer  = null;
                    playerLooper = null;
                }
            });
        }
Пример #7
0
        partial void Play(NSObject sender)
        {
            // An AVPlayerLayer has already been created for this asset; just play it.
            if (playerLayer != null)
            {
                playerLayer.Player.Play();
            }
            else
            {
                var options = new PHVideoRequestOptions
                {
                    NetworkAccessAllowed = true,
                    DeliveryMode         = PHVideoRequestOptionsDeliveryMode.Automatic,
                    ProgressHandler      = (double progress, NSError error, out bool stop, NSDictionary info) =>
                    {
                        stop = false;

                        // Handler might not be called on the main queue, so re-dispatch for UI work.
                        DispatchQueue.MainQueue.DispatchSync(() =>
                        {
                            ProgressView.Progress = (float)progress;
                        });
                    }
                };

                // Request an AVAsset for the displayed PHAsset and set up a layer for playing it.
                PHImageManager.DefaultManager.RequestPlayerItem(Asset, options, (playerItem, info) =>
                {
                    DispatchQueue.MainQueue.DispatchSync(() =>
                    {
                        if (this.playerLayer != null || playerItem == null)
                        {
                            return;
                        }

                        // Create an AVPlayer and AVPlayerLayer with the AVPlayerItem.
                        AVPlayer player;

                        if (Asset.PlaybackStyle == PHAssetPlaybackStyle.VideoLooping)
                        {
                            var queuePlayer = AVQueuePlayer.FromItems(new[] { playerItem });
                            playerLooper    = AVPlayerLooper.FromPlayer(queuePlayer, playerItem);
                            player          = queuePlayer;
                        }
                        else
                        {
                            player = AVPlayer.FromPlayerItem(playerItem);
                        }

                        var playerLayer = AVPlayerLayer.FromPlayer(player);

                        // Configure the AVPlayerLayer and add it to the view.
                        playerLayer.VideoGravity = AVLayerVideoGravity.ResizeAspect;
                        playerLayer.Frame        = View.Layer.Bounds;
                        View.Layer.AddSublayer(playerLayer);

                        player.Play();

                        // Refer to the player layer so we can remove it later.
                        this.playerLayer = playerLayer;
                    });
                });
            }
        }