从实时流播放视频,同时还将流保存到iOS上的磁盘

bom*_*mpf 4 streaming objective-c avfoundation nsurlrequest ios

我一直在研究这个话题一段时间,我无法弄清楚我是如何实现这一目标的.假设我们有来自HTTP Stream的视频,我希望能够在我的应用中播放该视频,同时视频也会保留在磁盘上.我知道我可以使用AVFoundation或MediaPlayer框架播放视频,我可以通过加载文件/流 NSURLRequest.

然而,这是两个不同的过程,需要加载视频两次.我无法弄清楚是否以及如何将这两者结合起来.这可能/可行吗?

bit*_*com 7

这是可能的.但是,如果您愿意,为了您的YouTube视频,我不想推荐.因为跟随Youtbe TOS.

原因如下:

22.4

我们发现您的应用包含的信息可能允许其用户下载不符合YouTube服务条款的YouTube内容.

"......除非您在本服务上看到YouTube上显示的"下载"或类似链接,否则您不得下载任何内容.您不得复制,复制,分发,传输,广播,展示,出售,许可或未经YouTube或内容的相应许可人事先书面同意,否则不得将任何内容用于任何其他目的.YouTube及其许可方保留未在服务和内容中明确授予的所有权利.

还请参考以下网站问题.这非常重要.你肯定需要阅读.

http://www.iphonedevsdk.com/forum/business-legal-app-store/88260-youtube-downloader.html


无论如何,现在我将告诉你如何实现它们.

一个.流媒体服务并不难实现.根据Apple的示例代码可以轻松实现.请注意以下事项.这使用AVPlayer.在3G,我测试了Wifi.很好.怎么测试?上传到您的服务器视频或获取视频链接.并复制并粘贴源代码xib textField.

StitchedStreamPlayer

湾 视频下载可同时使用.我会推荐AFNetworking.ARC支持它.因此,如果应用状态为后台,请继续下载.

AFNetworking

如何下载?

NSURLRequest *request = [NSURLRequest requestWithURL:"your_http_video_url" cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:20];

AFURLConnection *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

NSArray *docPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docPath = [[docPaths objectAtIndex:0] stringByAppendingPathComponent:"your_save_video_name.mp4"];

operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];

[operation setDownloadProgressBlock:^(NSInteger bytesRead, long long 
totalBytesRead, long long totalBytesExpectedToRead)
{
    //do stuff. about upadte progressbar...
}];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
{
  NSLog(@"downloadComplete"); // show alertView to user.
}];
[operation start];
Run Code Online (Sandbox Code Playgroud)