使用嵌入式 HTTP 代理缓存流媒体视频?

Posted

技术标签:

【中文标题】使用嵌入式 HTTP 代理缓存流媒体视频?【英文标题】:Cache streaming video with embedded HTTP proxy? 【发布时间】:2013-12-03 18:55:40 【问题描述】:

例如,有几个人尝试使用AVPlayerMPMoviePlayerController 缓存预加载的视频数据

Caching with AVPlayer and AVAssetExportSession Access the data of AVPlayer when playing video from HTTP Live Streaming

最直接的方法似乎是在玩家的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 的流媒体视频?

如何在 HTML 网页中嵌入流媒体视频(rtmp 协议)?

http push - 使用 ssl 的 http 流媒体方法 - 代理会干扰 https 流量吗?

如何使用easydarwin搭建代理流媒体服务器

搭建nginx服务器和直播流媒体服务器

http流媒体