【发布时间】:2017-08-09 19:32:56
【问题描述】:
我有一个 tvOS 应用程序,其中播放视频。 基本上有两个视频(同一视频的不同速度版本)。一个是 12MB,另一个是 1.9MB。
当应用启动时,它运行良好(Xcode 显示 191MB)。但是,当单击一次正常速度按钮时,内存会增加到 350MB。当我分别单击正常和快速按钮时,它会继续增加,并在某一时刻变成 1GB+。你可以看到附件。当视频卡顿和应用停止时,它甚至达到了 3GB。
有什么办法可以解决内存问题,避免应用停止?
另一个问题是:在 Apple TV 中,当我们从这个应用程序转到另一个应用程序并返回时,视频再次停止。但是,在模拟器中,它没有发生。有人可以帮我解决这两个问题吗?
这是我正在使用的代码:
var avPlayerLayer: AVPlayerLayer!
var paused: Bool = false
func playmyVideo(myString: String) {
let bundle: Bundle = Bundle.main
let videoPlayer: String = bundle.path(forResource: myString, ofType: "mov")!
let movieUrl : NSURL = NSURL.fileURL(withPath: videoPlayer) as NSURL
print(movieUrl)
viewVideo.playVideoWithURL(url: movieUrl)
}
@IBAction func normalPressed(_ sender: Any) {
playmyVideo(myString: "normal")
}
@IBAction func forwardPressed(_ sender: Any) {
playmyVideo(myString: "fast")
}
class VideoPlay: UIView {
private var player : AVPlayer!
private var playerLayer : AVPlayerLayer!
init() {
super.init(frame: CGRect.zero)
self.initializePlayerLayer()
}
override init(frame: CGRect) {
super.init(frame: frame)
self.initializePlayerLayer()
self.autoresizesSubviews = false
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.initializePlayerLayer()
}
private func initializePlayerLayer() {
playerLayer = AVPlayerLayer()
playerLayer.backgroundColor = UIColor.clear.cgColor
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
self.layer.addSublayer(playerLayer)
playerLayer.frame = UIScreen.main.bounds
}
func playVideoWithURL(url: NSURL) {
player = AVPlayer(url: url as URL)
player.isMuted = false
playerLayer.player = player
player.play()
loopVideo(videoPlayer: player)
}
func toggleMute() {
player.isMuted = !player.isMuted
}
func isMuted() -> Bool
{
return player.isMuted
}
func loopVideo(videoPlayer: AVPlayer) {
NotificationCenter.default.addObserver(forName: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil, queue: nil) { notification in
let t1 = CMTimeMake(5, 100);
self.player.seek(to: t1)
videoPlayer.seek(to: kCMTimeZero)
self.player.play()
}
}
}
【问题讨论】:
-
还有一些代码你在用什么?
-
@SamuelTulach 嗨。我已经包含了我们正在使用的代码
-
@SamuelTulach 嗨。请我们审查我的代码...
标签: ios swift memory memory-management tvos