您的位置:首页 > 移动开发 > Swift

Swift实现带有缓存的播放器

2016-05-16 16:42 218 查看
用到的第三方库:

Alamofire 用于网络请求和视频下载

MobilePlayer 用于播放在线视频

创建Movie类:

import Foundation
import Alamofire

class Movie {

private var url: NSURL //网络路径 如果本地路径存在则是本地路径

init (url: NSURL) {

self.url = url
}

//获取播放路径
func getUrl() -> NSURL {

if isExist() {

let url = NSURL(fileURLWithPath: getFilePath())

return url
}

return self.url
}

//通知下载 如果已经存在 不下载
func postDownload() {

if isExist() {

return
}

let destination = Alamofire.Request.suggestedDownloadDestination()

Alamofire.download(.GET, url, destination: destination).response { _, _, _, error in

if let error = error {

print("Failed with error: \(error)")

} else {

print("Downloaded file successfully")

}
}

}

//是否已经下载
private func isExist() -> Bool{

let fileManager = NSFileManager.defaultManager()

let filePath = getFilePath()

print(filePath)

let exist = fileManager.fileExistsAtPath(filePath)

return exist
}

//通过文件名称 获取文件路径
private func getFilePath() -> String {

let filePath = NSHomeDirectory() + "/Documents/" + getFileName()

return filePath
}

//通过url 获取文件名称
private func getFileName() -> String {

let array = self.url.URLString.componentsSeparatedByString("/")

return array.last!
}

}

创建Movie对象:

let string = "视频路径"

let url = NSURL(string: string)!

let movie = Movie(url: url)

movie.postDownload() //下载

play(movie)//播放

播放方法:

import MobilePlayer

func play(movie: Movie) {

let url = movie.getUrl()

let playerVC = MobilePlayerViewController(contentURL: url)

playerVC.activityItems = [url]

presentMoviePlayerViewControllerAnimated(playerVC)
}

一边播放一遍下载,下载成功后会播放本地路径的视频。

清除所有缓存:

//清除所有缓存
func cleanAllCache() {

let fileManager = NSFileManager.defaultManager()

let myDirectory = NSHomeDirectory() + "/Documents"

let fileArray:[AnyObject]? = fileManager.subpathsAtPath(myDirectory)

for fn in fileArray!{

try! fileManager.removeItemAtPath(myDirectory + "/\(fn)")
}

}

这里是用的是Alamofire设置的下载路径,注意删除的路径要和下载的路径一致。

//获取所有缓存大小
func getAllCacheSize() -> String {

let fileManager = NSFileManager.defaultManager()

let myDirectory = NSHomeDirectory() + "/Documents"

let fileArray:[AnyObject]? = fileManager.subpathsAtPath(myDirectory)

var allSize = 0.0

for fn in fileArray!{

let attr = try! fileManager.attributesOfItemAtPath(myDirectory + "/\(fn)")

let size = (attr["NSFileSize"] as! Double) / 1000000 //单位为 M

allSize += size
}

return String(format: "%.1f", allSize) //保留小数点后一位

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: