Хобрук: Ваш путь к мастерству в программировании

воспроизвести все видео из галереи ios

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

 ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];

    [library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
        if (group) {
            [group setAssetsFilter:[ALAssetsFilter allVideos]];
            [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop){

                if (asset)
                {

                    NSDictionary *meta = [[asset defaultRepresentation] metadata];

                    if ([[asset valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeVideo]) {
                        // asset is a video
                        NSLog(@"See Asset: %@", asset);

                        self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[[asset defaultRepresentation] url]];
                        if (self.moviePlayer != nil)
                        {
                            [self stopPlayingVideo:nil];
                        }
                        if (self.moviePlayer != nil)
                        {
                            [[NSNotificationCenter defaultCenter]
                             addObserver:self
                             selector:@selector(videoHasFinishedPlaying:)
                             name:MPMoviePlayerPlaybackDidFinishNotification
                             object:self.moviePlayer];
                            NSLog(@"Successfully instantiated the movie player.");
                            /* Scale the movie player to fit the aspect ratio */
                            self.moviePlayer.scalingMode = MPMovieScalingModeNone;
                            /* Let's start playing the video in full screen mode */
                            self.moviePlayer.view.frame = CGRectMake(100, 50, 650, 500);
                            [self.moviePlayer play];
                            //        [self.moviePlayer.view setFrame:self.view.bounds];
                            [self.view addSubview:self.moviePlayer.view];
                            [self.moviePlayer setFullscreen:NO
                                                   animated:YES];

                            volumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(-410, 300, 140, 52)] ;

                            [self.view addSubview:volumeView];


                            CGAffineTransform trans = CGAffineTransformMakeRotation(M_PI_2);
                            volumeView.transform = trans;


                            for (id current in volumeView.subviews) {
                                if ([current isKindOfClass:[UISlider class]]) {
                                    volumeSlider = (UISlider *)current;

                                    volumeSlider.minimumTrackTintColor = [UIColor grayColor];
                                    volumeSlider.maximumTrackTintColor = [UIColor whiteColor];


                                    volumeSlider.value = volumeSlider.maximumValue;
                                    [btnVol setBackgroundImage:[UIImage imageNamed:@"mx_vol.png"] forState:UIControlStateNormal];

                                }
                            }


                            [self.moviePlayer setControlStyle:MPMovieControlStyleNone];
                        } else {
                            NSLog(@"Failed to instantiate the movie player.");
                        }
                        [_moviePlayer setRepeatMode:MPMovieRepeatModeOne];

                    }

                    //                    NSLog(@"%@",asset);
                                        NSLog(@"%@",meta);

                }
            }];
        }
    } failureBlock:^(NSError *error) {
        NSLog(@"error enumerating AssetLibrary groups %@\n", error);
    }];

  • как я предполагаю, вы используете, что говорит MPMovieRepeatModeOne Текущий фильм повторяется, когда он заканчивается. поэтому текущее видео будет повторяться все время. измените его на MPMovieRepeatModeNone 07.08.2014

Ответы:


1

Вы воспроизводите видео внутри блока перечисления (это зацикливание, оно перебирает все ваше видео и останавливается на последнем, поэтому воспроизводится только последнее).

Сначала вам нужно получить URL-адрес видео:

NSMutableArray  *videos  = [[NSMutableArray alloc] init];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop)
 {
     if (group)
     {
         [group setAssetsFilter:[ALAssetsFilter allVideos]];
         [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop)
          {
              if (asset)
              {
                  NSURL  *videoURL = [[asset valueForProperty:ALAssetPropertyURLs] valueForKey:uti];
                  [videos addObject:videoURL];
              }
          }];
      }
 }
  failureBlock:^(NSError *error)
 {
     NSLog(@"error enumerating AssetLibrary groups %@\n", error);
 }];

Теперь вам нужно воспроизвести первое видео и прослушать MPMoviePlayerPlaybackDidFinishNotification и начать воспроизведение следующего видео.

07.08.2014
Новые материалы

Создание успешной организации по науке о данных
"Рабочие часы" Создание успешной организации по науке о данных Как создать эффективную группу по анализу данных! Введение Это обзорная статья о том, как создать эффективную группу по..

Технологии и проблемы будущей работы
Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

Игорь Минар из Google приедет на #ReactiveConf2017
Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

Я собираюсь научить вас Python шаг за шагом
Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

React on Rails
Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

Что такое гибкие методологии разработки программного обеспечения
Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...