【问题标题】:Get Audio (mp3) From MOV File iOS从 MOV 文件 iOS 获取音频 (mp3)
【发布时间】:2014-06-05 01:57:02
【问题描述】:

如何从我从用户的相机胶卷中获得的 .MOV 文件中提取音频(最好是 .mp3)?

我在这里提取 MOV 文件:

- (void) imagePickerController: (UIImagePickerController *) picker
 didFinishPickingMediaWithInfo: (NSDictionary *) info {

    NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
    [self dismissViewControllerAnimated:NO completion:nil];

    if (CFStringCompare ((__bridge_retained CFStringRef)mediaType, kUTTypeMovie, 0)
        == kCFCompareEqualTo) {

        NSString *fileName = [[info objectForKey:
                                UIImagePickerControllerMediaURL] path];
        NSData *data = [[NSData alloc] initWithContentsOfFile:moviePath];

        [self dismissViewControllerAnimated:YES completion:nil];


    }
}

如果需要提供更多代码,请告诉我,但我认为这是足够多的信息。

我尝试了一些东西,但完全没有结果。任何帮助表示赞赏。谢谢

【问题讨论】:

    标签: ios objective-c cocoa-touch


    【解决方案1】:

    我用下面这段代码解压m4a文件并写入文件应用文档目录

        -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    
    AVMutableComposition *newAudioAsset = [AVMutableComposition composition];
    AVMutableCompositionTrack *dstCompositionTrack = [newAudioAsset addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
    // 1 - Get media type
    NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
    
    // 2 - Dismiss image picker
    [self dismissViewControllerAnimated:YES completion:nil];
    
    // 3 - Handle video selection
    if (CFStringCompare ((__bridge_retained CFStringRef) mediaType, kUTTypeMovie, 0) == kCFCompareEqualTo) {
        videoAsset = [AVAsset assetWithURL:[info objectForKey:UIImagePickerControllerMediaURL]];
        //  NSLog(@"track = %@",[videoAsset tracksWithMediaType:AVMediaTypeAudio]);
    
        NSArray *trackArray = [videoAsset tracksWithMediaType:AVMediaTypeAudio];
        if(!trackArray.count){
            NSLog(@"Track returns empty array for mediatype AVMediaTypeAudio");
            return;
        }
    
        AVAssetTrack *srcAssetTrack = [trackArray  objectAtIndex:0];
    
        //Extract time range
        CMTimeRange timeRange = srcAssetTrack.timeRange;
        NSError *err = nil;
        if(NO == [dstCompositionTrack insertTimeRange:timeRange ofTrack:srcAssetTrack atTime:kCMTimeZero error:&err]){
            NSLog(@"Failed to insert audio from the video to mutable avcomposition track");
            return;
        }
        //Export the avcompostion track to destination path
        NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex: 0];
        NSString *dstPath = [documentsDirectory stringByAppendingString:@"/sample_audio.m4a"];
        NSURL *dstURL = [NSURL fileURLWithPath:dstPath];
    
    
        //Remove if any file already exists
        [[NSFileManager defaultManager] removeItemAtURL:dstURL error:nil];
    
        AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]initWithAsset:newAudioAsset presetName:AVAssetExportPresetPassthrough];
        NSLog(@"support file types= %@", [exportSession supportedFileTypes]);
        exportSession.outputFileType = AVFileTypeAppleM4A;
        exportSession.outputURL = dstURL;
    
        [exportSession exportAsynchronouslyWithCompletionHandler:^{
            AVAssetExportSessionStatus status = exportSession.status;
    
            if(AVAssetExportSessionStatusCompleted != status){
                NSLog(@"Export status not yet completed. Error: %@", exportSession.error.description);
            }
        }];
    
    
        //        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Asset Loaded" message:@"Video Asset Loaded"
        //                                                       delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        //        [alert show];
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      • 2015-09-05
      相关资源
      最近更新 更多