protected override void OnElementChanged(ElementChangedEventArgs <VideoPlayer> args) { base.OnElementChanged(args); if (args.NewElement != null) { if (Control == null) { player = new AVPlayer(); _playerViewController = new AVPlayerViewController { Player = player, ShowsPlaybackControls = false }; SetNativeControl(_playerViewController.View); } UpdateBackground(); UpdateSource(); UpdatePlayback(); args.NewElement.ResetToStartRequested += OnResetToStartRequested; } if (args.OldElement != null) { args.OldElement.ResetToStartRequested -= OnResetToStartRequested; } }
public override void ViewDidLoad() { base.ViewDidLoad(); View.BackgroundColor = UIColor.White; var player = new AVPlayer(NSUrl.FromString(Screens[Index].VideoUrl)); var playerViewController = new AVPlayerViewController { Player = player, }; AddChildViewController(playerViewController); View.AddSubview(playerViewController.View); #region Layout View.ConstrainLayout(() => playerViewController.View.Frame.GetCenterY() == View.Frame.GetCenterY() && playerViewController.View.Frame.Left == View.Frame.Left && playerViewController.View.Frame.Right == View.Frame.Right // playerViewController.View.Frame.Height >= 240f ); #endregion }
public override void ViewDidLoad() { base.ViewDidLoad(); _closeButton = new UIBarButtonItem(Translation.general_close, UIBarButtonItemStyle.Plain, null); NavigationItem.LeftBarButtonItem = _closeButton; _avplayer = new AVQueuePlayer(); _avplayerController = new AVPlayerViewController(); _avplayerController.Player = _avplayer; AddChildViewController(_avplayerController); View.AddSubview(_avplayerController.View); _avplayerController.View.Transform = CoreGraphics.CGAffineTransform.MakeRotation((nfloat)1.5708); ImageView.Transform = CoreGraphics.CGAffineTransform.MakeRotation((nfloat)1.5708); ImageView.Frame = View.Frame; _avplayerController.View.Frame = View.Frame; _avplayerController.ShowsPlaybackControls = false; // Bring spinner back to front View.BringSubviewToFront(LoadingSpinner); var set = this.CreateBindingSet <DisplayView, DisplayViewModel>(); set.Bind(this).For(v => v.MediaUrl).To(vm => vm.MediaUrl); set.Bind(_closeButton).To(vm => vm.CloseCommand); set.Apply(); }
protected override void OnElementChanged(ElementChangedEventArgs <VideoPlayer> args) { base.OnElementChanged(args); if (args.NewElement != null) { if (Control == null) { _playerViewController = new AVPlayerViewController(); player = new AVPlayer(); _playerViewController.Player = player; var x = _playerViewController.View; SetNativeControl(_playerViewController.View); } SetAreTransportControlsEnabled(); SetSource(); args.NewElement.UpdateStatus += OnUpdateStatus; args.NewElement.PlayRequested += OnPlayRequested; args.NewElement.PauseRequested += OnPauseRequested; args.NewElement.StopRequested += OnStopRequested; } if (args.OldElement != null) { args.OldElement.UpdateStatus -= OnUpdateStatus; args.OldElement.PlayRequested -= OnPlayRequested; args.OldElement.PauseRequested -= OnPauseRequested; args.OldElement.StopRequested -= OnStopRequested; } }
protected override void OnElementChanged(ElementChangedEventArgs <VideoPlayer> e) { base.OnElementChanged(e); if (e.NewElement != null) { if (Control == null) { _playerViewController = new AVPlayerViewController() { ShowsPlaybackControls = true }; _player = new AVPlayer(); _playerViewController.Player = _player; SetNativeControl(_playerViewController.View); } if (e.NewElement.Source is VideoPlayer.FileSource fileSource) { _playerItem = new AVPlayerItem(new NSUrl(fileSource.Path)); } else if (e.NewElement.Source is VideoPlayer.UrlSource urlSource) { _playerItem = new AVPlayerItem(new NSUrl(urlSource.Url)); } _player.ReplaceCurrentItemWithPlayerItem(_playerItem); } if (e.OldElement != null) { } }
public override void PrepareForSegue(UIStoryboardSegue segue, NSObject sender) { base.PrepareForSegue(segue, sender); if (segue.Identifier == AssetListTableViewController.PresentPlayerViewControllerSegueID || sender is AssetListTableViewCell) { var cell = sender as AssetListTableViewCell; var destinationViewController = segue.DestinationViewController as AVPlayerViewController; var asset = cell.Asset; if (destinationViewController == null || asset == null) { return; } playerViewController = destinationViewController; if (AssetPersistenceManager.Current.GetDownloadState(asset) == AssetDownloadState.Downloaded) { if (!asset.UrlAsset.ResourceLoader.PreloadsEligibleContentKeys) { asset.UrlAsset.ResourceLoader.PreloadsEligibleContentKeys = true; } } AssetPlaybackManager.Current.SetAssetForPlayback(asset); } }
protected override void OnElementChanged(ElementChangedEventArgs <VideoPlayerView> e) { base.OnElementChanged(e); if (e.NewElement != null) { if (Control == null) { // Create AVPlayerViewController _playerViewController = new AVPlayerViewController { //ExitsFullScreenWhenPlaybackEnds = true }; // Set Player property to AVPlayer _player = new AVPlayer(new NSUrl(Element.Source)); _playerViewController.Player = _player; // Use the View from the controller as the native control SetNativeControl(_playerViewController.View); } _videoPlayer = e.NewElement; } if (e.OldElement != null) { } }
void SetUpContentPlayer() { var contentURL = new Foundation.NSUrl(contentUrlString); AVPlayer player = new AVPlayer(contentURL); aVPlayerViewController = new AVPlayerViewController(); aVPlayerViewController.Player = player; // Set up your content playhead and contentComplete callback. contentPlayhead = new IMAAVPlayerContentPlayhead(player); NSNotificationCenter.DefaultCenter.AddObserver(new NSString("AVPlayerItemDidPlayToEndTime"), ContentDidFinishPlaying); //NSNotificationCenter.DefaultCenter.AddObserver(this // , new ObjCRuntime.Selector("ViewController.contentDidFinishPlaying(_:)") // , new NSString("AVPlayerItemDidPlayToEndTime") // , player.CurrentItem) ; // contentPlayhead = IMAAVPlayerContentPlayhead(avPlayer: player) //NotificationCenter.default.addObserver( // self, // selector: #selector(ViewController.contentDidFinishPlaying(_:)), // name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, // object: player.currentItem); ShowContentPlayer(); }
protected override void OnElementChanged(ElementChangedEventArgs <VideoPlayer> args) { base.OnElementChanged(args); if (args.NewElement != null) { if (Control == null) { // Create AVPlayerViewController _playerViewController = new AVPlayerViewController(); // Set Player property to AVPlayer player = new AVPlayer(); _playerViewController.Player = player; // Use the View from the controller as the native control SetNativeControl(_playerViewController.View); } SetSource(); args.NewElement.UpdateStatus += OnUpdateStatus; args.NewElement.PlayRequested += OnPlayRequested; args.NewElement.PauseRequested += OnPauseRequested; args.NewElement.StopRequested += OnStopRequested; } if (args.OldElement != null) { args.OldElement.UpdateStatus -= OnUpdateStatus; args.OldElement.PlayRequested -= OnPlayRequested; args.OldElement.PauseRequested -= OnPauseRequested; args.OldElement.StopRequested -= OnStopRequested; } }
private static void ProcessSubtitle( this AVPlayerViewController controller, CMTime time) { NSString text = NSString.Empty; NSArray payload = controller.Payload(); for (nuint i = 0; i < payload.Count; ++i) { NSDictionary item = payload.GetItem <NSDictionary>(i); NSNumber from = item.ObjectForKey(new NSString("from")) as NSNumber; NSNumber to = item.ObjectForKey(new NSString("to")) as NSNumber; if (time.Seconds >= from.FloatValue && time.Seconds < to.FloatValue) { text = item.ObjectForKey(new NSString("text")) as NSString; break; } } UILabel subtitleLabel = controller.SubtitleLabel(); subtitleLabel.Text = text; var attributes = new UIStringAttributes(); attributes.Font = subtitleLabel.Font; CGRect rect = text.GetBoundingRect( new CGSize(subtitleLabel.Bounds.Width, nfloat.MaxValue), NSStringDrawingOptions.UsesLineFragmentOrigin, attributes, null ); controller.SubtitleConstranint().Constant = rect.Size.Height + 5; }
/// <summary> /// Raises the <see cref="E:ElementChanged" /> event. /// </summary> /// <param name="e">The <see cref="ElementChangedEventArgs{VideoPlayer}"/> instance containing the event data.</param> protected override async void OnElementChanged(ElementChangedEventArgs <VideoPlayer> e) { base.OnElementChanged(e); if (Control == null) { // Controller Setup _playerControl = new AVPlayerViewController { View = { Bounds = Bounds, AutoresizingMask = AutoresizingMask }, Player = new AVPlayer() }; SetNativeControl(_playerControl.View); } if (e.NewElement != null) { // Player Setup UpdateDisplayControls(); UpdateVolume(); UpdateFillMode(); UpdateTimeElapsedInterval(); UpdateVisibility(); RegisterEvents(); await UpdateSource(e.OldElement); Element.NativeRenderer = this; } }
private void SetupUserInterface() { var playerUrl = new NSUrl((Element as ViewPlayerPage).Url); playerView = new AVPlayerViewController(); var playerItem = new AVPlayerItem(playerUrl); player = new AVPlayer(playerItem); //var layer = new AVPlayerLayer(); ////给AVPlayer一个播放的layer层 //layer.Player = player; //layer.Frame = new CoreGraphics.CGRect(0, 100, View.Frame.Size.Width, 600); //layer.BackgroundColor = UIColor.Gray.CGColor; ////设置AVPlayer的填充模式 //layer.VideoGravity = AVLayerVideoGravity.Resize; //View.Layer.AddSublayer(layer); //player.Play(); playerView.View.Frame = new CoreGraphics.CGRect(0, (View.Frame.Size.Height - 320) / 2, View.Frame.Size.Width, 320); playerView.ShowsPlaybackControls = true; playerView.Player = player; playerView.View.TranslatesAutoresizingMaskIntoConstraints = true; View.AddSubview(playerView.View); ViewController.PresentViewController(playerView, true, null); player.Play(); }
private async Task SetSource(AtomVideoSource source) { try { asset = await LoadAsset(source); playerItem = new AVPlayerItem(asset); player = new AVPlayer(playerItem); playerController = new AVPlayerViewController(); Control.AddSubview(playerController.View); playerController.Player = player; playerController.View.Frame = Control.Frame; player.Seek(CMTime.FromSeconds(1, 1000)); if (Element.IsPlaying) { player.Play(); } } catch (Exception ex) { AtomDevice.Instance.Log(ex); } }
public override void RowSelected(UITableView tableView, NSIndexPath indexPath) { var cell = tableView.CellAt(indexPath) as ContentMusicTvCell; tableView.DeselectRow(indexPath, true); var asset = saved ? savedAssets [indexPath.Row] : allAssets [indexPath.Row]; if (asset != null) { if (asset.Music.ContentType == AvContentTypes.Video) { playerViewController = new AVPlayerViewController(); PresentViewController(playerViewController, true, null); } BeginInvokeOnMainThread(() => { var playing = AssetPlaybackManager.Shared.TogglePlayback(asset); if (indexPathCache != null && indexPathCache != indexPath) { if (tableView.IndexPathsForVisibleRows.Contains(indexPathCache)) { var oldCell = tableView.CellAt(indexPathCache) as ContentMusicTvCell; oldCell?.SetPlaying(false); } } indexPathCache = indexPath; if (asset.Music.ContentType == AvContentTypes.Audio) { if (NavigationController.ToolbarHidden) { NavigationController.SetToolbarHidden(false, true); } cell?.SetPlaying(playing); var items = ToolbarItems; items [0] = playing ? pauseButton : playButton; //items [2].Title = asset.Music.DisplayName; titleButton.Title = asset.Music.DisplayName; SetToolbarItems(items, true); } else if (!NavigationController.ToolbarHidden) { NavigationController.SetToolbarHidden(true, false); } }); } }
private static NSArray Payload( this AVPlayerViewController controller) { return(GetProperty <NSArray>( controller, SubtitleKeys.Payload )); }
public static UILabel SubtitleLabel( this AVPlayerViewController controller) { return(GetProperty <UILabel>( controller, SubtitleKeys.Label )); }
public AVPlayerViewController PlayerController() { if (_player == null) { _player = new AVPlayerViewController(); } return(_player); }
private static NSLayoutConstraint SubtitleConstranint( this AVPlayerViewController controller) { return(GetProperty <NSLayoutConstraint>( controller, SubtitleKeys.Height )); }
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); }
public void PreparePrerollAds_New() { if (!UIDevice.CurrentDevice.CheckSystemVersion(8, 0)) { Assert.Inconclusive("Requires 8.0+"); } AVPlayerViewController.PrepareForPrerollAds(); }
private static T GetProperty <T>( this AVPlayerViewController controller, NSString propertyKey) where T : NSObject { var pointer = objc_getAssociatedObject( controller.Handle, propertyKey.Handle ); return(Runtime.GetNSObject <T>(pointer)); }
public static void SetSubtitleLabel( this AVPlayerViewController controller, UILabel label) { SetProperty <UILabel>( controller, SubtitleKeys.Label, label, AssociationPolicy.RetainNonAtomic ); }
private static void SetPayload( this AVPlayerViewController controller, NSArray payload) { SetProperty <NSArray>( controller, SubtitleKeys.Payload, payload, AssociationPolicy.RetainNonAtomic ); }
private static void SetSubtitleConstraint( this AVPlayerViewController controller, NSLayoutConstraint constraint) { SetProperty <NSLayoutConstraint>( controller, SubtitleKeys.Height, constraint, AssociationPolicy.RetainNonAtomic ); }
public override void ViewWillAppear(bool animated) { base.ViewWillAppear(animated); if (playerViewController != null) { // The view reappeared as a results of dismissing an AVPlayerViewController. AssetPlaybackManager.Current.SetAssetForPlayback(null); playerViewController.Player = null; playerViewController = null; } }
//messaging center class private void HandleShowVideoPlayerMessage(Page page, ShowVideoPlayerArguments arguments) { var presentingViewController = GetMostPresentedViewController(); var url = NSUrl.FromString(arguments.Url); var avp = new AVPlayer(url); var avpvc = new AVPlayerViewController(); avpvc.Player = avp; avp.Play(); presentingViewController.PresentViewController(avpvc, animated: true, completionHandler: null); }
public void PlayVideo(string url) { var player = new AVPlayer(new NSUrl(url)); var controller = new AVPlayerViewController { Player = player }; var rootViewController = UIApplication.SharedApplication.KeyWindow.RootViewController; rootViewController.PresentViewController(controller, true, () => player.Play()); }
private static void SetProperty <T>( this AVPlayerViewController controller, NSString propertyKey, T value, AssociationPolicy policy) where T : NSObject { objc_setAssociatedObject( controller.Handle, propertyKey.Handle, value.Handle, policy ); }
public static void ShowSubtitles( this AVPlayerViewController controller, NSUrl fileUrl) { var subtitles = ParseSubtitles(fileUrl); controller.SetPayload(subtitles); controller.AddSubtitleLabel(); controller.Player.AddPeriodicTimeObserver( new CMTime(1, 60), DispatchQueue.MainQueue, controller.ProcessSubtitle ); }
public override void ViewDidLoad() { base.ViewDidLoad(); var url = NSUrl.FromString(pathVideo); var avp = new AVPlayer(url); var avpvc = new AVPlayerViewController(); avpvc.Player = avp; this.AddChildViewController(avpvc); this.View.AddSubview(avpvc.View); avpvc.View.Frame = this.View.Frame; avp.Play(); }