Flash10 + p2p 真的有用吗?
Posted
技术标签:
【中文标题】Flash10 + p2p 真的有用吗?【英文标题】:Does Flash10 + p2p really work? 【发布时间】:2010-11-09 19:11:36 【问题描述】:我一直在谷歌上搜索,但我仍然无法得到它。有人说:给你,就用它。其他人声称它有某些限制,不允许您在 Flash 中以您想要的方式使用 p2p。
所以,这里有一个简单的问题:是否有可能实现一个 Flash10 应用程序,它使用一些现有的 torrent 文件将视频/音频直接流式传输到用户的浏览器中?
如果没有 - 为什么?这个“不”有什么可能的解决方法吗? 如果是 - 实施的困难是什么?为什么还没有人真正做到?
【问题讨论】:
【参考方案1】:答案几乎是不...嗯,说实话,只是不。 @drudru 指出了适用于 flash p2p 的正确技术,即 Stratus。
Flash p2p 基于 RTMFP,它是建立在 UDP 之上的。实际上,flash 确实绑定了一个端口,但这来自内部。没有 API 可以手动执行此操作。
RTMFP 基本上允许两件事:
-
用于视频和音频的 UDP 流(不可靠,但速度快)。从 Flash 端,您只能发布您的相机和麦克风流。从服务器,几乎任何东西。
对 p2p 连接的另一个端点进行远程调用。这可用于传输数据。这种通信是安全的,即包顺序和完整性由 Flash 播放器维护。
p2p 基于 NAT 穿透。 Stratus 本身就是介绍服务器。此外,出于安全目的,p2p 连接也意味着,两个客户端都必须有一个空闲的 TCP(如果我没记错的话)连接到服务器。我猜,当然会传输一些数据,但不会传输有效载荷。
但是,torrent 协议与此有很大不同。因此,这不是一个选择。您可以在 RTMFP 之上构建等效协议,对 stratus 服务进行逆向工程(或等到它开源)。这当然也可以由非闪存客户端使用。但是同样,您将无法将传输的数据作为视频观看,因为您将获得作为参数来调用您的NetStream
的客户端,可能是ByteArray
。而且您无法播放ByteArray
s。您可以编写非 Flash 客户端,将视频作为流发布,但我猜这远非您想要的。
如果你真的想做这样的事情,你需要 Java。您可以签署 Java 小程序,如果用户接受证书,他们实际上可以不受限制地访问,例如你可以绑定端口。因为Java可以做UDP,你可以有一个Java小程序,做种子下载(也许只使用Vuze代码库),如果你真的想在flash中显示它(这又需要flv),那么你可以模仿一个本地“ Flash Media Server”并在 localhost:someport 上发布视频。但实际上,闪存位对我来说似乎非常复杂和无用。而是尝试使用 Java 进行回放,希望它可以选择在本地进行。
【讨论】:
谢谢,非常完整的答案。 这听起来很像 ninjavideo 使用他们的 ninjavideo 助手所做的,除了他们使用 divx 网络播放器而不是 flash 连接到 localhost。【参考方案2】:Flash 不允许您在套接字上侦听传入连接。这个会 使使用现有种子变得非常困难。鉴于安全问题 围绕这个,我没有看到它发生。
然而,Adobe 已经启动了他们自己的 P2P 系统版本,称为 Stratus。 你可以在这里阅读http://labs.adobe.com/technologies/stratus/
【讨论】:
【参考方案3】:所有这些信息现在都已经过时了。
【讨论】:
【参考方案4】:嗯...这是一个有趣的提议,只将下载的文件保留在 Flash 的内存中。我认为这当然是可能的,但可能会很慢,而且你会被限制在几百兆字节。
编辑:这是不可能的,因为你不能只使用 Flash 来监听端口,浏览器没有那种能力。
【讨论】:
据我所知,Flash10 已经允许在磁盘上存储文件了。以上是关于Flash10 + p2p 真的有用吗?的主要内容,如果未能解决你的问题,请参考以下文章
我可以通过 Javascript 在 Flash (AS2) 中设置变量吗
我可以在 Electron.js 应用程序中捆绑 Pepper Flash 以在 2021+ 年运行 Flash 吗?
我可以销毁使用 SWFObject 创建的 Flash 对象吗?