Malfunction
Malfunction

Reputation: 1334

Playing a local video using AVPlayer

I just wasted like 3 hours on this and I can't see where I'm going wrong.

I'm trying to play a video I have stored locally using AVPlayer. This is how I launch the player:

- (void)openVideo:(NSURL *)videoURL {

    NSLog(@"Playing video with the url:\n%@", videoURL);
    AVPlayer *player = [AVPlayer playerWithURL:videoURL];

    AVPlayerViewController *playerViewController = [AVPlayerViewController new];
    playerViewController.player = player;
    [self presentViewController:playerViewController animated:YES completion:nil];

}

And this is the NSURL I'm passing:

+ (NSURL *)getURL:(NSString *)itemKey withType:(NSString *)itemType {

    NSString *docsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *dataFilePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: [NSString stringWithFormat:@"%@.%@", itemKey, itemType]]];

    NSURL *itemURL;
    if ([[NSFileManager defaultManager] fileExistsAtPath: dataFilePath]){  // if data exists
        itemURL = [NSURL fileURLWithPath:dataFilePath];
    }
    else {
        NSLog(@"The data requested does not exist! Returning an empty url file...");
        itemURL = nil;
    }
    return itemURL;

}

When I run openVideo, the output I get is:

Playing video with the url:
/var/mobile/Containers/Data/Application/72C35DC4-9EF1-4924-91F4-EDA4BDB6AAD3/Documents/sample.vid

But I keep getting a disabled video player..

enter image description here

What am I doing wrong?

Upvotes: 1

Views: 1347

Answers (1)

Malfunction
Malfunction

Reputation: 1334

Finally figured the issue out. I was downloading my files and storing them as NSData, and had to use writeToFile and specify the correct extension to read them correctly.

NSString *saveFilePath; = [NSTemporaryDirectory()stringByAppendingPathComponent:@"temp.mp4"];

[fileData writeToFile:saveFilePath atomically:YES];
NSURL *filepath = [NSURL fileURLWithPath:saveFilePath];
AVPlayer *player = [AVPlayer playerWithURL:filepath];

Hopefully this helps someone out there.

Upvotes: 2

Related Questions