将 AVPlayerItem 保存到文档目录
Posted
技术标签:
【中文标题】将 AVPlayerItem 保存到文档目录【英文标题】:Save AVPlayerItem to documents directory 【发布时间】:2014-11-22 19:24:42 【问题描述】:如何保存 AVPlayerItem?我上网查了一下,真的什么都找不到。 AVPlayerItem 在一个资产中包含两个音频文件。如何将其保存到用户文档文件夹?我的代码很快,但也欢迎目标 c 中的答案。
代码:
let type = AVMediaTypeAudio
let audioFile = NSBundle.mainBundle().URLForResource("school", withExtension: "mp3")
let asset1 = AVURLAsset(URL: audioFile, options: nil)
let arr2 = asset1.tracksWithMediaType(type)
let track2 = arr2.last as AVAssetTrack
let duration : CMTime = track2.timeRange.duration
let comp = AVMutableComposition()
let comptrack = comp.addMutableTrackWithMediaType(type,
preferredTrackID: Int32(kCMPersistentTrackID_Invalid))
comptrack.insertTimeRange(CMTimeRangeMake(CMTimeMakeWithSeconds(0,600), CMTimeMakeWithSeconds(5,600)), ofTrack:track2, atTime:CMTimeMakeWithSeconds(0,600), error:nil)
comptrack.insertTimeRange(CMTimeRangeMake(CMTimeSubtract(duration, CMTimeMakeWithSeconds(5,600)), CMTimeMakeWithSeconds(5,600)), ofTrack:track2, atTime:CMTimeMakeWithSeconds(5,600), error:nil)
let type3 = AVMediaTypeAudio
let s = NSBundle.mainBundle().URLForResource("file2", withExtension:"m4a")
let asset = AVURLAsset(URL:s, options:nil)
let arr3 = asset.tracksWithMediaType(type3)
let track3 = arr3.last as AVAssetTrack
let comptrack3 = comp.addMutableTrackWithMediaType(type3, preferredTrackID:Int32(kCMPersistentTrackID_Invalid))
comptrack3.insertTimeRange(CMTimeRangeMake(CMTimeMakeWithSeconds(0,600), CMTimeMakeWithSeconds(10,600)), ofTrack:track3, atTime:CMTimeMakeWithSeconds(0,600), error:nil)
let params = AVMutableAudioMixInputParameters(track:comptrack3)
params.setVolume(1, atTime:CMTimeMakeWithSeconds(0,600))
params.setVolumeRampFromStartVolume(1, toEndVolume:0, timeRange:CMTimeRangeMake(CMTimeMakeWithSeconds(7,600), CMTimeMakeWithSeconds(3,600)))
let mix = AVMutableAudioMix()
mix.inputParameters = [params]
let item = AVPlayerItem(asset:comp)
item.audioMix = mix
【问题讨论】:
为什么需要保存? 我希望用户能够保存在他们的手机上供他们收听,我也想将其分享到社交网络 在社交网络上“分享一个 AVPlayerItem”到底意味着什么?它不是一个“东西”,就像一张照片。它只是 AVFoundation 用于一些内部计算/描述的类。你真正想做什么? “听”什么?如果要保存声音文件,则需要制作声音文件; AVPlayerItem 不是声音文件。 我正在尝试将这两个文件混合成一个音频文件。将该音频文件保存到用户手机并共享。如何将两个音频文件合并为一个声音文件? 我相信我已经回答了这个问题。 【参考方案1】:从你的问题很难理解你想要做什么,但我有一个模糊的怀疑,你需要阅读 AVAssetExportSession 类。
https://developer.apple.com/library/ios/Documentation/AVFoundation/Reference/AVAssetExportSession_Class/index.html#//apple_ref/occ/cl/AVAssetExportSession
【讨论】:
我接受了您的建议,但如果您不介意看问题,就会遇到问题。谢谢。 ***.com/questions/27083974/…以上是关于将 AVPlayerItem 保存到文档目录的主要内容,如果未能解决你的问题,请参考以下文章