如何在iOS中播放循环视频?

ESP*_*ork 2 video ios avplayer swift

如何在我的故事板中放置视频片段?我只看到:

在此输入图像描述

另外,我在哪里放.mp4文件?

在此输入图像描述

最后,当View Controller启动时,包含循环视频剪辑的正确代码是什么.

 //insert looping video clip here
Run Code Online (Sandbox Code Playgroud)

我熟悉Android Studio/java,可以做到这一点没问题.但是,我对swift和Xcode很新,所以我遇到了麻烦.

Dra*_*ian 6

制作循环视频: -

  • 添加UIView到ViewController,相应地设置约束.

  • 声明:UIView@IBOutlet您符合的类

        @IBOutlet weak var videoView : VideoPlay!
        //Where VideoPlay is a CustomClass for the Video player
    
    Run Code Online (Sandbox Code Playgroud)
  • 为视频播放器创建自定义类UIVew:VideoPlay

    import UIKit
    import AVFoundation
    
    
    
    class VideoPlay: UIView {
    
         private var player : AVPlayer!
    
          private var playerLayer : AVPlayerLayer!
    
        init() {
    
                 super.init(frame: CGRectZero)
                  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.whiteColor().CGColor
                  playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    
                  self.layer.addSublayer(playerLayer)
                  playerLayer.frame = self.bounds
              }
    
              func playVideoWithURL(url: NSURL) {
    
                  player = AVPlayer(URL: url)
                  player.muted = false
    
                  playerLayer.player = player
    
                  player.play()
    
                  loopVideo(player)
              }
    
              func toggleMute() {
                  player.muted = !player.muted
              }
    
              func isMuted() -> Bool
              {
                            return player.muted
              }
    
              func loopVideo(videoPlayer: AVPlayer) {
    
                  NSNotificationCenter.defaultCenter().addObserverForName(AVPlayerItemDidPlayToEndTimeNotification, object: nil, queue: nil) { notification in
    
                      videoPlayer.seekToTime(kCMTimeZero)
                      videoPlayer.play()
                  }
              }
    
          }
    
    Run Code Online (Sandbox Code Playgroud)
  • 修改符合ViewController的StoryBoard: -

       class ViewController: UIViewController {        
    
           @IBOutlet weak var videoView : VideoPlay!  
    
           override func viewDidLoad() {
                   super.viewDidLoad()
                           let bundle: NSBundle = NSBundle.mainBundle()
                           let moviePath: String = bundle.pathForResource("yourVideoFile_Name", ofType: "yourVideoFile_Type")!
                           let movieUrl : NSURL = NSURL.fileURLWithPath(moviePath)
    
                           videoView.playVideoWithURL(movieUrl)
    
    
               }....
         }
    
    Run Code Online (Sandbox Code Playgroud)
  • 由于videoView符合类VideoPlay,您可以访问 VideoPlay全局函数.

至于保存视频文件的位置,请将其保存在主包中,即: - 在您的情况下,Fighting Trainer Pro文件夹

如 :-

toggleMute()

isMuted()

  • Apple在2016年WWDC会议期间提供了一些示例代码(AVPlayerLooper),名为AVFoundation Playback中的Advances.他们的最佳方式讨论循环使用`AVQueuePlayer`幻灯片59视频:http://devstreaming.apple.com/videos/wwdc/2016/503lkp4vimgv7tqecn7/503/503_advances_in_avfoundation_playback.pdf示例代码:https://developer.apple .COM /库/抢鲜/内容/ samplecode/avloopplayer /简介/ Intro.html (3认同)