带有Go on App Engine Standard的呼叫系统包



我正试图在谷歌应用引擎标准版上运行的Go应用程序中使用FFmpeg。当我使用exec指向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二进制文件的托管版本。ffmpeg似乎是go1.11应用程序引擎标准环境的系统包。

什么是"系统包",我如何使用它们当我查找文档时,我发现有很多关于apt-get的文档,而没有关于如何使用它们、应用程序引擎或其他方面的文档。我需要安装它吗,还是它应该已经是应用程序引擎正在运行的容器(?(的一部分?

我称它为可执行文件吗?如果是这样的话,我希望它能起作用,但它不能

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

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

ffmpeg可执行文件移动到/usr/local/bin,并确保$PATH包含该目录,解决了该问题。

最新更新