Helpers - компьютеры, интернет, программирование

Как я могу получить список всех видеофайлов из библиотеки в ios sdk

Привет, я работаю над видео, я хотел бы получить список видеофайлов из библиотеки для отображения и воспроизвести видео в своем приложении. Может кто-нибудь помочь мне.

11.07.2013

  • Вы что-нибудь пробовали? 11.07.2013
  • Может быть, это поможет вам: stackoverflow.com/questions/8301950/ 11.07.2013
  • @NagRaj кто-то спрашивает тебя. кто-то отвечает вам. плз переиграй. Если вы хотите помочь с SO. 11.07.2013
  • @SAMIRRATHOD RATHOD я нашел решение .. с помощью ALAssetsLibrary 11.07.2013

Ответы:


1

Он откроет библиотеку фотографий и отобразит только содержимое типа фильма.

#import <MobileCoreServices/MobileCoreServices.h>

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil];
[self presentModalViewController:imagePicker animated:YES];
11.07.2013

2

Получить список всех видео и эскизов

Спасибо @Nikhil, который поделился информацией здесь, мне это помогло, но все же потребовалось несколько часов, чтобы сделать код исполняемым, так как в его ответе не хватает нескольких вещей

введите здесь описание изображения

Поэтому я хотел бы поделиться своим полным рабочим кодом

1. Просто добавьте фреймворки AssetsLibrary, AVFoundation и MediaPlayer.

2. AssetBrowserItem.h и AssetBrowserItem.m здесь

3. Используйте приведенный ниже код, чтобы получить список всех видео из библиотеки устройств ios.

4. запустите приложение и смотрите в журнале подробную информацию о видео.

#import "HomeViewController.h"
#import <AssetsLibrary/AssetsLibrary.h>
#import <MediaPlayer/MediaPlayer.h>
#import <AVFoundation/AVFoundation.h>
#import "AssetBrowserItem.h"


@interface HomeViewController ()

@property (nonatomic, strong) ALAssetsLibrary *assetsLibrary;
@property (nonatomic, strong) NSURL *videoURL;
@property (nonatomic, strong) MPMoviePlayerController *mpVideoPlayer;
@property (nonatomic, strong) NSMutableArray *videoURLArray;
@property (nonatomic, strong) NSMutableArray *assetItems;
@property (nonatomic, strong) NSMutableDictionary *dic;

@end

@implementation HomeViewController

@synthesize assetsLibrary, assetItems,dic;
@synthesize videoURL,videoURLArray, mpVideoPlayer;

- (void)viewDidLoad
{
    [super viewDidLoad];
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}


#pragma mark - Show Video List Methods

- (IBAction)showVideoList:(id)sender
{
    [self buildAssetsLibrary];
}

- (void)buildAssetsLibrary
{
    assetsLibrary = [[ALAssetsLibrary alloc] init];
    ALAssetsLibrary *notificationSender = nil;

    videoURLArray = [[NSMutableArray alloc] init];

    NSString *minimumSystemVersion = @"4.1";
    NSString *systemVersion = [[UIDevice currentDevice] systemVersion];
    if ([systemVersion compare:minimumSystemVersion options:NSNumericSearch] != NSOrderedAscending)
        notificationSender = assetsLibrary;

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(assetsLibraryDidChange:) name:ALAssetsLibraryChangedNotification object:notificationSender];
    [self updateAssetsLibrary];
}

- (void)assetsLibraryDidChange:(NSNotification*)changeNotification
{
    [self updateAssetsLibrary];
}

- (void)updateAssetsLibrary
{
    assetItems = [NSMutableArray arrayWithCapacity:0];
    ALAssetsLibrary *assetLibrary = assetsLibrary;

    [assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop)
    {
        if (group)
        {
            [group setAssetsFilter:[ALAssetsFilter allVideos]];
            [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop)
             {
                 if (asset)
                 {
                     dic = [[NSMutableDictionary alloc] init];
                     ALAssetRepresentation *defaultRepresentation = [asset defaultRepresentation];
                     NSString *uti = [defaultRepresentation UTI];
                     videoURL = [[asset valueForProperty:ALAssetPropertyURLs] valueForKey:uti];

                     mpVideoPlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];

                     NSString *title = [NSString stringWithFormat:@"%@ %lu", NSLocalizedString(@"Video", nil), [assetItems count]+1];

                     [self performSelector:@selector(imageFromVideoURL)];
                     [dic setValue:title forKey:@"VideoTitle"];//kName
                     [dic setValue:videoURL forKey:@"VideoUrl"];//kURL

                     AssetBrowserItem *item = [[AssetBrowserItem alloc] initWithURL:videoURL title:title];
                     [assetItems addObject:item];
                     [videoURLArray addObject:dic];

                     NSLog(@"Video has info:%@",videoURLArray);
                 }
                 NSLog(@"Values of dictonary==>%@", dic);

                 //NSLog(@"assetItems:%@",assetItems);
                 NSLog(@"Videos Are:%@",videoURLArray);
             } ];
        }
        // group == nil signals we are done iterating.
        else
        {
            dispatch_async(dispatch_get_main_queue(), ^{
                //[self updateBrowserItemsAndSignalDelegate:assetItems];
//                loadImgView.hidden = NO;
//                [spinner stopAnimating];
//                [loadImgView removeFromSuperview];
                //selectVideoBtn .userInteractionEnabled = YES;
            });
        }
    }
                              failureBlock:^(NSError *error)
    {
        NSLog(@"error enumerating AssetLibrary groups %@\n", error);
    }];
}

- (UIImage *)imageFromVideoURL
{

    UIImage *image = nil;
    AVAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];;
    AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
    imageGenerator.appliesPreferredTrackTransform = YES;

    // calc midpoint time of video
    Float64 durationSeconds = CMTimeGetSeconds([asset duration]);
    CMTime midpoint = CMTimeMakeWithSeconds(durationSeconds/2.0, 600);

    // get the image from
    NSError *error = nil;
    CMTime actualTime;
    CGImageRef halfWayImage = [imageGenerator copyCGImageAtTime:midpoint actualTime:&actualTime error:&error];

    if (halfWayImage != NULL)
    {
        // cgimage to uiimage
        image = [[UIImage alloc] initWithCGImage:halfWayImage];
        [dic setValue:image forKey:@"ImageThumbnail"];//kImage
        NSLog(@"Values of dictonary==>%@", dic);
        NSLog(@"Videos Are:%@",videoURLArray);
        CGImageRelease(halfWayImage);
    }
    return image;
}

@end
05.02.2015

3

В swift 4.0 я использовал метод fetchAsset() из Photos framework, чтобы получить все видео из библиотеки фотографий.

Вы также можете получить видео из определенной папки, используя предикат.

   func fetchAllVideos()
{
    //let albumName = "blah"
    let fetchOptions = PHFetchOptions()
    //        fetchOptions.predicate = NSPredicate(format: "title = %@", albumName)
    //uncomment this if you want video from custom folder
    fetchOptions.predicate = NSPredicate(format: "mediaType = %d ", PHAssetMediaType.video.rawValue )

    let allVideo = PHAsset.fetchAssets(with: .video, options: fetchOptions)
    allVideo.enumerateObjects { (asset, index, bool) in
        // videoAssets.append(asset)
        let imageManager = PHCachingImageManager()
        imageManager.requestAVAsset(forVideo: asset, options: nil, resultHandler: { (asset, audioMix, info) in
            if asset != nil {
                let avasset = asset as! AVURLAsset
                let urlVideo = avasset.url
                print(urlVideo)

            }
        })

    }

}
22.11.2019

4

Ознакомьтесь с сообщением в блоге, чтобы получить все видеоресурсы с помощью Photos Framework http://iavinashkashyap.blogspot.in/2016/11/get-list-of-all-videos.html

Код:

-(void) getAllVideoAssets{

NSMutableArray *assets = [[NSMutableArray alloc] init];
//Fetch all video assets from Photos
PHFetchResult *assetResults = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeVideo options:nil];
//get all assets
for (PHAsset *asset in assetResults){
    NSLog(@"asset type = %zd", asset.mediaType);
    [assets addObject:asset];
}
self.allVideoslistArray = [[NSMutableArray alloc] init];
//create an instance of PHImageManager
PHImageManager *manager = [PHImageManager defaultManager];
for(PHAsset *asset in assets){
    //block of code for represent video assets
    [manager requestAVAssetForVideo:asset options:nil resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) {
        if ([asset isKindOfClass:[AVURLAsset class]]) {
            NSURL *url = (NSURL *)[[(AVURLAsset *)asset URL] fileReferenceURL];
            UIImage *thumbnail = [self createThunbnailImage:url];
            [self.allVideoslistArray addObject:@{@"VideoUrl":url,@"ThumbnailImage":thumbnail, @"VideoAsset":asset}];
        }
    }];
}//end for loop

}

28.11.2016
  • Было бы здорово, если бы вы предоставили версию Swift 3? 26.04.2017
  • @Anura Я реализую то же самое в Swift. 09.06.2017

  • 5

    используйте этот метод, чтобы выбрать видео из библиотеки.

          //Call this method.
         [self startMediaBrowserFromViewController: self usingDelegate: self];
    
    
       - (BOOL) startMediaBrowserFromViewController: (UIViewController*) controller usingDelegate: (id <UIImagePickerControllerDelegate, UINavigationControllerDelegate>) delegate{
    
           if (([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeSavedPhotosAlbum] == NO) || (delegate == nil) || (controller == nil))
               return NO;
    
           UIImagePickerController *mediaUI = [[UIImagePickerController alloc] init];
           mediaUI.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    
           mediaUI.mediaTypes = [[[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil] autorelease];
           mediaUI.allowsEditing = YES;
           mediaUI.delegate = self;
           mediaUI.videoMaximumDuration = 60.0;
           //mediaUI.videoQuality = UIImagePickerControllerQualityTypeLow;
    
           [controller presentModalViewController: mediaUI animated: YES];
           return YES;
       }
    
    11.07.2013

    6

    Пожалуйста, обратитесь к ссылке ниже. Это может быть полезно для вас

    http://www.raywenderlich.com/13418/how-to-play-record-edit-videos-in-ios
    Удачи!!!

    11.07.2013
  • Хотя теоретически это может ответить на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки. Вы также должны объяснить, как это отвечает на вопрос. 11.07.2013
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..