如何在iOS(AVFoundation或其他第三方库)中使用HLS时移功能,例如Android中的ExoPlayer?

时间:2022-12-31 04:51:10

I want to use timeshifting (for live streaming videos) feature in iOS player,But I found no library that support timeshifting. I read documents of lots of libraries like these:

我想在iOS播放器中使用timeshifting(用于直播视频)功能,但我发现没有支持时移的库。我读了许多像这样的库的文档:

1-piemonte 2-kaltura

1-piemonte 2-kaltura

In Android, google introduce ExoPlayer that give us this feature easily. How can I implement this feature in iOS(by swift)? or is there any library that implement that?

在Android中,谷歌推出了ExoPlayer,可以轻松地为我们提供此功能。如何在iOS中实现此功能(通过swift)?或者是否有任何图书馆实现这一点?

1 个解决方案

#1


1  

Try this:

尝试这个:

     @IBOutlet weak var liveView: UIView! //Add `UIView` on your ViewController and create @IBOutlet for it. 
        var player = AVPlayer()
        let playerViewController = AVPlayerViewController()
        override func viewDidLoad() {
           player = AVPlayer(url: URL(string:"Your_HLS_URL")!)
           playerViewController.player = self.player
           playerViewController.player?.play()
           self.configureChildViewController(childController: self.playerViewController, onView: self.liveView)

        }

       func configureChildViewController(childController: UIViewController, onView: UIView?) {
            var holderView = self.view
            if let onView = onView {
                holderView = onView
            }
            addChildViewController(childController)
            holderView?.addSubview(childController.view)
            constrainViewEqual(holderView: holderView!, view: childController.view)
            childController.didMove(toParentViewController: self)
        }

       func constrainViewEqual(holderView: UIView, view: UIView) {
            view.translatesAutoresizingMaskIntoConstraints = false
            //pin 100 points from the top of the super
            let pinTop = NSLayoutConstraint(item: view, attribute: .top, relatedBy: .equal,
                                            toItem: holderView, attribute: .top, multiplier: 1.0, constant: 0)
            let pinBottom = NSLayoutConstraint(item: view, attribute: .bottom, relatedBy: .equal,
                                               toItem: holderView, attribute: .bottom, multiplier: 1.0, constant: 0)
            let pinLeft = NSLayoutConstraint(item: view, attribute: .left, relatedBy: .equal,
                                             toItem: holderView, attribute: .left, multiplier: 1.0, constant: 0)
            let pinRight = NSLayoutConstraint(item: view, attribute: .right, relatedBy: .equal,
                                              toItem: holderView, attribute: .right, multiplier: 1.0, constant: 0)

            holderView.addConstraints([pinTop, pinBottom, pinLeft, pinRight])
        }

#1


1  

Try this:

尝试这个:

     @IBOutlet weak var liveView: UIView! //Add `UIView` on your ViewController and create @IBOutlet for it. 
        var player = AVPlayer()
        let playerViewController = AVPlayerViewController()
        override func viewDidLoad() {
           player = AVPlayer(url: URL(string:"Your_HLS_URL")!)
           playerViewController.player = self.player
           playerViewController.player?.play()
           self.configureChildViewController(childController: self.playerViewController, onView: self.liveView)

        }

       func configureChildViewController(childController: UIViewController, onView: UIView?) {
            var holderView = self.view
            if let onView = onView {
                holderView = onView
            }
            addChildViewController(childController)
            holderView?.addSubview(childController.view)
            constrainViewEqual(holderView: holderView!, view: childController.view)
            childController.didMove(toParentViewController: self)
        }

       func constrainViewEqual(holderView: UIView, view: UIView) {
            view.translatesAutoresizingMaskIntoConstraints = false
            //pin 100 points from the top of the super
            let pinTop = NSLayoutConstraint(item: view, attribute: .top, relatedBy: .equal,
                                            toItem: holderView, attribute: .top, multiplier: 1.0, constant: 0)
            let pinBottom = NSLayoutConstraint(item: view, attribute: .bottom, relatedBy: .equal,
                                               toItem: holderView, attribute: .bottom, multiplier: 1.0, constant: 0)
            let pinLeft = NSLayoutConstraint(item: view, attribute: .left, relatedBy: .equal,
                                             toItem: holderView, attribute: .left, multiplier: 1.0, constant: 0)
            let pinRight = NSLayoutConstraint(item: view, attribute: .right, relatedBy: .equal,
                                              toItem: holderView, attribute: .right, multiplier: 1.0, constant: 0)

            holderView.addConstraints([pinTop, pinBottom, pinLeft, pinRight])
        }