Go로 음악/동영상 스트리밍 서버 구축 – HLS 사용
4899 단어 goprogrammingtutorial
![](https://s1.md5.ltd/image/979c5ac065539b6b72e5e7da31f60b87.jpeg)
이 튜토리얼에서는 Golang을 사용하여 스트리밍 API를 구축하는 과정을 안내합니다. 특히 최신 프로토콜 중 하나인 HLS를 사용하는 경우 강력한 스트리밍 서버를 구축하는 것이 놀라울 정도로 쉽습니다.
HLS는 무엇입니까?
HTTP Live Streaming is an HTTP-Based adaptive bitrate streaming communications protocol developed by Apple.
HLS를 사용하면 대용량 미디어 파일을 ~10초 단위로 분할되는 많은 작은 텍스트 파일로 제공할 수 있습니다. 이러한 방식으로 사용자의 클라이언트 측 앱은 미리 10초만 버퍼링하면 되므로 많은 잠재적 대역폭이 절약되고 노래가 훨씬 빠르게 재생될 수 있습니다.
FFmpeg을 사용하여 mp3 파일을 여러 파일로 구성된 HLS 형식으로 쉽게 변환할 수 있습니다. 이러한 파일 중 하나는 메타데이터(.m3u8)를 포함하며 먼저 제공됩니다. 이 메타데이터 파일은 클라이언트에게 각 데이터 파일을 가져올 위치와 각 데이터 파일에 포함된 내용을 알려줍니다. 데이터 파일의 확장자는 .ts입니다. 데이터 파일은 일반적으로 ~10초의 오디오를 포함하며 클라이언트 요청 시 한 번에 하나씩 제공됩니다.
![](https://s1.md5.ltd/image/55f8e7b07dc9eea225df63bb388f3b19.jpeg)
시작하기 – 일부 미디어 포맷
샘플 .mp3 다운로드:
http://www.hubharp.com/web_sound/BachGavotteShort.mp3
설치FFmpeg . Mac을 사용 중인 경우:
brew install ffmpeg
mp3 파일이 있는 디렉토리로 이동하여 다음을 실행합니다.
ffmpeg -i BachGavotteShort.mp3 -c:a libmp3lame -b:a 128k -map 0:0 -f segment -segment_time 10 -segment_list outputlist.m3u8 -segment_format mpegts output%03d.ts
이렇게 하면 세 개의 새 파일이 생성됩니다.
output000.ts output001.ts outputlist.m3u8
축하합니다! 어려운 부분을 완료했습니다. 이제 HTTP를 통해 제공할 수 있는 간단한 파일이 생겼습니다. 모든 최신 클라이언트 측 미디어 라이브러리는 HLS 파일을 읽는 방법을 알고 있습니다.
서버 구축
위에서 언급한 것처럼 HLS는 서버 측에서 매우 간단합니다. 우리가 해야 할 일은 .m3u8 파일에 대한 경로를 제공하고 .ts 파일이 동일한 경로에서 제공되는지 확인하는 것입니다. 기존의 파일 서버 아키텍처에서 이는 동일한 디렉토리에 있어야 함을 의미합니다.
다음 폴더 구조로 프로젝트를 설정해 보겠습니다.
![](https://s1.md5.ltd/image/d486a730a59bbe03f857796f288d0291.png)
다음 코드를 main.go에 복사합니다.
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
// configure the songs directory name and port
const songsDir = "songs"
const port = 8080
// add a handler for the song files
http.Handle("/", addHeaders(http.FileServer(http.Dir(songsDir))))
fmt.Printf("Starting server on %v\n", port)
log.Printf("Serving %s on HTTP port: %v\n", songsDir, port)
// serve and log errors
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%v", port), nil))
}
// addHeaders will act as middleware to give us CORS support
func addHeaders(h http.Handler) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
h.ServeHTTP(w, r)
}
}
이제 서버를 실행하십시오.
go run main.go
당신의 서버는 살아있다! 미디어 클라이언트를 사용하여 음악 재생을 테스트합니다. 무료 온라인 클라이언트는 여기에서 찾을 수 있습니다: https://hls-js-latest.netlify.com/demo/
노래의 URI를 붙여넣고 듣기만 하면 됩니다.
http://localhost:8080/bachgavotteshort/outputlist.m3u8
읽어 주셔서 감사합니다! 미디어 프로젝트에 행운을 빕니다!
레인 와그너 트위터:
Dev.to의 레인:
매체의 레인: @wagslane
Qvault 다운로드: https://qvault.io
Github에 별표 표시: https://github.com/q-vault/qvault
게시물 Building a Music/Video Streaming Server in Go – Using HLS이 Qvault에 처음 나타났습니다.
Reference
이 문제에 관하여(Go로 음악/동영상 스트리밍 서버 구축 – HLS 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bootdotdev/building-a-music-video-streaming-server-in-go-using-hls-216m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)