zoukankan      html  css  js  c++  java
  • swift开发笔记15

    swift开发笔记15

    // swift中的String和OC中的NSString转换

    extension String {

      var convert: NSString { return (self as NSString) }

    }

     

        var backgroundColor: UIColor = UIColor.black {

            didSet {

                view.backgroundColor = backgroundColor

            }

        }

     

      open var duration: CGFloat = 0.0// 不同于Float

     

    // 监听通知

                    NotificationCenter.default.addObserver(self, selector: #selector(VideoSpashViewController.playerItemDidReachEnd), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: moviePlayer.player?.currentItem)

     

    // 在主线程刷新UI,播放视频

    if let path = newUrl as URL? {

                    DispatchQueue.global().async {

                        DispatchQueue.main.async {

                            self.moviePlayer.player = AVPlayer.init(url: path)

                            self.moviePlayer.player?.play()

                            self.moviePlayer.player?.volume = Float(self.moviePlayerSoundLevel)

                        }

                    }

                }

     

            view.addSubview(moviePlayer.view)

            view.sendSubview(toBack: moviePlayer.view)// 将视频播放器的view放到最前面

     

    // 视频转码

    import AVFoundation

    class VideoCutter: NSObject {

        open func cropVideoWithUrl(videoUrl url: URL, startTime: CGFloat, duration: CGFloat, completion: ((_ videoPath: URL?, _ error: NSError?) -> Void)?) {

            DispatchQueue.global().async {

                let asset = AVURLAsset.init(url: url)

                let exportSession = AVAssetExportSession.init(asset: asset, presetName: "AVAssetExportPresetHighestQuality")

                let paths :NSArray = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) as NSArray

                var outputURL = paths.object(at: 0) as! String

                let manager = FileManager.default

                do {

                    try manager.createDirectory(atPath: outputURL, withIntermediateDirectories: true, attributes: nil)

                } catch {

                    

                }

                outputURL = outputURL.convert.appendingPathComponent("output.mp4")

                do {

                    try manager.removeItem(atPath: outputURL)

                } catch {}

                if let exportSession = exportSession as AVAssetExportSession? {

                    exportSession.outputURL = URL.init(fileURLWithPath: outputURL)

                    exportSession.shouldOptimizeForNetworkUse = true

                    exportSession.outputFileType = AVFileTypeMPEG4

                    let start = CMTimeMakeWithSeconds(Float64(startTime), 600)

                    let duration = CMTimeMakeWithSeconds(Float64(duration), 600)

                    let range = CMTimeRangeMake(start, duration)

                    exportSession.timeRange = range

                    exportSession.exportAsynchronously { () -> Void in

                        switch exportSession.status {

                        case AVAssetExportSessionStatus.completed:

                            completion?(exportSession.outputURL, nil)

                        case AVAssetExportSessionStatus.failed:

                            print("Failed: (String(describing: exportSession.error))")

                        case AVAssetExportSessionStatus.cancelled:

                            print("Failed: (String(describing: exportSession.error))")

                        default:

                            print("default case")

                        }

                    }

                    

                }

                DispatchQueue.main.async {

                    

                }

            }

            

        }

    }

     

  • 相关阅读:
    leetcode 264: Ugly Number II
    leetcode 260: Single Number III
    leetcode 241: Different Ways to Add Parentheses
    清远市技术学院大学城网
    英德市职业技术学校大学城网
    清远市田家炳中学大学城网
    清远市清城区清城中学大学城网
    清远市第一中学大学城网
    当前最热的技术
    Python 学习视频
  • 原文地址:https://www.cnblogs.com/dengchaojie/p/7488044.html
Copyright © 2011-2022 走看看