Потоковая передача и сохранение видео в iOS на устройстве после этого

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

Возможно ли это?

28
задан Tudor 9 June 2011 в 08:49
поделиться

4 ответа

Не совсем уверен, как получить поток, но посмотрите на AVAssetWriter, AVAssetWriterInput и AVAssetWriterPixelBufferAdaptor, и как только вы получите данные, вы сможете добавить данные в адаптер пиксельного буфера, используя:

appendPixelBuffer:withPresentationTime:

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

1
ответ дан 28 November 2019 в 03:58
поделиться

Довольно легко сохранить видео. Сделайте что-то похожее на это:

//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 *, по одному разу на каждом шаге.

1
ответ дан 28 November 2019 в 03:58
поделиться

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

0
ответ дан 28 November 2019 в 03:58
поделиться

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 или в проигрыватель фильмов в реальном времени. все, что вы используете. Когда вы закончите, ресурс должен быть сохранен, чтобы вы могли получить его позже.

0
ответ дан 28 November 2019 в 03:58
поделиться