В общем проблема такая, отдаю файл для тэга аудио, заголовки все прописал, сервер на golang, при воспроизведении начинает загружаться файл, а воспроизведение начинается только после загрузки половины файла, это примерно 10 сек. Если заливать файл на soundcloud от туда он тоже ждет загрузки половины файла, но 20мб от туда грузит меньше чем за 1сек. в сравнении у меня с сервера грузит 15 мб за 10 сек.
1. Можно ли как то уменьшить порог воспроизведения аудио для тэга
2. Возможно soundcloud как то имитирует загрузку файла и потом подгружает?
name := strings.Replace(r.URL.Path, "/audio/", "", 1)
path := Helper.GetPathByName(name[0 : len(name)-4])
buf := bytes.NewBuffer(nil)
file, err := os.Open(path + name)
io.Copy(buf, file)
if err != nil {
Helper.JsonResponse(w, http.StatusForbidden, err.Error())
return
}
w.Header().Set("Connection", "keep-alive")
w.Header().Set("Accept-Ranges","bytes")
w.Header().Set("Content-Type", "audio/mpeg")
file.Close()
fi := buf.Bytes()
rangeString := r.Header.Get("range")
start := 0
end := len(fi)
if rangeString == "" {
w.Header().Set("Content-Length", strconv.Itoa(len(buf.Bytes()[start:end])))
w.WriteHeader(200)
w.Write(fi[start:end])
return
}
str:=strings.Split(rangeString[len("bytes="):], "-")
if str[0] != "" {
start, err = strconv.Atoi(str[0])
}
if str[1] != "" {
end, err = strconv.Atoi(str[1])
}
strRange := Helper.ParseRangeToStr(int64(start), int64(end), int64(len(fi)))
w.Header().Set("Content-Range", strRange)
end += 1
contentLength := len(buf.Bytes()[start:end])
w.Header().Set("Content-Length", strconv.Itoa(contentLength))
w.WriteHeader(206)
w.Write(fi[start:end])
Важно то что похоже проблема в самом плеере, потому что он ожидает загрузки части файла и только потом начинает играть