8

こんにちは私はビデオに取り組んでいます。ライブラリからビデオファイルのリストを取得して、アプリでビデオを表示および再生したいと考えています。誰でも私を助けることができます。

4

7 に答える 7

11
allVideos = [[NSMutableArray alloc] init];
ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init];

[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];
                  NSURL  *videoURL = [[asset valueForProperty:ALAssetPropertyURLs] valueForKey:uti];
                  NSString *title = [NSString stringWithFormat:@"video %d", arc4random()%100];
                  UIImage *image = [self imageFromVideoURL:videoURL];
                  [dic setValue:image forKey:@"image"];
                  [dic setValue:title forKey:@"name"];
                  [dic setValue:videoURL forKey:@"url"];
                  [allVideos addObject:dic];
              }
          }];
     else
     {
     }
 }
  failureBlock:^(NSError *error)
 {
     NSLog(@"error enumerating AssetLibrary groups %@\n", error);
 }];
于 2013-07-15T12:45:12.213 に答える
3

フォト ライブラリを開き、ムービー タイプのコンテンツのみを表示します。

#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];
于 2013-07-11T06:00:24.283 に答える
3

すべてのビデオとサムネイルのリストを取得する

ここで情報を共有してくれた @Nikhil のおかげで助かりましたが、回答に欠けているものがほとんどないため、コードを実行可能にするのに数時間かかりました

ここに画像の説明を入力

だから私は私の完全な作業コードを共有したいと思います

1. フレームワークAssetsLibraryAVFoundation、およびMediaPlayerを追加するだけです。

2. AssetBrowserItem.hAssetBrowserItem.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
于 2015-02-05T12:06:30.070 に答える
0

以下のリンクを参照してください。それはあなたに役立つかもしれません

http://www.raywenderlich.com/13418/how-to-play-record-edit-videos-in-ios
頑張ってください!!!

于 2013-07-11T06:02:42.830 に答える
0

ライブラリからビデオを選択するには、この方法を使用します。

      //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;
   }
于 2013-07-11T06:13:31.640 に答える