воспроизводить видео с URL-адреса, полученного из ALAsset в iOS - PullRequest
3 голосов
/ 05 октября 2010

Я все еще довольно новичок в Obj-C и идее блоков. Я прочитал этот пост об отображении изображений из URL-адреса, полученного из ALAssets: отображение изображения из URL-адреса, полученного из ALAsset в iPhone

Помимо возможности просмотра файлов изображений в UITableView с использованием структуры ALAsset, я хочу иметь возможность воспроизводить видео, которое также хранится в папке изображений. Актив видео отображается так же, как изображение, поэтому я хотел бы иметь возможность нажать на этот список видео в таблице и воспроизвести его. (Другими словами, я хочу воспроизвести видео с использованием инфраструктуры библиотеки ресурсов)

Можно ли это сделать с MPMoviePlayerController?

Из этого поста, который я собираю, мне нужен код внутри этой функции, чтобы получить URL ресурса для видеофайла:

ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
    {
    };

Если это правильно, какой код мне нужно вставить в эту функцию, чтобы я мог успешно воспроизвести видео через MPMoviePlayerController?

Просто для справки, мой код для отображения активов в UITableView находится здесь:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *CellIdentifier = @"id";

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }


 [[cell imageView] setImage:[UIImage imageWithCGImage:[[assets objectAtIndex:indexPath.row] thumbnail]]];
 [[cell textLabel] setText:[NSString stringWithFormat:@"Item %d", indexPath.row+1]];

    return cell;
}

Это мой первый пост, так что извините, если я напишу его неправильно. Спасибо за вашу помощь

Ответы [ 4 ]

3 голосов
/ 05 января 2011

Еще проще

MPMoviePlayerViewController *moviePlayerVC =[[MPMoviePlayerViewController alloc] initWithContentURL:[[asset defaultRepresentation] url]];
3 голосов
/ 05 октября 2010

Хорошо, я обнаружил, что можно использовать этот блок, чтобы выплевывать журнал адреса библиотеки активов:

void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) 
{

   if(result != nil) {
        NSLog(@"See Asset: %@", result);
        [assets addObject:result];

    }
};

, который будет выдавать что-то вроде

"See Asset: ALAsset - Type:Video, URLs:{
    "com.apple.m4v-video" = "assets-library://asset/asset.m4v?id=100&ext=m4v";    "

Так что я могуотправьте этот адрес библиотеки ресурсов на MPMoviePlayerController, и он будет работать!

Примерно так:

NSString *urlAddress = @"assets-library://asset/asset.m4v?id=100&ext=m4v";
NSURL *theURL = [NSURL URLWithString:urlAddress];
mp =  [[MPMoviePlayerController alloc] initWithContentURL:theURL];
etc...

Теперь я просто должен выяснить, как динамически получить эту строку URL из объекта ALAssetчто не должно быть слишком сложно понять .. надеюсь

0 голосов
/ 04 июня 2015

@ go2 ответ правильный, но MoviePlayerController ничего не показывает.

так что вам также нужно добавить moviePlayerController.movieSourceType=MPMovieSourceTypeFile; см. код ниже, чтобы воспроизвести это.

MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];
[moviePlayerController.view setFrame:self.view.frame];
moviePlayerController.movieSourceType=MPMovieSourceTypeFile;
moviePlayerController.fullscreen = YES;
[moviePlayerController play];
0 голосов
/ 30 января 2014

Вы можете получить url из asset, используя:

[result defaultRepresentation] url];
...