Вы бы сделать что-то вроде этого:
- (void) downloadVideo
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.xyz.com/image.mp4"]];
NSString *tempPath = [NSString stringWithFormat:@"%@/%@", NSTemporaryDirectory(), temp.mp4];
[imageData writeToFile:tempPath atomically:NO];
UISaveVideoAtPathToSavedPhotosAlbum (@ tempPath, self, @selector(video:didFinishSavingWithError: contextInfo:), nil);
);
- (void) video: (NSString *) videoPath
didFinishSavingWithError: (NSError *) error
contextInfo: (void *) contextInfo {
NSLog(@"Finished saving video with error: %@", error);
}
Есть две вещи, которые необходимо принять к сведению:
- Убедитесь, что вы указать схему URL. Это не браузер, он не собирается пытаться настроить HTTP и догадываться о вас.
- Если это основной поток, это вызовет синхронный ларек, когда произойдет
dataWithContentsOfURL:
. Если основной поток задержится более 20 секунд, телефон предположит, что приложение застряло в бесконечном цикле и убило его. Поэтому, если этот код находится в основном потоке, вам нужно либо переместить его на фоновый поток, либо перейти к асинхронной загрузке с использованием NSURLConnection.
вы объявили NSData * ImageData, но вы не использовали it..and также вы сделали не упоминать, как изменить имя файла для сохранения? который лучше всего подходит для длительной видеоролики, пожалуйста, вы дадите какой-нибудь учебник сэр? –
Вы правы, я прищурился, вам нужно сначала сохранить его в файл с помощью 'writeData: atomically:', я соответствующим образом изменил код. Лучший способ загрузить его - использовать NSURLConnection асинхронно, о чем я упоминал в ответе. Есть много примеров этого в Интернете и в других ответах SO. –
ошибка возникает, как неявное объявление функции UISaveVideoAtPathToSavedPhotosAlbum ' –