如何快速制作循环播放的视频

snu*_*mas 1 video loops ios swift

我将如何制作一个.mp4没有声音的本地文件循环播放,因此它只占用屏幕的一部分,并且没有用户控件。只是一个循环播放的视频,有点像gif。我使用xcodeswift2

class ViewController: UIViewController {

    var playerViewController = AVPlayerViewController()
    var playerView = AVPlayer()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

    }

    override func viewDidAppear(animated: Bool) {
        var fileURL = NSURL(fileURLWithPath: "/Users/Mantas/Desktop/123/123/video-1453562323.mp4.mp4")
        playerView = AVPlayer(URL: fileURL)

        playerViewController.player = playerView

        self.presentViewController(playerViewController, animated: true){

            self.playerViewController.player?.play()

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经做到了,它可以播放视频,但是在全屏模式下,我不知道如何使其仅占据屏幕的一部分以及如何使其循环播放

May*_*tel 7

在视频结束时添加观察者,您可以重播视频

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear()

    var fileURL = NSURL(fileURLWithPath: "/Users/Mantas/Desktop/123/123/video-1453562323.mp4.mp4")
    playerView = AVPlayer(URL: fileURL)

    NSNotificationCenter.defaultCenter().addObserver(self,
    selector: "playerItemDidReachEnd:",
    name: AVPlayerItemDidPlayToEndTimeNotification,
    object: self.playerView.currentItem) // Add observer

    playerViewController.player = playerView

    //amend the frame of the view
    self.playerViewController.player.frame = CGRectMake(0, 0, 200, 200)
    //reset the layer's frame, and re-add it to the view
    var playerLayer: AVPlayerLayer =   AVPlayerLayer.playerLayerWithPlayer(self.playerView)
    playerLayer.frame = videoHolderView.bounds
    videoHolderView.layer.addSublayer(playerLayer)

    /* Full Screen
    self.presentViewController(playerViewController, animated: true){

        self.playerViewController.player?.play()

    }  */
}

func playerItemDidReachEnd(notification: NSNotification) {
   self.playerView.seekToTime(kCMTimeZero)
   self.playerView.play()
}
Run Code Online (Sandbox Code Playgroud)


Rei*_*eid 6

Swift 3.0的替代版本:

添加以下属性:

fileprivate var player: AVPlayer? {
    didSet { player?.play() }
}

fileprivate var playerObserver: Any?
Run Code Online (Sandbox Code Playgroud)

将此添加到您的deinit中:

deinit {
    guard let observer = playerObserver else { return }
    NotificationCenter.default.removeObserver(observer)
}
Run Code Online (Sandbox Code Playgroud)

添加此功能:

func videoPlayerLayer() -> AVPlayerLayer {
    let fileURL = URL(fileURLWithPath: mediaPath)
    let player = AVPlayer(url: fileURL)
    let resetPlayer = {
        player.seek(to: kCMTimeZero)
        player.play()
    }
    playerObserver = NotificationCenter.default.addObserver(forName: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem, queue: nil) { notification in
        resetPlayer()
    }
    self.player = player
    return AVPlayerLayer(player: player)
}
Run Code Online (Sandbox Code Playgroud)

然后添加到您想要的任何位置的图层(viewDidLoad,viewDidAppear,viewDidFinishLayingOutSubviews):

let playerLayer = videoPlayerLayer()
playerLayer.frame = view.bounds
view.layer.insertSublayer(playerLayer, at: 0)
Run Code Online (Sandbox Code Playgroud)