我正在try 使用youtube-dl和ffmpeg创建一个音乐流媒体服务.当用户发送一个带有视频URL的POST请求时,我的处理程序代码如下所示:
router.POST("/submit", func(c *gin.Context) {
body := Body{}
if err := c.BindJSON(&body); err != nil {
c.AbortWithError(http.StatusBadRequest, err)
return
}
w := c.Writer
header := w.Header()
header.Set("Content-Type", "audio/mp3")
w.WriteHeader(http.StatusOK)
fetchMusic(c, body.Data)
})
func fetchMusic(c *gin.Context, data string) {
r, w := io.Pipe()
defer r.Close()
ydl := exec.Command("youtube-dl", data, "-o-")
ffmpeg := exec.Command("ffmpeg", "-i", "/dev/stdin", "-vn", "-f", "mp3", "-")
ydl.Stdout = w
ydl.Stderr = os.Stderr
ffmpeg.Stdin = r
ffmpeg.Stdout = c.Writer
ffmpeg.Stderr = os.Stderr
fmt.Println("Starting-----------------------")
go func() {
if err := ydl.Run(); err != nil {
panic(err)
}
}()
if err := ffmpeg.Run(); err != nil {
panic(err)
}
fmt.Println("Done-----------------------")
}
我用ffmpeg和youtube-dl创建了一个管道.在测试阶段,我发送了POST请求,但该请求没有完成.如果我看一下日志(log),我看不到"完成-".我认为,这一过程似乎停滞不前.你有什么 idea 吗?我的用法是真的吗?