ALAssetsLibrary获取所有视频

时间:2013-12-16 14:27:11

标签: ios iphone objective-c video alassetslibrary

我正在制作一款相机应用,我想要了解用户在iPhone上创建的所有视频。

目前我的代码仅从用户Camera Roll获取视频。我的一些用户抱怨他们在Photo Album应用程序下创建了多个自定义文件夹,并在那里存储了一些视频。由于我的代码仅查看“相机胶卷”,因此它不会从其他文件夹中拾取影片。我可以到他们的其他文件夹吗?

这是我到目前为止所做的。

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    [library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop)
     {
         [group enumerateAssetsUsingBlock:^(ALAsset *alAsset, NSUInteger index, BOOL *innerStop)
         {
              if (alAsset)
              {
                  ALAssetRepresentation *representation =[alAsset defaultRepresentation];
                  NSURL *url = [representation url];
                  NSString *assetType=[alAsset valueForProperty:ALAssetPropertyType];


                  //videos only
                  if ([assetType isEqualToString:@"ALAssetTypeVideo"])
                  {
                   .....

3 个答案:

答案 0 :(得分:2)

你必须为资产创建一个过滤器,如下所示:

ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop) {  

    ALAssetsFilter *allVideosFilter = [ALAssetsFilter allVideos];
    [group setAssetsFilter:allVideosFilter];
    //...
};

过滤器选项包括: - allAssets - allVideos - allPhotos

希望这有帮助

答案 1 :(得分:1)

要获取从iTunes同步的媒体,您需要使用ALAssetsGroupLibrary。 Here您可以找到ALAssetsGroupType的所有可能变体。所以只需改变

[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:...

[library enumerateGroupsWithTypes:(ALAssetsGroupSavedPhotos | ALAssetsGroupLibrary) usingBlock:...

答案 2 :(得分:0)

这将检索所有视频,包括用户已从iTunes同步的所有视频:

// Enumerate just the photos and videos by using ALAssetsGroupSavedPhotos

[library enumerateGroupsWithTypes:ALAssetsGroupAll | ALAssetsGroupLibrary
                       usingBlock:^(ALAssetsGroup *group, BOOL *stop)
{
    if (group != nil)
    {
        // Within the group enumeration block, filter to enumerate just videos.
        [group setAssetsFilter:[ALAssetsFilter allVideos]];
        [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
            if (result) {
                // Do whatever you need to with `result`
            }
        }];
    } else {
        // If group is nil, we're done enumerating
        // e.g. if you're using a UICollectionView reload it here
        [collectionView reloadData];
    }
} failureBlock:^(NSError *error) {
    // If the user denied the authorization request
    NSLog(@"Authorization declined");
}];

请注意ALAssetsGroupAll | ALAssetsGroupLibrary

根据docs ALAssetsGroupAll"与将ALAssetsGroupLibrary"除外的所有组类型进行OR运算相同。因此,我们还添加ALAssetsGroupLibrary,其中"包括从iTunes"同步的所有资产。