#go #audio-streaming #youtube-dl
#Вперед #потоковое аудио #youtube-dl
Вопрос:
Я пытаюсь использовать youtube-dl, чтобы получить URL-адрес аудио видео на YouTube, отправить запрос GET на этот URL-адрес, а затем использовать тело запроса io.ReadCloser
и передать его https://github.com/faiface/beep декодер.
Поэтому, когда я делаю это с разными кодировками, я получаю следующую ошибку:
mp3: MPEG version 2.5 is not supported
или mp3: only layer3 (want 1; got 2) is supported
wav: missing RIFF at the beginning >
flac: flac.parseStreamInfo: invalid FLAC signature; expected "fLaC", got "x00x00x00x18"
как вы можете видеть, мои знания о кодировании звука практически отсутствуют. Поскольку эти ошибки мне мало что говорят.
Но из того, что я понял, это то, что, вероятно, mp3 является желаемым форматом. И что MPEG 2.5 — это какой-то проприетарный формат? И то, что я, вероятно, хочу, это версия MPEG 2 или 1? Возможно ли это с помощью youtube-dl?
Также есть ли какой-либо другой способ сделать это вместо этого (потоковое аудио с YouTube с помощью GO?)
package main
import (
"log"
"net/http"
"time"
"fmt"
"os/exec"
"strings"
"github.com/faiface/beep"
"github.com/faiface/beep/mp3"
"github.com/faiface/beep/speaker"
)
func main() {
audioUrl, err := GetAudioLink(
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"mp3",
"140",
)
if err != nil {
log.Fatal(err)
}
req, err := http.Get(audioUrl)
if err != nil {
log.Fatal(err)
}
f := req.Body
streamer, format, err := mp3.Decode(f)
if err != nil {
log.Fatal(err)
}
speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/60))
done := make(chan bool)
speaker.Play(beep.Seq(streamer, beep.Callback(func() {
done <- true
})))
<-done
}
func GetAudioLink(url, format, youtubedlQuality string) (audioUrl string, err error) {
var cmd []byte
if cmd, err = exec.Command(
"youtube-dl",
"--extract-audio",
"--get-url",
"--audio-format",
format,
"-f",
youtubedlQuality,
url,
).Output(); err != nil {
return audioUrl, fmt.Errorf("calling youtube-dl: %w", err)
}
audioUrl = strings.TrimSpace(string(cmd))
return audioUrl, err
}
Убедитесь, что вы используете главную ветку https://github.com/faiface/beep go get github.com/faiface/beep@master
И вам нужна локальная установка youtube-dl. Я не смог найти для этого никакой библиотеки GO.