将 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 保存到文档目录的主要内容,如果未能解决你的问题,请参考以下文章

iOS 5 AVPlayerItem 的一个实例被释放

查找与 AVPlayerItem 关联的 AVPlayer

如何将 UIImage 保存到文档目录?

如何将数组保存到ios文档目录?

将歌曲从 ios 音乐库保存到文档目录

使用覆盖将图像保存到文档目录