0

我想写像Coconut这样的soap webservice

Coconut::Job.create(
  "api_key" => "k-api-key",
  "vars" => {"cdn" => "s3://accesskey:secretkey@mybucket", "vid" => 1234},
  "source" => "mysite.com/media/video.mp4",
  "outputs" => {
    "mp4" => "$cdn/videos/$vid/video.mp4",
    "webm" => "$cdn/videos/$vid/video.webm",
    "hls" => "$cdn/hls/$vid/video.m3u8",
    "dash" => "$cdn/dash/$vid/video.mpd",
    "jpg:300x" => "$cdn/previews/$vid/thumbs_%1d.jpg, number=3",
    "gif:150x" => "$cdn/previews/$vid/animated.gif"
  }
)

现在我想写一些这样的东西,但我有两个想法选择 java 或 PHP 之类的东西,因为我的原始代码是在 PHP 中,似乎最常用的库是 ffmpeg。对于 php 我找到了这个库https://github.com/PHP-FFMpeg/PHP-FFMpeg 对于 java 我找到了这个库:JAVE、JMF、SMF。

如果有人告诉我哪种语言和哪个库以及为什么使用该库(速度或功能或...),我将不胜感激

4

1 回答 1

1

根据您的查询,服务器语言与您提到的几乎无关。进行处理的部分是 ffMpeg,这是最重要的。由于您已经拥有 PHP 中的控件/界面,因此请继续使用它。

帮助建议:不要使用 ffMPEG 库。构建自己的命令并使用 exec 运行。原因: - 它更简单(无论如何库都是这样做的) - ffMPEG 有无数的选项/配置步骤,有时将它们构建到库中是不可能的 - 但是你确实需要确保你的命令是“安全的”

如果你正在研究其他语言,你的表现可能比 NodeJS 差得多;ffMPEG 有一个合理的库(尽管对于超复杂的东西,请参阅关于传递参数的说明),优点是 NodeJS 可以在 ffMPEG 运行时将控制权传递回其他请求(PHP、JAVA 等将保留请求ffMPEG 运行时打开并保持)。

NodeJS 的一个缺点是,如果您 CTRL-C 应用程序,那么您将无法通过 SigTerm 优雅地控制 ffMPEG。但这越来越先进,简单的解决方案不是 ctrl-C 应用程序:)

另请注意,作为一般规则,ffMPEG 一次只能运行一个(每个 CPU 内核)。将 ffMPEG 任务放在一个队列中,一次只处理一个。这意味着您可以使用 PHP 处理 HTTP 请求并将其放入队列中,并完全使用另一种语言来触发 ffMPEG(但同样,也可以使用 PHP,但 NodeJS 最好将其作为服务运行)。

查看 REDIS 队列和/或 RabbitMQ,了解与 NodeJS 和 PHP 交叉兼容的队列选项。

于 2016-12-20T00:08:54.117 回答