iOSvideostream,然后存储在设备上

到目前为止,我知道如何stream式传输video,以及如何下载video,然后进行stream式传输,但这里有一个棘手的问题:stream式传输一次,将其存储在设备上,以后再从设备上播放。

那可能吗?

在这里不太确定你如何得到你的stream,但看看AVAssetWriter,AVAssetWriterInput和AVAssetWriterPixelBufferAdaptor,一旦你收到数据,你应该能够将数据追加到像素缓冲适配器使用:

appendPixelBuffer:withPresentationTime: 

不知道它会为你工作,但有一些摆弄你应该能够适应你的input,以匹配这种方法。 有很多示例代码来设置编写器

保存video很容易。 做类似的事情:

 //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 *,每一步都有一次。

我知道你想达到什么,我只有一个解决方法。 我不得不实施相同的行为,最后从服务器上stream式传输video,然后将其下载到stream媒体中。 下次用户尝试stream式传输video时,请确定是否将其下载到磁盘,否则再次stream式传输。 在正常情况下,video被正确下载,可以离线查看。

 BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:somePath]; 

fileURLWithPath:isDirectory:

初始化并返回一个新创build的NSURL对象作为具有指定path的文件URL。

 + (id)fileURLWithPath:(NSString *)path isDirectory:(BOOL)isDir 

参数

path

NSURL对象将表示的path。 path应该是有效的系统path。 如果path以波形开始,则必须首先使用stringByExpandingTildeInPath进行扩展。 如果path是一个相对path,则视为相对于当前工作目录。 对此parameter passingnil会产生一个exception。

ISDIR

一个布尔值,指定在parsing相对path组件时是否将path视为目录path。 如果path指示目录,则传递YES;否则,传递否。 返回值用path初始化的NSURL对象。

可用性

在iOS 2.0及更高版本中可用。

您无法同时对其进行stream式处理并保存,尤其是对于苹果电脑公司的大型video文件,您必须使用传输stream进行HTTP实时stream传输。

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; 

不pipe你使用的是什么数据,你都可以用数据代码进行转码,然后将其推送到AVAssetWriter或者电影播放器​​层。 完成后,资产仍应保存,以便稍后获取。