Сохранить Youtube видео на iPhone в приложении - PullRequest
27 голосов
/ 23 февраля 2011

Воспроизведение видео с YouTube в приложении легко и хорошо документировано.

Есть две проблемы с этим:

  1. после закрытия проигрывателя Youtube, если пользователь хочет воспроизвести его снова, он должен снова дождаться онлайн-трансляции
  2. не может играть в автономном режиме (загрузить видео дома, чтобы посмотреть в дороге)

У кого-нибудь есть код для:

  1. загрузите видео Youtube в папку с документами и покажите прогресс загрузки
  2. воспроизвести загруженное видео, загрузив файл из папки документов (то есть, даже если он не подключен к Интернету)

Ответы [ 6 ]

42 голосов
/ 23 мая 2011

Чтобы скачать видео с YouTube:

  1. Получить URL для загрузки через API YouTube или любым другим способом.
  2. Создайте NSOutputStream или NSFileHandle , открытый во временном файле (в NSTemporaryDirectory() или во временном файле в каталоге Documents).
  3. Настройте свой индикатор выполнения и все, что вам нужно сделать.
  4. Выделите и запустите NSURLConnection для извлечения файла из URL. Не используйте sendSynchronousRequest:returningResponse:error:, конечно.
  5. В методе делегата connection:didReceiveResponse: зачитайте длину данных, которые нужно загрузить для правильного обновления индикатора выполнения.
  6. В методе делегата connection:didReceiveData: запишите данные в выходной поток / дескриптор файла и при необходимости обновите индикатор выполнения.
  7. В connectionDidFinishLoading: или connection:didFailWithError: закройте выходной поток / дескриптор файла и переименуйте или удалите временный файл соответствующим образом.

Чтобы воспроизвести его, просто используйте NSURL fileURLWithPath:, чтобы создать URL-адрес, указывающий на локальный файл в каталоге Documents, и воспроизвести его так же, как любое удаленное видео.

7 голосов
/ 16 января 2013

Я использовал классы из этого проекта: https://github.com/larcus94/LBYouTubeView Он прекрасно работает для меня.Я могу скачать видео на YouTube.

Я использовал этот код:

LBYouTubeExtractor *extractor = [[[LBYouTubeExtractor alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:(@"http://www.youtube.com/watch?v=%@"), self.videoID ]] quality:LBYouTubeVideoQualityLarge] autorelease];
[extractor extractVideoURLWithCompletionBlock:^(NSURL *videoURL, NSError *error) {
    if(!error) {
        NSLog(@"Did extract video URL using completion block: %@", videoURL);

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSData *data = [NSData dataWithContentsOfURL: videoURL];
            NSString *pathToDocs = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
            NSString *filename = [NSString stringWithFormat:(@"video_%@.mp4"), self.videoID ];
            [data writeToFile:[pathTODocs stringByAppendingPathComponent:filename] atomically:YES];
            NSLog(@"File %@ successfully saved", filename);
        });
    } else {
        NSLog(@"Failed extracting video URL using block due to error:%@", error);
    }
}];

Вы можете показать прогресс загрузки, используя технику, описанную в постах выше.

6 голосов
/ 27 февраля 2012

Вот мой пример: https://github.com/comonitos/youtube_video

Я использовал класс PSYouTubeExtractor.h, автор Peter Steinberger. Он может получить URL-адрес видео в формате youtube mp4, а загрузка и просмотр не являются проблемой

NSURLConnection + NSNotificationCenter + PSYouTubeExtractor + NSMutableData

5 голосов
/ 28 мая 2011

проверить эти проекты -

https://github.com/iosdeveloper/MyTube
https://github.com/pvinis/mytube

это вам определенно поможет !!

5 голосов
/ 23 мая 2011

Лично я не знаю, как загружать видео на YouTube (а код слишком велик, чтобы вставить здесь ответ).

Однако, вот полный пример загрузки на YouTube здесь ,Это загрузчик YouTube с открытым исходным кодом под названием LoadTube: вот ссылка на исходный код .

1 голос
/ 23 февраля 2011

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

...