2012-06-11 110 views
4

可以实现一项功能,允许用户在视频上传到其他人时上传到服务器。 html 5适合这项任务吗?但闪光?是否有任何解读,不想重新发明轮子。该应用程序将托管在专用服务器上。在上传视频时观看视频

谢谢。

+0

网络化,它很容易实现。问题是,你使用的是什么技术?您的用户正在上传什么视频编解码器?所有其他用户容易理解,无需预处理?您拥有多少用户,以及您可以备用多少处理能力以便即时重新编码视频?您是否可以相信上传用户足以分发数据而不过滤潜在威胁?你需要更好地处理你的问题。 – lvella

+0

Torrent协议的创建者现在正在研究这种技术,并且他长期以来一直致力于这项技术。 – megas

回答

3

当然有可能,数据不存在吗?

然而,它很难实现。

另外我不是很喜欢Python,我不知道一个图书馆或服务适合您的要求,但我可以涵盖视频流的基本知识。

我假设你正在谈论上传的视频文件,而不是流。因为,为此,显然有数以千计的解决方案...

在最简单的情况下,上传的视频已准备好提供给您的客户,并有一个所谓的“faststart原子”。它们是特定的容器格式,有时候会有一堆。最常见的是moov原子。它包含大量数据并且非常复杂,但在我们的用例中,简而言之,它包含的数据使客户端可以立即开始使用可用数据开始播放视频。

如果您有渐进式下载视频(youtube ...),则表示从Web服务器提供文件的位置。你显然没有下载完整的文件,玩家已经可以开始玩了。

如果fastastart原子不存在,那是不可能的。 有时候是这样,但例如播放器无法显示进度条,因为它不知道文件有多长。

覆盖该文件可以上传。您需要一个将数据直接写入缓冲区或文件的上传解决方案。 (文件会更容易...)。

这几乎总是如此,例如PHP在tmp_dir中创建一个文件。如果您想要在上传视频时查找视频,也可以指定它。

那么,现在您可以逐字节地读取该文件并将该数据打印到与另一个客户端的连接。只要确保不要超过已经收到和写过的东西。您可以通过在内存中设置的元数据启动您的上传,该元数据保存当前接收到的文件的字节位置和位置。

任何在上传启动后请求文件的人都可以收到整个文件,或者如果上传尚未完成,请从您的应用程序获取。

当数据变短时,您将不得不限制数据传输或暂停数据传输。这对客户来说几乎是一个“慢速连接”。但是,您必须不时地回复一些数据以防止连接关闭。但是,如果你的上传不停止,为​​什么要这么做?那不应该是一个问题。

现在,如果您想要将各种输入格式的代码转换为您想要的输出格式,那么情况会变得很有趣。

AFAIK ffmpeg具有巧妙的apis,可让您直接处理datasterams。

另外手刹是一个非常好的工具,但是你需要采用外部可执行的漫长道路。

我没有真正意识到您的要求,但是如果您的客户端已经调整好了,例如在红色5流式服务器上,将数据提供给流应该也可以正常工作。

1

是的,看看Qik的,http://qik.com/

“即时视频分享......影片可以现场(右因为他们正在记录)或之后随时观看。”

的Qik为开发人员提供的API,包括那些像这样:

  • qik.stream.subscribe_public_recent - 订阅视频(直播和录制)

  • qik.user.following - 提供人列表中的用户是继

  • qik.stream.public_info - 获取公共信息的特定视频

1

这是最肯定的,但它不会微不足道。不,我不认为你会找到一个“开箱即用”的解决方案,而不需要你的努力。

你说你不想让:

users watch videos as they are uploaded to server by others 

那么,这可以被解释两种不同的方式:

  1. 你的意思是你不希望用户需要刷新在看到其他用户刚完成上传的新视频之前的页面?
  2. 或者你的意思是你想要一个用户能够观看部分上传的视频(又名另一个用户仍在上传它,现在服务器只包含部分上传的视频)?

执行#1根本不会有任何困难。您只需要一个AJAX脚本来检查新上传的视频,然后可以以您选择的任何方式将这些视频提供给用户。 HTML5与Flash并不是真正的考虑因素。

另一方面,第二种情况需要付出相当大的努力。我猜测HTML5可能不够成熟,无法应对这种情况。如果你不看 重新发明轮子,并没有很多时间专门用于这个功能比我会说你会运气不好。您可能可以使用ffmpeg来解析部分视频文件并将它们提供给Flash播放器,但我认为这是一项艰巨的任务。