使用嵌入式 HTTP 代理缓存流媒体视频?
Posted
技术标签:
【中文标题】使用嵌入式 HTTP 代理缓存流媒体视频?【英文标题】:Cache streaming video with embedded HTTP proxy? 【发布时间】:2013-12-03 18:55:40 【问题描述】:例如,有几个人尝试使用AVPlayer
或MPMoviePlayerController
缓存预加载的视频数据
最直接的方法似乎是在玩家的currentItem
上使用AVExportSession
,但似乎没有人能够让它工作。
我的问题是:是否可以通过基于磁盘的缓存支持的嵌入式 HTTP 服务器透明地代理设备上的视频请求?
我可以运行嵌入式 Web 服务器 (GCDWebServer),所以我的问题是
缓存会搞砸AVPlayer
试图选择最高带宽流的带宽优化代码吗?如果这是一个问题,我可以控制流,因此它只提供一个选项。
磁盘性能是否足以提供网络改进?看起来很明显会是这样,但我在网络上看到了各种文章,谈论 ios 上的磁盘 I/O 有多慢。
谢谢!
【问题讨论】:
您的问题和您提到的问题都不清楚您的目标是什么。您是尝试在本地保存播放视频的副本(您对 AVExportSession 的引用)还是尝试实现自己的缓存以改善播放? 我看不出你试图画出的区别。 “在本地保存播放视频的副本”和“实现缓存以改善播放”有什么区别?这些不是一回事吗?我不知道不会在本地保存视频的缓存方法。 区别在于实现。正如您所指出的,您可以使用代理机制来捕获正在下载的内容(从“玩家”的角度来看),或者使用 AVExportSession 来捕获已经下载/正在播放的数据。 对。所以这个问题的目的是询问社区这些实现是否可行。第一个问题linked above 显示了围绕AVExportSession
方法的疑问。正如我在问题正文中提到的那样,透明代理 AVPlayer
也可能不起作用是有原因的。
嗨@bcattle - 我正在处理完全相同的问题 - 我想在 iOS 上缓存我的视频,但到目前为止,我所有的尝试都失败了 NSURLProtocol
和自定义 resourceLoader
。我现在要实现一个透明代理,所以想问一下你是否在这方面取得了任何进展?
【参考方案1】:
对于 HTTP 实时流媒体:
如果嵌入式网络服务器要托管构成 HTTP 实时流源的媒体片段文件,则需要已经将文件下载到设备,除非您重新配置网络服务器以充当代理。
在任何一种情况下,似乎更简单的方法是下载并解析索引文件(通常是 prog_index.m3u8)以获取媒体段文件的列表,然后开始下载每个文件。
【讨论】:
感谢您的洞察力。我一直在想象一个透明的代理。所以你是说打开并阅读.m3u8
文件,然后透明地代理其中的每个流?以上是关于使用嵌入式 HTTP 代理缓存流媒体视频?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 html 中嵌入来自 Raspberry Pi 的流媒体视频?