ios - Objective C 如何为 AVPlayer 提供多种文件路径可能性

标签 ios objective-c animation video avplayer

我正在使用 AVPlayer 在没有控件的情况下加载并充当动画。背景呈现动画的第一个和最后一个屏幕。

AVPlayerController 出现时,屏幕闪烁黑色 瞬间,因为 Controller 加载了相应的视频。

显而易见的答案是尽快预加载 AVPlayerController,即在页面加载时预加载。

但是,我的问题是,根据用户点击的按钮,视频必须正确对应。因此,我无法预加载,因为不确定用户需要观看哪个视频。

函数 playAnimation 被调用并带有相应的视频文件路径。

AVPlayer *player;
AVPlayerViewController *playerViewController;

- (void) playAnimation: (NSString*)filePath {

NSURL *videoURL = [NSURL fileURLWithPath:filePath];
//filePath may be from the Bundle or from the Saved file Directory, it is just the path for the video
player = [AVPlayer playerWithURL:videoURL];
playerViewController = [AVPlayerViewController new];
playerViewController.player = player;
playerViewController.showsPlaybackControls = false;

[self presentViewController:playerViewController animated:false completion:^{

    [playerViewController.player play];//Used to Play animation
}];

是否有任何方法可以预先在 viewDidLoad 中加载此视频 Controller ,然后更改其源并根据要求播放而不影响流畅度?

最佳答案

我解决了!

我创建了一个 AVPlayerLayer然后将其附加到 UIView , 它工作而不会导致黑屏闪烁并且看起来过渡更平滑的原因是因为它首先使用正确的视频文件路径进行初始化,然后作为子层添加到 UIView 上然后我打电话播放视频。

这是我最后使用的代码。它可能对任何想知道如何将 AVPlayer 附加到 UIView 的人都有帮助。

AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
CGFloat width = self.view.frame.size.width;
CGFloat height = self.view.frame.size.height;
playerLayer.frame = CGRectMake(0, 0, width, height);

以下代码添加了 AVPlayerLayerUIView但也将它添加到一个图层数组中,当我需要调用 removeFromSuperlayer 时我可以使用它以便在播放结束后关闭。

[self.videoView.layer addSublayer:playerLayer];
[arrayOfLayers addObject:playerLayer];
[playerViewController.player play];

要在播放后关闭 View ,然后添加 notification observer

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playBackFinished:) name:AVPlayerItemDidPlayToEndTimeNotification object:playerItem];
AVPlayerItem *playerItem = player.currentItem;

这是被调用以关闭 View 的函数...

-(void)playBackFinished:(NSNotification *) notification {
    [arrayOfLayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)];
}

关于ios - Objective C 如何为 AVPlayer 提供多种文件路径可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48152247/

相关文章:

javascript - 如何通过 src 为 jQuery 图像转换设置动画

ios - 使用 React Native 隐藏在 TabBarIOS 后面的内容

ios - 显示带有选定行的 UIPickerView

ios - 水平居中多个 UIView

ios - 如何将 MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure 设置为 false?

iphone - 如何比较两个 NSIndexPaths?

javascript - Internet Explorer 中损坏的 d3.js 动画

objective-c - Swift 中的 Objective-C id 的等价物是什么?

ios - "[UIAlertView show]"不显示消息弹窗立即返回

简写的 CSS3 动画播放状态在 IE 和 Safari 中不起作用