Question

I am recording video in iPhone I want to get the recorded duration time of video. Is there any way to get the recorded video duration time.

Here is the code where I get the recorded video along with path.

if ([type isEqualToString:(NSString *)kUTTypeVideo] || [type isEqualToString:(NSString *)kUTTypeMovie])
{
    NSURL*videoURL = [info objectForKey:UIImagePickerControllerMediaURL];

    videoData = [[NSData dataWithContentsOfURL:videoURL] retain];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormat setDateFormat:@"dd-MM-yyyy_HH:mm:SS"];

    NSDate *now = [[[NSDate alloc] init] autorelease];
    NSDate* theDate = [dateFormat stringFromDate:now];

    NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"Default Album"];

    if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
        [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:nil];

    NSString*testUser=TitleTextField.text;

    NSString *videopath= [[[NSString alloc] initWithString:[NSString stringWithFormat:@"%@/%@.mov",documentsDirectory,testUser]] autorelease];

    BOOL success = [videoData writeToFile:videopath atomically:NO];

    // Alert for showing the record video

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"You have recorded a video"
                                                   delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];

    recordedVideoLabel.text=@"You have recorded Video";
}
Was it helpful?

Solution

It can be done easily using AVAssets

AVURLAsset *avUrl = [AVURLAsset assetWithURL:@"Here comes the url of the video"];
CMTime time = [avUrl duration];
int seconds = ceil(time.value/time.timescale);

You need to link CoreMedia and AVFoundation framework in your project

OTHER TIPS

This worked for me to get the time in seconds, you can add this method to your code:

-(float) getDurationInSecondsForVideoPath:(NSString*)videoPath {
   NSURL * videoURL = [NSURL URLWithString: videoPath];
   AVURLAsset * avAsset = [AVURLAsset videoURL];
   CMTime avDuration = [avAsset duration];
   float avDurationInSeconds = CMTimeGetSeconds(avDuration);
   return avDurationInSeconds;
}

Note: Make sure that the videoPath works before use the method, otherwise the method will return 0.0000 or nan

For more information:AVAsynchronousKeyValueLoading, AVURLAsset and AVAsset.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top