元動画のAVAssetから音声データ(Audio track)のみ抽出
let asset = AVURLAsset(url: url)
let track = asset.tracks(withMediaType: .audio)[0]
新しいAVAssetを生成し、そのAudio trackも生成
let newAsset = AVMutableComposition()
guard let audioTrack = newAsset.addMutableTrack(withMediaType: .audio, preferredTrackID: kCMPersistentTrackID_Invalid) else { return }
newAsset(音声のみのAVAsset)に動画から抽出したAudio trackを挿入
do {
try audioTrack.insertTimeRange(track.timeRange, of: track, at: .zero)
} catch let error {
print(error)
}
AVPlayerで再生
let player = AVPlayer(playerItem: AVPlayerItem(asset: newAsset))
playerLayer.player = player
playerLayer.player?.play()
コード全体
let asset = AVURLAsset(url: url)
let track = asset.tracks(withMediaType: .audio)[0]
let newAsset = AVMutableComposition()
guard let audioTrack = newAsset.addMutableTrack(withMediaType: .audio, preferredTrackID: kCMPersistentTrackID_Invalid) else { return }
do {
try audioTrack.insertTimeRange(track.timeRange, of: track, at: .zero)
} catch let error {
print(error)
}
let player = AVPlayer(playerItem: AVPlayerItem(asset: newAsset))
playerLayer.player = player
playerLayer.player?.play()
参考にした記事