【问题标题】:Converting MPMediaItem to NSData将 MPMediaItem 转换为 NSData
【发布时间】:2011-09-01 01:25:25
【问题描述】:

我正在尝试将 MPMediaItem 转换为 NSData 对象,以便可以使用 AVAudioPlayer 播放它。 以下答案是不久前在类似问题上发布的,并提供了如何解决的步骤:

MPMediaItems raw song data

当然你可以访问一个 MPMediaItem。这不是很清楚 一次,但它有效。方法如下:

从它的 MPMediaItemPropertyAssetURL 属性 用这个 URL 初始化一个 AVURLAsset 用这个初始化一个 AVAssetReader 资产获取你想要的 AVAssetTrack 从 AVURLAsset 读取创建一个 AVAssetReaderTrackOutput 与此 track 将此输出添加到 之前创建的 AVAssetReader 和 -startReading 使用 AVAssetReaderTrackOutput 获取所有数据 -copyNextSampleBuffer 利润!

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

谢谢, 吉利

【问题讨论】:

    标签: ios avaudioplayer mpmediaitem


    【解决方案1】:

    尝试使用以下代码

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

    【讨论】:

      【解决方案2】:

      试试这个:

      -(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;
                   }
               }
           }];
      }
      

      【讨论】:

        猜你喜欢
        • 2013-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-17
        • 2012-07-28
        • 2022-01-11
        • 2013-12-09
        相关资源
        最近更新 更多