IOS: преобразование необработанной песни MPMediaItems в NSData

Я использовал этот код. Это нормально, но после преобразования песни в данные, и когда я пытаюсь отправить эти преобразованные данные в MFMailComposeViewController или MFMessageComposeViewController, он несколько раз приходит в формате документа, но не может получить формат mp3. Когда я играю песня, которую мы отправили в MFmailComposeViewcontroller или MFMessageComposeViewController, песни, которые были преобразованы правильно, воспроизводятся правильно, но некоторые преобразуются в формат документа. Как это преодолеть. Пожалуйста, предложите мне.

SelectedAlbumUrl = [[arr_tablVAArray objectAtIndex:indexPath.row] objectForKey:@"SongUrl"];

Этот метод вызывается так.

[self mediaItemToData:[arr_tablVArray objectAtIndex:indexPath.row]];

-(void)mediaItemToData : (MPMediaItem * ) curItem
{
    NSURL *url = SelectedAlbumUrl;
    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:@"%@.caf",intervalSeconds];
    NSLog(@"the file name is --->%@",fileName);

    NSString *exportFile = [myDocumentsDirectory stringByAppendingPathComponent:fileName];

    exportURL = [NSURL fileURLWithPath:exportFile];
    exporter.outputURL = exportURL;

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

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

After that url converting to NSData sending through email,message and airdrop like this 
NSData *Data = [NSData dataWithContentsOfURL:exportURL];
        [composer addAttachmentData:Data mimeType:@".caf" fileName:str_songtitle];

person Community    schedule 20.08.2014    source источник


Ответы (1)


Попробуй это

- (void)addAttachmentData:(NSData*)attachment mimeType:(NSString*)mimeType fileName:(NSString*)filename

с mimeType = аудио/mpeg

person bartl    schedule 20.08.2014
comment
mailSongData = [NSData dataWithContentsOfURL:exportURL]; [composer addAttachmentData:mailSongData mimeType:@audio/mpeg fileName:str_songselectName]; я отправляю вот так - person ; 20.08.2014
comment
Кажется, вы правильно вызываете этот метод: [composer addAttachmentData:mailSongData mimeType:@audio/mpeg fileName:str_songselectName]; - person bartl; 22.08.2014
comment
Спасибо за повтор, можете написать, как вызвать этот метод в другом методе [-(IBAction)action_plus:(id)sender].Что я передаю вложение и имя файла. - person ; 22.08.2014