MPMoviePlayerController 初始播放时间属性在 iOS 8.4 中不起作用

作者:编程家 分类: objective 时间:2025-05-25

MPMoviePlayerController 初始播放时间属性在 iOS 8.4 中不起作用

在 iOS 8.4 版本中,开发者们可能会遇到一个问题,即 MPMoviePlayerController 的初始播放时间属性无法正常起作用。这个问题可能会导致视频无法从指定的时间点开始播放,而是从视频的起始位置开始播放。本文将探讨这个问题,并提供一些解决方案。

问题描述

在 iOS 8.4 版本中,当开发者使用 MPMoviePlayerController 控制视频播放时,设置初始播放时间属性(initialPlaybackTime)可能无法正常工作。即便设置了一个特定的时间点,视频仍然会从起始位置开始播放,而不是从指定的时间点开始。

这个问题可能会对开发者的应用产生一定的影响,特别是对于那些需要从特定时间点开始播放视频的应用。例如,在一些教育应用或媒体应用中,用户可能希望从视频的特定部分开始观看,而不是从一开始就播放。

解决方案

虽然在 iOS 8.4 中 MPMoviePlayerController 的初始播放时间属性无法正常工作,但是开发者们仍然有一些解决方案来解决这个问题。

解决方案一:使用 AVPlayerViewController

一个可行的解决方案是使用 AVPlayerViewController 来替代 MPMoviePlayerController。AVPlayerViewController 是 iOS 8 引入的新的视频播放控制器,它提供了更多的功能和定制选项。

使用 AVPlayerViewController,开发者可以通过设置初始时间点来控制视频的播放。下面是一个简单的示例代码:

swift

let videoURL = URL(string: "https://example.com/video.mp4")

let player = AVPlayer(url: videoURL)

let playerViewController = AVPlayerViewController()

playerViewController.player = player

playerViewController.player?.seek(to: CMTime(seconds: 30, preferredTimescale: 1))

present(playerViewController, animated: true) {

playerViewController.player?.play()

}

在上述代码中,我们首先创建了一个 AVPlayer 对象,并将视频的 URL 传递给它。然后,我们创建了一个 AVPlayerViewController,并将 AVPlayer 对象设置为其 player 属性。

接下来,我们使用 seek 方法将视频播放器的当前时间点设置为指定的时间点。在这个例子中,我们将视频的初始播放时间点设置为 30 秒。

最后,我们通过 present 方法将 AVPlayerViewController 呈现出来,并使用 play 方法开始播放视频。

这种方法可以在 iOS 8.0 及更高版本中使用,并且可以正常工作。

解决方案二:手动跳转到指定时间点

另一个解决方案是手动跳转到指定的时间点。虽然这种方法相对复杂一些,但是它可以在 iOS 8.4 中正常工作。

下面是一个示例代码:

swift

let videoURL = URL(string: "https://example.com/video.mp4")

let player = MPMoviePlayerController(contentURL: videoURL)

player.prepareToPlay()

player.view.frame = view.bounds

view.addSubview(player.view)

NotificationCenter.default.addObserver(forName: NSNotification.Name.MPMoviePlayerPlaybackDidFinish, object: nil, queue: nil) { notification in

player.currentPlaybackTime = 30

player.play()

}

player.play()

在上述代码中,我们首先创建了一个 MPMoviePlayerController,并将视频的 URL 传递给它。然后,我们调用 prepareToPlay 方法准备视频播放器。

接下来,我们将视频播放器的视图添加到当前视图中,并设置其 frame。

然后,我们使用 NotificationCenter 来监听 MPMoviePlayerPlaybackDidFinish 通知。当视频播放完成时,我们手动将当前播放时间点设置为指定的时间点,然后调用 play 方法开始播放视频。

这种方法可以在 iOS 8.4 中正常工作,但相对于使用 AVPlayerViewController,它需要更多的手动处理。

在 iOS 8.4 中,MPMoviePlayerController 的初始播放时间属性可能无法正常工作。为了解决这个问题,开发者可以考虑使用 AVPlayerViewController 或手动跳转到指定的时间点来控制视频的播放。这两种方法都可以在 iOS 8.4 中正常工作,并且可以满足开发者的需求。