我对向媒体浏览器添加对视频播客的支持非常感兴趣。
我希望用户能够浏览可用的视频播客并从 Internet 流式传输它们。这真的很容易,因为媒体播放器等.. 会很高兴地播放云端的文件。
问题是我想在本地缓存这些文件,这样同一集的后续观看就不会涉及流媒体,而是播放本地文件。
所以...我在想,为什么不托管一个 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 套接字级别完成这项工作,因为 HttpListener
似乎要求程序以管理员身份运行,这将真的很棘手。
最佳答案
我之前没有对 HttpListener
做过任何事情,所以我认为这将是一个很好的小练习,可以让我自己跟上它的速度 - 事实证明。我将其实现为单个 ProxyListener
类,其构造函数采用您指定的 ProxyUri
函数的参数。获得实例后,您可以通过调用其 Start
方法开始监听(并可能下载)。完成后,调用 Cleanup
。
有一个或两个粗糙的边缘,但基本上它按照你的问题工作。为了测试它,我将它构建为一个带有 Program
类的控制台应用程序,该类接受由(uri、端口、文件名)组成的输入行,以空格分隔,创建 ProxyListener
实例并启动它们。您可以运行此控制台应用程序,输入合适的行,下载程序将启动(将进度打印到控制台)。同时你可以,例如启动 IE 并从指定端口获取文件,您将能够在下载程序仍在运行时下载它。 “ uploader ”进度也将打印到控制台。
我在将它粘贴到这里时遇到了一些麻烦,可能是因为大小(它不是那么大,但比您通常在这里看到的片段要大 - ProxyListener
类有点小200 行)。听起来有趣吗?如果是这样,我会将其发布到 pastebin 并使用链接更新此答案。
更新:发布为 gist .
请注意,您需要管理员权限才能运行该程序,因为 HttpListener
需要此权限。
更新 2:在某些情况下,运行 HttpListener
不需要管理员权限。参见 this link和 this one .这个想法是,如果您可以在安装期间保留一个 URL 命名空间,那么用户在监听该命名空间时就不必拥有管理员权限。
关于c# - 使用 TCP 套接字在本地代理视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/718478/