avfoundation - 您如何实际播放 AVAssetTrack,而不是 AVURLAsset?
问题描述
假设您有一个小视频文件
let p = Bundle.main.path(forResource: "small", ofType: "mp4")
let url = NSURL.fileURL(withPath: p!)
您可以轻松地将其设为播放器项目并播放它..
let pi = AVPlayerItem(url: url)
av.player = AVPlayer(playerItem: pi)
或者,您可以将其设为 AVURLAsset,然后获取其中一个曲目
AVAssetTrack
asset = AVURLAsset(url: url)
let tracks:[AVAssetTrack] = asset!.tracks
print(tracks.count)
let track:AVAssetTrack = tracks[2]
那么.......你会播放其中一首曲目吗?
你怎么玩 AVAssetTrack ?
解决方案
下面的代码显示了如何创建AVMutableComposition
仅包含所需曲目的曲目,然后像播放任何曲目一样播放乐曲,AVAsset
因为考虑到名称,也许令人惊讶的是,它是一个:
let asset = AVURLAsset(url: url)
let track = asset.tracks[1] // or whatever
let composition = AVMutableComposition()
let compositionTrack = composition.addMutableTrack(withMediaType: track.mediaType, preferredTrackID: kCMPersistentTrackID_Invalid)
try! compositionTrack?.insertTimeRange(CMTimeRange(start: .zero, duration: asset.duration), of: track, at: .zero)
let playerItem = AVPlayerItem(asset: composition) // play me in your AVPlayer
NB在现实生活中tracks
,duration
可能应该异步加载。
推荐阅读
- php - 如何使用帖子元显示我的索引页帖子?
- mysql - MySQL Workbench - 过滤日期
- javascript - 根据日期选择器选择计算新日期
- node.js - 节点通过 createdAt 属性表达 find() 条目
- ios - iOS React Native App/构建成功但应用程序未在iOS设备/模拟器中打开
- node.js - 如何从嵌入式模式的 Node 和 Mongoose 中的特定用户配置文件中选择所有体验
- json - 迭代追加json并在Python中另存为数据框
- java - 如何从另一个类访问这个 ArrayList?
- macos - Mac OS Catalina gfortran - “ld:找不到-lgcrt1.o的库”
- sql - 通过三个关联查询where方法