swift3.0_IJKPlayer 的应用

前言:用IJKPlayer需要环境搭建,具体可以自行百度。下面是应用IJKPlayer的具体代码,代码中有详细备注。

import IJKMediaFramework

第一步:---注册ijk播放器的通知

//注册ijk播放器的通知

NotificationCenter.default.addObserver(self,elector: #selector(self.moviePlayBackFinish),name: NSNotification.Name.IJKMPMoviePlayerPlaybackDidFinish, object: player)


NotificationCenter.default.addObserver(self,selector: #selector(self.loadStateDidChange),name: NSNotification.Name.IJKMPMoviePlayerLoadStateDidChange, object: player)


第二步:---初始化并开启播放器

func initPlayer(Url: String) {

        let options = IJKFFOptions.byDefault()

        let url = NSURL(string: Url)

        //防止重复打开播放器导致内存溢出

        if player != nil

        {

            player.shutdown()//关闭播放器

        }

        //初始化播放器,播放在线视频或直播

        player = IJKFFMoviePlayerController(contentURL: url as URL!, with: options)

        //播放页面视图宽高自适应

        let autoresize = UIViewAutoresizing.flexibleWidth.rawValue | UIViewAutoresizing.flexibleHeight.rawValue

        player.view.autoresizingMask = UIViewAutoresizing(rawValue: autoresize)

        

        player.view.frame = self.ViewForPlayer.bounds

        player.scalingMode = .aspectFit//缩放模式

        player.shouldAutoplay = true //开启自动播放

        self.ViewForPlayer.addSubview(player.view)

//        self.ViewForPlayer.addSubview(indicator)

        /////////////////

        self.player.currentPlaybackTime = 0.1

        //在子线程打开播放器避免打不开GLES

        DispatchQueue.global().async {

            //开启播放器

            self.player.prepareToPlay()

        }

        

    }


第三步:---接收播放器状态改变的通知

    //视频播放结束原因

    func moviePlayBackFinish(notifycation:Notification)  {

    let reason = notifycation.userInfo?[IJKMPMoviePlayerPlaybackDidFinishReasonUserInfoKey] as! Int

        NSLog("--------------moviePlayBackFinish\(reason)")

        

        switch (reason) {

        case 0://playbackEnded           

        videoStreaming = dao.readVideoStreaming(key: key_VideoStreaming)

            if !videoStreaming.isEmpty || videoStreaming != nil{

                initPlayer(Url: videoStreaming)

            }

            break

            

        case 2://userExited

            

            break

            

        case 1://playbackError

            print("播放错误!")

            break

        default:

            break

        }

    }


    ///加载状态改变了

    func loadStateDidChange()  {

        let loadState = player?.loadState.rawValue

        

        NSLog("--------------loadStateDidChange:\(loadState!)")

        

        //        IJKMPMovieLoadState

        if loadState == 3 {//开始播放视频

            indicator.stopAnimating()

        }else if loadState == 4 {

            indicator.startAnimating()

           

videoStreaming = dao.readVideoStreaming(key: key_VideoStreaming)

            if !videoStreaming.isEmpty || videoStreaming != nil{

                initPlayer(Url: videoStreaming)

            }


        }

        switch self.player.loadState {

        // 状态为缓冲几乎完成,可以连续播放

        case IJKMPMovieLoadState.playthroughOK:


            break

        // 可以播放状态

        case IJKMPMovieLoadState.playable:

            

            break

        // 缓冲中

        case IJKMPMovieLoadState.stalled:

            print("缓冲中")


            break

        default:

            print("loadStateDidChange: \(loadState!)")

        }

  

    }

    

    ///准备播放的媒体改变了

    func mediaIsPreparedToPlayDidChange() {

        NSLog("---mediaIsPreparedToPlayDidChange")

        

    }


    ///视频播放状态改变了

    func moviePlayBackStateDidChange()  {


        //播放暂停播放完成 0

        NSLog("---播放状态改变了:\(player?.playbackState.rawValue)")


        switch player?.playbackState.rawValue ?? 0 {

        case 0://停止


            break

            

        case 1://播放


            break

            

        case 2://暂停


            break

        case 4://中断


            break

        default:

            break

            

        }

        

    }



猜你喜欢

转载自blog.csdn.net/amberoot/article/details/79536817