Go로 음악/동영상 스트리밍 서버 구축 – HLS 사용

4895 단어 programminggotutorial


이 튜토리얼에서는 Golang을 사용하여 스트리밍 API를 구축하는 과정을 안내합니다. 특히 최신 프로토콜 중 하나인 HLS를 사용하는 경우 강력한 스트리밍 서버를 구축하는 것이 놀라울 정도로 쉽습니다.

HLS는 무엇입니까?



HTTP Live Streaming is an HTTP-Based adaptive bitrate streaming communications protocol developed by Apple.

https://en.wikipedia.org/wiki/HTTP_Live_Streaming



HLS를 사용하면 대용량 미디어 파일을 ~10초 단위로 분할되는 많은 작은 텍스트 파일로 제공할 수 있습니다. 이러한 방식으로 사용자의 클라이언트 측 앱은 미리 10초만 버퍼링하면 되므로 많은 잠재적 대역폭이 절약되고 노래가 훨씬 빠르게 재생될 수 있습니다.

FFmpeg을 사용하여 mp3 파일을 여러 파일로 구성된 HLS 형식으로 쉽게 변환할 수 있습니다. 이러한 파일 중 하나는 메타데이터(.m3u8)를 포함하며 먼저 제공됩니다. 이 메타데이터 파일은 클라이언트에게 각 데이터 파일을 가져올 위치와 각 데이터 파일에 포함된 내용을 알려줍니다. 데이터 파일의 확장자는 .ts입니다. 데이터 파일은 일반적으로 ~10초의 오디오를 포함하며 클라이언트 요청 시 한 번에 하나씩 제공됩니다.



시작하기 – 일부 미디어 포맷



샘플 .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 파일이 동일한 경로에서 제공되는지 확인하는 것입니다. 기존의 파일 서버 아키텍처에서 이는 동일한 디렉토리에 있어야 함을 의미합니다.

다음 폴더 구조로 프로젝트를 설정해 보겠습니다.



다음 코드를 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 HLSQvault에 처음 나타났습니다.

좋은 웹페이지 즐겨찾기