在短视频系统源码的流媒体传输过程中,为了提升音视频数据的传输效率,肯定是要进行编码压缩的,今天我们就一起来看一下短视频压缩时如何实现的吧。
一、视频压缩
视频压缩实际上是一种视频格式的转换、苹果原生录制的视频通过此方法可以压缩为原来的1/8 ~ 1/9左右。
创建AVURLAsset
// 视频来源
let videoInputUrl = NSURL.fileURLWithPath(NSBundle.mainBundle().pathForResource("Daid", ofType: "mp4")!)
// 视频采集
let videoAsset = AVURLAsset(URL: videoInputUrl, options: nil)
创建输出路径
// 最终合成输出路径
let name = currentTimeStamp() + ".mp4"
let temporaryFile = (NSTemporaryDirectory() as NSString).stringByAppendingPathComponent(name)
print(temporaryFile)
let outputFileUrl = NSURL(fileURLWithPath: temporaryFile)
其中,currentTimeStamp()为时间戳字符串,防止重复。
//时间戳
func currentTimeStamp()->String {
let now = NSDate()
let dformatter = NSDateFormatter()
dformatter.dateFormat = "yyyy年MM月dd日 HH:mm:ss"
print("当前日期时间:\(dformatter.stringFromDate(now))")
//当前时间的时间戳
let timeInterval:NSTimeInterval = now.timeIntervalSince1970
let timeStamp = Int(timeInterval)
return String(timeStamp)
}
这时创建AVAssetExportSession
// 创建一个输出
let assetExport = AVAssetExportSession(asset: videoAsset, presetName: AVAssetExportPresetMediumQuality)
// 输出类型
assetExport!.outputFileType = AVFileTypeQuickTimeMovie
// 输出地址
assetExport!.outputURL = outputFileUrl
// 优化
assetExport!.shouldOptimizeForNetworkUse = true
// 合成完毕
assetExport!.exportAsynchronouslyWithCompletionHandler({() -> Void in
// 回到主线程
dispatch_async(dispatch_get_main_queue(), {() -> Void in
// 调用播放方法
self.playWithUrl(outputFileUrl)
let fileSize = try! NSFileManager.defaultManager().attributesOfItemAtPath(temporaryFile)[NSFileSize] as? NSNumber
let recordSize = (fileSize?.integerValue)!/1024
print(recordSize)
})
})
短视频系统源码开发,短视频内容压缩的实现到此完毕。