当前位置: 首页 > 面试题库 >

使用AVFoundation AVPlayer循环播放视频?

从阎宝
2023-03-14
问题内容

在AVFoundation中是否有相对简单的循环视频的方法

我已经如下创建了我的AVPlayer和AVPlayerLayer:

avPlayer = [[AVPlayer playerWithURL:videoUrl] retain];
avPlayerLayer = [[AVPlayerLayer playerLayerWithPlayer:avPlayer] retain];

avPlayerLayer.frame = contentView.layer.bounds;
[contentView.layer addSublayer: avPlayerLayer];

然后播放以下视频:

[avPlayer play];

视频播放正常,但在最后停止。使用MPMoviePlayerController,您所要做的就是将其repeatMode属性设置为正确的值。在AVPlayer上似乎没有类似的属性。似乎也没有回调可以告诉我电影何时结束,因此我可以寻找开始并再次播放。

我没有使用MPMoviePlayerController,因为它有一些严重的限制。我希望能够一次播放多个视频流。


问题答案:

播放器结束时,您会收到通知。检查一下AVPlayerItemDidPlayToEndTimeNotification

设置播放器时:

对象

  avPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone;

  [[NSNotificationCenter defaultCenter] addObserver:self
                                           selector:@selector(playerItemDidReachEnd:)
                                               name:AVPlayerItemDidPlayToEndTimeNotification
                                             object:[avPlayer currentItem]];

这样可以防止播放器在结尾处暂停。

在通知中:

- (void)playerItemDidReachEnd:(NSNotification *)notification {
    AVPlayerItem *p = [notification object];
    [p seekToTime:kCMTimeZero];
}

这将倒带电影。

释放播放器时,请不要忘记取消注销通知。

迅速

avPlayer?.actionAtItemEnd = .none

NotificationCenter.default.addObserver(self,
                                       selector: #selector(playerItemDidReachEnd(notification:)),
                                       name: .AVPlayerItemDidPlayToEndTime,
                                       object: avPlayer?.currentItem)

@objc func playerItemDidReachEnd(notification: Notification) {
    if let playerItem = notification.object as? AVPlayerItem {
        playerItem.seek(to: kCMTimeZero)
    }
}

迅捷4+

@objc func playerItemDidReachEnd(notification: Notification) {
    if let playerItem = notification.object as? AVPlayerItem {
        playerItem.seek(to: CMTime.zero, completionHandler: nil)
    }
}


 类似资料:
  • 我试图在一个循环中的两个上播放动画,其中ImageViews的图像在每个循环中都发生变化,但正如预期的那样,用户只看到最后一个图像和动画。 在其他文章中,我尝试了和等方法,但都没有成功。 该程序的目的是让用户选择9张照片,然后根据照片的RGB构图与计算机图像进行岩石-纸-剪刀式的格斗。 程序从两个数组列表中获取ImageViews的照片,是drawable文件夹中文件名字符串的数组列表,以及是的数

  • > 上下文 我使用的软件 问题 结果 4.1。实际结果 4.2.预期成果 我尝试了什么来修复这个错误? 如何重现此缺陷:提供所需数据的最小且可测试的示例 这个问题 来源 我想将音频WAV设置为视频WEBM的背景声音。视频可以比音频短,也可以比音频长。在我将音频添加到视频的那一刻,我不知道两个流的长度。音频必须重复,直到视频结束(如果视频在最后一次音频重复结束之前结束,音频可能会被截断)。 我使用f

  • 问题内容: 以下样式只是如何在CSS3中设置过渡的示例。 有没有纯粹的CSS技巧可以使此循环播放? 问题答案: CSS仅从一组样式过渡到另一组样式。您正在寻找的是CSS动画。 您需要定义动画关键帧并将其应用于元素: 请查看上面的链接,以了解如何根据自己的喜好对其进行自定义,然后您必须添加浏览器前缀。

  • 提前感谢!

  • 我们正在使用在Xamarin中构建一个应用程序。在应用程序中,我们需要播放视频,因此我们为此编写了一些代码。但是,视频没有播放,在Android上应用程序崩溃,同时抛出一个通用错误。 这是代码: 视频容器。反恐精英 VideoViewRender。反恐精英 所发生的情况是,被记录到控制台,但没有。我们从Xamarin论坛获得了这段代码,但未能成功实现。我们做错了什么?

  • 我正在尝试播放以下网站的视频(使用JUnit)-Day01。http://www.itelearn.com/live-training/security-testing-live-training我试图实现的是,在播放视频后,我将拍摄一张屏幕截图,以证明视频播放正确。点击Day01视频后,它会在一个新窗口中打开——当我查看代码时,我意识到他们使用了iFrame。我可以关闭此视频窗口,但无法播放/暂