通过Go on App Engine Standard调用系统软件包

时间:2019-11-08 19:26:25

标签: google-app-engine go ffmpeg

我正在尝试在FFmpeg上运行的Go应用程序中使用Google App Engine Standard。当我使用exec.Command()指向FFmpeg二进制文件的本地实例时,我可以使其在本地运行

cmd := exec.Command(
    "/Users/justin/Desktop/conversion/ffmpeg", // this won't work on a remote server
    "-i", "pipe:0",
    "-ac", "1",
    "-codec:a", "libmp3lame",
    "-b:a", "48k",
    "-ar", "24000",
    "-f", "mp3",
    "pipe:1",
  )

  cmd.Stdin = bytes.NewReader(synthResp.AudioContent)

  var output bytes.Buffer
  cmd.Stdout = &output
  err = cmd.Run()

很显然,当我部署应用程序时,这是行不通的,因此我需要一种方法来指向FFmpeg二进制文件的托管版本。对于go1.11 App Engine标准环境,ffmpeg似乎是system package

什么是“系统软件包”以及如何使用它们? 当我寻找文档时,我在apt-get上找到了很多文档,而没有关于如何使用它们的文档,例如App Engine或其他。我是否需要安装它,或者它应该已经是App Engine运行的容器的一部分?

我会像调用其他可执行文件一样调用它吗?如果是这样,那我希望它能奏效,但不会

cmd := exec.Command(
    "ffmpeg", // <------ what should this be?
    "-i", "pipe:0",
    "-ac", "1",
    "-codec:a", "libmp3lame",
    "-b:a", "48k",
    "-ar", "24000",
    "-f", "mp3",
    "pipe:1",
  )

  cmd.Stdin = bytes.NewReader(synthResp.AudioContent)

  var output bytes.Buffer
  cmd.Stdout = &output
  err = cmd.Run()

记录错误,我看到exec: "ffmpeg": executable file not found in $PATH

1 个答案:

答案 0 :(得分:1)

感谢@iLoveReflection提出的问题,我意识到该应用程序的本地运行版本将调用ffmpeg命令,并期望该命令位于标准$ PATH环境变量所指向的位置。我以为App Engine可以识别对ffmpeg的调用,并使用它安装在自定义位置的可执行文件。

ffmpeg可执行文件移至/usr/local/bin,并确保$ PATH包括该目录,以解决此问题。