将MPMediaItem转换为NSData

我试图将一个MPMediaItem转换为NSData对象,所以我可以用AVAudioPlayer播放它。 下面的答案是张贴了一个类似的问题,回到了如何做到这一点:

MPMediaItems原始歌曲数据

当然你可以访问MPMediaItem的数据。 这一次不是很清楚,但是很有效。 就是这样:

从MPMediaItemPropertyAssetURL属性中获取媒体项目的URL使用此URL初始化AVURLAsset使用此资源初始化AVAssetReader从AVURLAsset获取您想要读取的AVAssetTrack使用此轨道创buildAVAssetReaderTrackOutput将此输出添加到之前创build的AVAssetReader中并将-startReading提取所有数据与AVAssetReaderTrackOutput的-copyNextSampleBuffer利润!

用'copyNextSampleBuffer'获取数据后,我现在有一个CMSampleBufferRef对象。 我如何从这里继续?

谢谢,吉利

尝试这个:

-(void)mediaItemToData : (MPMediaItem * ) curItem { NSURL *url = [curItem valueForProperty: MPMediaItemPropertyAssetURL]; AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL: url options:nil]; AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset: songAsset presetName:AVAssetExportPresetAppleM4A]; exporter.outputFileType = @"com.apple.m4a-audio"; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString * myDocumentsDirectory = ([paths count] > 0) ? [paths objectAtIndex:0] : nil; [[NSDate date] timeIntervalSince1970]; NSTimeInterval seconds = [[NSDate date] timeIntervalSince1970]; NSString *intervalSeconds = [NSString stringWithFormat:@"%0.0f",seconds]; NSString * fileName = [NSString stringWithFormat:@"%@.m4a",intervalSeconds]; NSString *exportFile = [myDocumentsDirectory stringByAppendingPathComponent:fileName]; NSURL *exportURL = [NSURL fileURLWithPath:exportFile]; exporter.outputURL = exportURL; // do the export // (completion handler block omitted) [exporter exportAsynchronouslyWithCompletionHandler: ^{ int exportStatus = exporter.status; switch (exportStatus) { case AVAssetExportSessionStatusFailed: { NSError *exportError = exporter.error; NSLog (@"AVAssetExportSessionStatusFailed: %@", exportError); break; } case AVAssetExportSessionStatusCompleted: { NSLog (@"AVAssetExportSessionStatusCompleted"); NSData *data = [NSData dataWithContentsOfFile: [myDocumentsDirectory stringByAppendingPathComponent:fileName]]; //DLog(@"Data %@",data); data = nil; break; } case AVAssetExportSessionStatusUnknown: { NSLog (@"AVAssetExportSessionStatusUnknown"); break; } case AVAssetExportSessionStatusExporting: { NSLog (@"AVAssetExportSessionStatusExporting"); break; } case AVAssetExportSessionStatusCancelled: { NSLog (@"AVAssetExportSessionStatusCancelled"); break; } case AVAssetExportSessionStatusWaiting: { NSLog (@"AVAssetExportSessionStatusWaiting"); break; } default: { NSLog (@"didn't get export status"); break; } } }]; } 

尝试使用下面的代码

  MPMediaItem *item; NSData *dataMedia = [NSData dataWithContentsOfURL:[item valueForProperty:MPMediaItemPropertyAssetURL]];