Подтвердить что ты не робот

Сохранить видео Youtube для iPhone в приложении

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

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

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

Есть ли у кого код:

  • загрузите видео с YouTube в папку с документами и покажите ход загрузки.
  • воспроизводит загруженное видео, загружая файл из папки с документами (что означает, даже если оно не подключено к Интернету).
4b9b3361

Ответ 1

Чтобы загрузить видео с YouTube:

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

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

Ответ 2

Я использовал классы из этого проекта: 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);
    }
}];

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

Ответ 3

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

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

NSURLConnection + NSNotificationCenter + PSYouTubeExtractor + NSMutableData​​p >

Ответ 4

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

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

Ответ 6

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