Как вы на самом деле играете в AVAssetTrack, а не в AVURLAsset? - PullRequest
0 голосов
/ 15 декабря 2018

Скажем, у вас есть небольшой видеофайл

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 ??

1 Ответ

0 голосов
/ 16 декабря 2018

Вот код, который показывает, как вы можете создать 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, вероятно, должны загружаться асинхронно.

...