【问题标题】:Playing a video from live stream while also saving the stream to disk on iOS在 iOS 上播放实时流中的视频,同时将流保存到磁盘
【发布时间】:2012-08-12 23:26:40
【问题描述】:

我研究这个话题已经有一段时间了,但我真的不知道如何才能做到这一点。假设我们有一个来自 HTTP 流的视频,我希望能够在我的应用程序中播放该视频,同时该视频也保存在磁盘上。我知道我可以使用AVFoundation 或 MediaPlayer 框架播放视频,我可以通过NSURLRequest 加载文件/流。

不过,这是两个不同的过程,需要两次加载视频。我不知道是否以及如何将这两者结合起来。这可能/可行吗?

【问题讨论】:

标签: objective-c ios streaming avfoundation nsurlrequest


【解决方案1】:

这是可能的。但是,出于您的 YouTube 视频的目的,如果您喜欢我不想推荐。因为遵循 Youtbe TOS。

出于以下原因:

22.4

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

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

另请参阅以下网站问题。这很重要。你肯定需要阅读。

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


不管怎样,现在我将告诉你如何实现它们。

一个。 Streaming Service 实现起来并不难。根据苹果的示例代码可以很容易地实现。请注意以下事项。这使用 AVPlayer。在 3G 时,我测试了 Wifi。没关系。如何测试?上传到您的服务器的视频或获取视频链接。并复制粘贴到源代码xib textField中。

StitchedStreamPlayer

b.同时提供视频下载。我会推荐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];

【讨论】:

  • 嗨,很好的答案,但是如果我想在通过输出流下载后播放。有可能吗?
【解决方案2】:

你应该看看这个很好的答案:

https://stackoverflow.com/a/23754994/1509392

它解释了如何使用 AVURLAsset 完成此操作并向 resourceLoader 对象提供数据。这个想法是,resourceLoader 将向您的代理询问媒体数据,然后您可以从源下载并保存到磁盘。

【讨论】:

  • 上面的答案非常适合音频,但不适用于视频。
猜你喜欢
  • 2014-07-21
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 2020-02-26
  • 2021-06-22
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
相关资源
最近更新 更多