我目前有這個功能,通過 ffmpeg 管道 youtubedl 命令,然后將 ffmpeg 的輸出管道傳輸?shù)?HTTP 客戶端。func pipeThruFfmpegToMp3(vi *VideoInfo, rw web.ResponseWriter) error { var ffmpeg *exec.Cmd ffmpeg = exec.Command("ffmpeg", "-i", "-","-acodec", "libmp3lame","-f", "mp3","-") } youtube := exec.Command("youtube-dl", "-f", "137", "video_url", "-o", "-") var ytbuf, ffbuf bytes.Buffer youtube.Stderr = &ytbuf ffmpeg.Stderr = &ffbuf audio, err := youtube.StdoutPipe() if err != nil { log.Printf("pipeThruFfmpegToMp3: %v\n", err) return err } ffmpeg.Stdin = audio ffmpeg.Stdout = rw // Headers sent, no turning back now rw.Header().Set("Content-Type", "audio/mpeg") rw.Header().Set("Content-Disposition", fmt.Sprintf("attachment;filename=\"%s.mp3\"", vi.GetSlug())) rw.Flush() youtube.Start() ffmpeg.Start() ffmpeg.Wait() youtube.Wait() // check ytvbuf, ytbuf, ffbuf for stderr errors if ffbuf.Len() != 0 { log.Printf("pipeThruFfmpegToMp3: %v\n", ffbuf.String()) } if ytbuf.Len() != 0 { log.Printf("pipeThruYouTubeDLToMp3: %v\n", ytbuf.String()) } return nil}問題是,當(dāng) youtubedl 出現(xiàn)錯誤時(shí),它會發(fā)送一個 0kb 的文件,而不是返回錯誤而不發(fā)送文件。那么,如果youtubedl錯誤返回而不是繼續(xù)發(fā)送,我是否可以解決這個問題?
管道輸入出錯時(shí)如何讓程序返回
30秒到達(dá)戰(zhàn)場
2022-05-18 13:52:26