AVAsset 是AVFoundation的操作模型,其中包含音频,视频,字幕,元数据。
GPUImage系列专栏
参考:AVFoundation Programming Guide
AVFoundation系列五:关于音视频的导出
AVFoundation系列四:如何配置一个合格的Camera
AVFoundation系列三:音视频编辑
AVFoundation系列二:用AVPlayer播放视频
本文将从以下几个方面介绍AVAsset
Demo 地址
1. AVAsset的加载方式
2. 播放一个AVAsset
3. 获取一个asset的相关属性
4. 从相册加载AVAsset
5. loadValuesAsynchronously的使用
6. 从视频中获取视频帧 图像
7. 通过一个AVAsset导出音频,设置时间裁剪
8. 通过一个AVAsset导出视频,设置时间裁剪
一、AVAsset的加载方式
第一种加载方式
let path = Bundle.main.path(forResource: "3", ofType: "mp4")
let asset = AVAsset.init(url: URL.init(fileURLWithPath: path!, isDirectory: true))
第二种加载方式
let options = [AVURLAssetPreferPreciseDurationAndTimingKey:true]
let asset = AVURLAsset.init(url: URL.init(fileURLWithPath: path!, isDirectory: true), options: options)
其中:AVURLAssetPreferPreciseDurationAndTimingKey
获取精确时间 通常不会再播放时使用
URL.init(fileURLWithPath: path!, isDirectory: true)
如果URL是一个文件路径,苹果建议加上isDirectory
二、播放一个AVAsset
由于生命周期的原因,我们添加两个成员变量:
var player:AVPlayer?
var playerItem:AVPlayerItem?
播放:
func plackTrack(track:AVAssetTrack?){
guard let asset = track?.asset else{
return
}
playerItem = AVPlayerItem.init(asset: asset)
player = AVPlayer.init(playerItem: playerItem!)
let playerlayer = AVPlayerLayer.init(player: player!)
playerlayer.frame = view.bounds
self.view.layer.addSublayer(playerlayer)
player?.play()
}
AVAssetTrack
如:
let audioTrack = asset.tracks(withMediaType: .audio)
let videoTrack = asset.tracks(withMediaType: .video)
三、获取一个asset的相关属性
func getAssetAttribute(){
let path = Bundle.main.path(forResource: "3", ofType: "mp4")
let asset = AVAsset.init(url: URL.init(fileURLWithPath: path!, isDirectory: true))
//时长
let duration