【发布时间】:2009-04-05 06:42:33
【问题描述】:
我一直对向媒体浏览器添加对视频播客的支持非常感兴趣。
我希望用户能够浏览可用的视频播客并从互联网流式传输它们。这真的很容易,因为媒体播放器等会很乐意播放云中的文件。
问题是我想在本地缓存这些文件,以便后续观看同一集不会涉及流媒体,而是播放本地文件。
所以...我在想,为什么不托管HttpListener 并且当媒体播放器要求它提供文件的位时,让HttpListener 下载并存储在本地。下次用户播放文件时,我们将在本地拥有文件的某些部分。
有人知道使用HttpListener 进行代理的示例代码吗?
编辑
这个想法只是代理简单的流媒体内容,如 MP3 或 Mov。 赏金将用于实际实施。
这是我想要的 API:
// will proxy a uri on the local port, if cacheFile exists it will resume the
// download from cacheFile.
// while the file is downloading it will be name cacheFile.partial, after the
// download is complete the file will be renamed to cacheFile.
// Example usage: ProxyFile("http://media.railscasts.com/videos/176_searchlogic.mov", 8000, @"c:\downloads\railscasts\176_searchlogic.mov")
//
// Directly after this call http://localhost:8000 will be the proxy stream, it will be playable locally.
void ProxyUri(Uri uri, int port, string cacheFile)
编辑 2
HttpListener 看起来很没有希望我可能需要在 TCP 套接字级别完成这项工作,因为HttpListeners 似乎需要程序以管理员身份运行,这将非常棘手。
【问题讨论】:
-
在提供实现之前...我想澄清一下要求。听起来您不仅想提供代理,还想提供下载内容的缓存,这样您就不需要每次用户想玩时都为内容往返......我说的对吗?
-
@Justin,完全可以,将使用 api 进行扩展。
-
我用一个要点的链接更新了我的答案。
-
回复。你的cmets:我不认为许可是一个问题。就不使用 HttpListener(由于管理员权限问题)而言 - 很公平,尽管您最初的问题确实专门针对 HttpListener 实现。
-
@Vinay,真的,正如我所说,除非有更好的实现,否则我会奖励你赏金,我暂时忽略了这个问题并忘记了 http 监听器限制(我遇到了一些几个月前我玩它的时候)