【问题标题】:file upload issue文件上传问题
【发布时间】:2010-10-17 13:17:09
【问题描述】:

我正在为我的网站实现类似于 Youtube 的类似场景——上传视频,以便所有人都可以观看。我的问题是,我认为我们需要在上传后对视频进行编码,然后其他人才能远程播放,但编码过程非常慢(我尝试使用 Microsoft Expression Encoder 和 mplayer,编码一个 20 分钟的视频大约需要 10 分钟)。令我惊讶的是,即使我们将一个非常大的视频上传到 Youtube,其他人似乎可以立即选择并播放,看起来编码过程几乎需要零时间。

请问有人有什么想法吗? Youtube 是如何神奇地进行如此快速的编码过程的?或者 Youtube 完全跳过了编码过程——但是如果跳过编码过程,Youtube 怎么能确保所有上传的视频都是可播放的(即视频遵循一些参数,比如比特率、图片大小等等)?

提前致谢, 乔治

【问题讨论】:

  • 你在哪里运行这个编码器?在您的小型桌面上还是在适当的服务器上?
  • @S.Lott,我在服务器上运行它。它有 2 个 CPU,Windows Server 2003 和 x64 机器,4G RAM。我编码的视频大约80M输入,编码视频大约需要40-50分钟(视频全长大约90分钟)。有什么提高性能的想法吗?

标签: video upload youtube encode multimedia


【解决方案1】:

不要忘记 YouTube 归 Google 所有,因此拥有450,000 服务器可能会有所帮助!

(我承认,这是一个有点滑稽的回答。显然 YouTube 无法访问所有这些内容。但重点仍然是他们将有大量资源来解决这个问题)

【讨论】:

  • @Brian,尽管编码视频需要一些时间。我不认为 youtube 会将我的 20M 视频分成数百个片段,分发到数百台机器,在每台机器上编码,然后将它们组合在一起?
  • (续)也许 Youtube 根本不编码?我没有找到这样的信息。有什么想法或cmets?
  • 我承认我不知道 YouTube 将如何利用这些资源,但 Google 是工作细分和并行化方面的专家,所以如果没有发生一些并行化,我会感到惊讶。然而,完全的猜测
  • @george2:他们为什么不把它分成 100 块或 1000 块呢?这就是多核并行处理的全部意义所在——大量小的并发事务。
  • @Brian,你能给我看一些关于并行化如何改进视频编码过程的参考文件吗?我尝试了 mplayer 和表达式编码器,我发现我的两个 CPU 几乎都被 100% 占用,我认为并行化已经被使用了,对吗? (继续)
【解决方案2】:

在做任何其他事情之前,先买一个更好的编码器。有很多可用的编码器。有些是开源的,有些是专有的。 Apple 有一些非常非常好的编码器,速度快但价格昂贵。

查看http://www.ffmpegx.com/,了解开源编码器技术的最新进展。它们集成了多种技术。

【讨论】:

  • @S.Lott,我尝试过使用 ffmpegx,我认为 mplayer 在内部使用它。在我的电脑上编码 20 分钟的视频需要 10 分钟。所以,我认为谷歌没有使用类似的东西。您确定 Youtube 是否会编码视频或根本不编码(只播放上传的内容)?
  • 我强烈推荐 x264。通过适当的设置,它可以比实时更快地编码 MPEG4 视频。
【解决方案3】:

另外,youtube 可能使用了硬件编码器。

而且,只有在编码比播放快的情况下,是否可以在编码时播放。

【讨论】:

  • @arsane,1. 有没有提到更快的硬件编码器? 2.“只有在编码速度快的情况下才可以在编码时播放”-我没有经验,你能给我一些参考,说明如何在视频仍在编码过程中播放视频吗?
  • (续)我还想了解一些关于何时应该编码以及何时不应该编码的准则。实际上,我没有看到编码的任何好处——没有编码,上传的视频仍然可以播放。 :-)
  • 对于硬件编码器,你可以google一下。但我不知道哪个 H/W 编码器是最好的。喜欢:streetwise.com.au/product_info.php?products_id=7061 可以编码为 youtube 视频。对于第二种播放/编码方式,我不是编码专家,但我认为应该可以。
  • 我认为编码有以下好处:1.节省带宽。 2.客户端浏览器支持。(我只能在linux下的firefox播放flash vedio)...
  • @arsane,我研究了编码器硬件,我很感兴趣它与基于软件的编码器相比有多快。但我没有找到任何号码。你有任何文件或有这样的号码吗?谢谢。
【解决方案4】:

Youtube 是如何神奇地进行如此快速的编码过程的?

在没有任何特定内部知识的情况下,我希望 (1) 将输入视频切成更短的片段以发送到多个编码器,以及 (2) 在您上传流的同时对流进行编码,而不是等到您'已上传整个文件以开始。

或者 Youtube 完全跳过编码过程

不,所有内容都必须转换为 FLV 才能播放。

【讨论】:

  • @bobince, 1. 有没有关于上传时如何同时实现编码的参考代码或文档?我很想了解更多关于这个很酷的想法。
  • (继续) 2. 你有关于如何将视频分成小部分、编码和重新组装的文档或示例吗?我对如何划分和如何重新组装感到非常困惑,因为我认为我们必须解析和理解内部视频格式才能进行划分/重组?
  • 您必须自己处理请求正文解析,而不是使用您使用的任何高级框架/语言将其留给表单解析器。然后,您将使用 ffmpeg 的 libavformat 之类的东西对流进行解复用,并在格式允许的情况下拆分独立的数据包。
  • @bobince,你是在回答我的问题 1 还是问题 2?
  • (2)。我不知道 (1) 的任何公共代码,但它会高度依赖于平台。您必须绕过通常的表单处理处理程序才能访问正在进行的文件上传。
猜你喜欢
  • 1970-01-01
  • 2010-09-17
  • 2011-10-11
相关资源
最近更新 更多