之后iOS视频流和存储在设备上

时间:2011-06-09 08:49:06

标签: iphone objective-c ios ios4 video-streaming

到目前为止,我知道如何流式传输视频以及如何下载视频,然后再将其流式传输,但这里有点棘手:将其流式传输一次,将其存储在设备上以及将来从设备中播放。

这可能吗?

5 个答案:

答案 0 :(得分:1)

保存视频非常简单。做类似的事情:

//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 :(得分:1)

在这里不太确定如何获取流但是查看AVAssetWriter,AVAssetWriterInput和AVAssetWriterPixelBufferAdaptor,一旦收到数据,您应该能够使用以下内容将数据附加到像素缓冲区适配器:

appendPixelBuffer:withPresentationTime:

不确定它是否会对你有用但是有些摆弄你应该能够调整你的输入来匹配这个方法。有很多用于设置编写器的示例代码

答案 2 :(得分:0)

我知道你想要实现什么,我只有一个解决方法。我不得不实现相同的行为,最后从服务器流式传输视频并将其下载到流式传输旁边。下次用户尝试流式传输视频时,确定它是否已下载到磁盘,否则再次流式传输。在正常情况下,视频已正确下载,可以离线查看。

答案 3 :(得分:0)

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

fileURLWithPath:isDirectory:

初始化并将新创建的NSURL对象作为具有指定路径的文件URL返回。

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

参数

路径

NSURL对象将表示的路径。 path应该是一个有效的系统路径。如果path以波浪号开头,则必须首先使用stringByExpandingTildeInPath进行扩展。如果path是相对路径,则将其视为相对于当前工作目录。 为此参数传递nil会产生异常。

ISDIR

一个布尔值,指定在解析相对路径组件时是否将路径视为目录路径。如果路径指示目录,则传递YES,否则返回NO。 回报价值 使用path。

初始化的NSURL对象

状况

适用于iOS 2.0及更高版本。

您无法对其进行流式传输并同时保存,尤其是对于大型视频文件而言,必须使用传输流进行HTTP直播的Apple文档。

答案 4 :(得分:0)

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或电影播放器​​层,无论您使用什么。完成后,仍应保存资产,以便以后可以获取。