Пока я знаю, как транслировать видео в потоковом режиме и как его загружать, а затем передавать в потоковом режиме, но вот хитрость: потоковое видео один раз, сохранение на устройстве и в будущем воспроизведение с устройства.
Возможно ли это?
Не совсем уверен, как получить поток, но посмотрите на AVAssetWriter, AVAssetWriterInput и AVAssetWriterPixelBufferAdaptor, и как только вы получите данные, вы сможете добавить данные в адаптер пиксельного буфера, используя:
appendPixelBuffer:withPresentationTime:
не уверен, что это сработает для вас, но с некоторыми неудобствами вы сможете адаптировать свой ввод в соответствии с этим методом. Есть много примеров кода для настройки писателя
Довольно легко сохранить видео. Сделайте что-то похожее на это:
//Saving Movie
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:*MovieObject* forKey:@"MovieObjectDataKey"];
[archiver finishEncoding];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"MovieObjectDefaultsDataKey"];
[archiver release];
[data release];
//Retrieving movie
NSData *savedMovieData = [[NSUserDefaults standardUserDefaults] objectForKey:@"MovieObjectDefaultsDataKey"];
if (savedMovieData != nil) {
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:savedMovieData];
*MovieObject* = [[unarchiver decodeObjectForKey:@"MovieObjectDataKey"] retain];
[unarchiver finishDecoding];
[savedMovieData release];
[unarchiver release];
} else {
//Download Stream of Your Movie
}
Единственное, что вам действительно нужно изменить - это * MovieObject *, по одному разу на каждом шаге.
Я знаю, чего ты хочешь достичь, у меня есть только обходной путь. Мне пришлось реализовать то же поведение, и в итоге я получил потоковую передачу видео с сервера и загрузил ее рядом с потоковой передачей. В следующий раз, когда пользователь попытается передать потоковое видео, определите, было ли оно загружено на диск, в противном случае его снова передают. В обычном случае видео было загружено правильно и могло быть просмотрено в автономном режиме.
ASIHttpRequest может сделать вашу жизнь проще.
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadDestinationPath:@"video.m4v"]; // use [NSBundle mainBundle] to find a better place
От вашего делегата обработайте это:
- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data;
Выполните любую перекодировку данных с помощью data
, как только вы их получите, и отправьте их на слой AVAssetWriter
или в проигрыватель фильмов в реальном времени. все, что вы используете. Когда вы закончите, ресурс должен быть сохранен, чтобы вы могли получить его позже.