假期来学习一下swift,今天学的是视频背景,视频背景就是QQ那个登录时出现的那个小视频,由于我并没有找到那个视频,所以自己拿了一个过来。这个是刚刚学习swift有很多地方不了解 希望大家给与帮助。
gayHub:https://github.com/AkaShark/swift--
邮箱:1548742234@qq.com 好了接下来开始正题了~
这个小小的例子分为三个部分首先是第一部分
第一部分:
对于视频的处理
open func compressVideoWithUrl(videoUrl url:URL, startTime:CGFloat, duration:CGFloat, completion: ((_videoPath:URL,_ error:NSError?)->Void)? ){
DispatchQueue.global().async {
//获取多媒体的信息
letasset =AVURLAsset(url:url)
//AVAssetExportPresetHighestQuality 压缩的质量 压缩视频
letexportSession =AVAssetExportSession(asset: asset, presetName:"AVAssetExportPresetHighestQuality")
//获取沙盒路径
let paths: NSArray = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as NSArray
//获取路径
varoutputUrl = paths.object(at:0)as!String
//定义文件管理
letmanager =FileManager.default
//获取完整的视频路径
outputUrl = outputUrl.convert.appending("/output.mp4")
do
{
//将原文件删除
trymanager.removeItem(atPath: outputUrl)
}
catch_
{
}
//如果原文件删除了
if!manager.fileExists(atPath: outputUrl)
{
ifletexportSession = exportSessionasAVAssetExportSession?{
//将压缩的视频文件存到原目录下
exportSession.outputURL=URL(fileURLWithPath: outputUrl)
//进行优化网络使用 方便快速启动 快速启动
exportSession.shouldOptimizeForNetworkUse=true
//导出类型
exportSession.outputFileType=AVFileType.mp4
//CMTimeMakeWithSeconds(a,b) a当前时间,b每秒钟多少帧
//CMTimeMakeWithSeconds 专门是为视频设计的时间
letstart =CMTimeMakeWithSeconds(Float64(startTime),600)
letduration =CMTimeMakeWithSeconds(Float64(duration),600)
print(duration)
letrange =CMTimeRangeMake(start,duration)
exportSession.timeRange= range
// 异步导出
exportSession.exportAsynchronously
{
//导出的状态
switchexportSession.status{
//完成
caseAVAssetExportSessionStatus.completed:
completion?(exportSession.outputURL!,nil)
//失败
caseAVAssetExportSessionStatus.failed:
print("Failed: \(exportSession.error)")
// 取消
case
AVAssetExportSessionStatus.cancelled:
print("Failed:\(exportSession.error)")
default:
print("default case") }
}
}
}
}
}
}
自定义一个方法获取视频的本地地址和视频的一些相关的信息,对视频进行压缩处理使得视频可以更好的播放
第二部分- 定义基类VC
定义了AVPlayerViewController和他的一些默认属性(如播放的填充模式,是否循环播放等)作为基类使用的时候只需要继承和简单的配置就可以了
fileprivatefuncsetMoviePlayerView(_url:URL){
letvideoCutter =VideoCutter()
videoCutter.compressVideoWithUrl(videoUrl: url, startTime:startTime, duration:duration) { (path, error)in
ifletvideoPath = pathasURL?{
self.moviePlayer.player=AVPlayer(url: videoPath)
self.moviePlayer.player?.play()
//设置player的音量为 将self.moviePlayerSoundLevel转为float类型
self.moviePlayer.player?.volume = Float(self.moviePlayerSoundLevel)
}
}
}
//生命周期
overridefuncviewDidLoad() {
super.viewDidLoad()
moviePlayer.view.frame =view.frame
moviePlayer.showsPlaybackControls = false
view.addSubview(moviePlayer.view)
//将moviePlayer.view放在最后
view.sendSubview(toBack:moviePlayer.view)
// Do any additional setup after loading the view.
}
第三部分-直接调用
调用很容易,直接写出简单的属性设置,添加到view上就ok了
//在沙盒中寻找视频位置
leturl =URL(fileURLWithPath:Bundle.main.path(forResource:"moments", ofType:"mp4")!)
//设置
videoFrame=view.frame
fillMode = .resizeAspectFill
alwaysRepeat = true
sound= true
startTime=2.0
alpha=0.8
contentURL= url
//交互关闭
view.isUserInteractionEnabled = false
刚刚学习swift 感觉好挺好的 和oc 对比起来真的感觉简略了很多啊。
感觉自己的东西写的一直不怎么好也再尝试着去写好。更加努力坚持吧。
网友评论