2017-06-13 164 views
0

我有一個AVPlayer,我想暫停並在點擊時繼續。暫停/播放AVPlayer的問題

我決定去做這件事的方法是在AVPlayer所附的視圖上使用tapGestureRecognizer。

當有一個水龍頭布爾變量didSelect變爲真時。當第二次敲擊時,didSelect變爲假。

有趣的是,當我在AVPlayerItemDidPlayToEndTime通知使用

if didSelect == false { 
     player.play() 
    } 

    if didSelect == true { 
     player.pause() 
    } 

,它工作正常,但只有後的視頻完整。這讓我想知道是否有沿AVPlayerItemIsIsPlaying的行通知,但我還沒有找到任何東西。

下面是代碼的樣子。

playerView.layer.cornerRadius = playerView.bounds.width * 0.025 

    guard let path = Bundle.main.path(forResource: "video", ofType:"mp4") else { 
     debugPrint("video.m4v not found") 
     return 
    } 

    let player = AVPlayer(url: URL(fileURLWithPath: path)) 

    let playerLayer = AVPlayerLayer(player: player) 
    playerLayer.frame = playerView.frame 
    playerLayer.frame = self.frame 

    playerLayer.frame = playerView.bounds 
    playerLayer.masksToBounds = true 
    playerLayer.cornerRadius = playerView.bounds.width * 0.025 

    playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill 


    self.playerView.layer.addSublayer(playerLayer) 

     player.isMuted = true 
     player.play() 




    if didSelect == false { 
     player.play() 
    } 

    if didSelect == true { 
     player.pause() 
    } 

    //looper 
    NotificationCenter.default.addObserver(forName: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem, queue: nil) 
    { notification in 
     let t1 = CMTimeMake(5, 100) 
     player.seek(to: t1) 

     player.play() 
    } 

回答

0

我創建了一個全球參考玩家

var player: AVPlayer?

,並引用了在UITapGestureRecognizer功能,現在控制暫停/從那裏玩。

0

我遇到了同樣的問題,最終創建了一個將playblack控件嵌入到視頻中的AVPLayerViewController。

這是修改過的代碼,我希望它有幫助。

import AVKit 
import AVFoundation 

let avController = AVPlayerViewController() 
avController.showsPlaybackControls = true 

let player = AVPlayer(url: URL(fileURLWithPath: path)) 

let playerLayer = AVPlayerLayer(player: player) 
playerLayer.frame = playerView.frame 


playerLayer.frame = playerView.bounds 
playerLayer.masksToBounds = true 
playerLayer.cornerRadius = playerView.bounds.width * 0.025 

playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill 

avController.player = playerLayer 

avController.view.frame = playerView.bounds 

self.playerView.addSubview(avController.view)