From d272d4b6c3ff93b7ca7218a303cf550d0a39981a Mon Sep 17 00:00:00 2001 From: Alexey Khit Date: Sat, 15 Jul 2023 11:42:50 +0300 Subject: [PATCH] Fix FLAC mime type for Chrome --- internal/hls/hls.go | 12 ++++++++---- internal/hls/ws.go | 5 ++++- pkg/mp4/muxer.go | 5 +++-- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/internal/hls/hls.go b/internal/hls/hls.go index 2565d282..3a551200 100644 --- a/internal/hls/hls.go +++ b/internal/hls/hls.go @@ -1,6 +1,11 @@ package hls import ( + "net/http" + "strings" + "sync" + "time" + "github.com/AlexxIT/go2rtc/internal/api" "github.com/AlexxIT/go2rtc/internal/api/ws" "github.com/AlexxIT/go2rtc/internal/app" @@ -10,9 +15,6 @@ import ( "github.com/AlexxIT/go2rtc/pkg/mpegts" "github.com/AlexxIT/go2rtc/pkg/tcp" "github.com/rs/zerolog" - "net/http" - "sync" - "time" ) func Init() { @@ -137,9 +139,11 @@ segment.ts?id=` + sid + `&n=%d` sessions[sid] = session sessionsMu.Unlock() + codecs := strings.Replace(cons.MimeCodecs(), mp4.MimeFlac, "fLaC", 1) + // bandwidth important for Safari, codecs useful for smooth playback data := []byte(`#EXTM3U -#EXT-X-STREAM-INF:BANDWIDTH=192000,CODECS="` + cons.MimeCodecs() + `" +#EXT-X-STREAM-INF:BANDWIDTH=192000,CODECS="` + codecs + `" hls/playlist.m3u8?id=` + sid) if _, err := w.Write(data); err != nil { diff --git a/internal/hls/ws.go b/internal/hls/ws.go index 81a1dd72..c8aebc1b 100644 --- a/internal/hls/ws.go +++ b/internal/hls/ws.go @@ -2,6 +2,7 @@ package hls import ( "errors" + "strings" "time" "github.com/AlexxIT/go2rtc/internal/api" @@ -68,9 +69,11 @@ segment.m4s?id=` + sid + `&n=%d` sessions[sid] = session sessionsMu.Unlock() + codecs = strings.Replace(cons.MimeCodecs(), mp4.MimeFlac, "fLaC", 1) + // bandwidth important for Safari, codecs useful for smooth playback data := `#EXTM3U -#EXT-X-STREAM-INF:BANDWIDTH=192000,CODECS="` + cons.MimeCodecs() + `" +#EXT-X-STREAM-INF:BANDWIDTH=192000,CODECS="` + codecs + `" hls/playlist.m3u8?id=` + sid tr.Write(&ws.Message{Type: "hls", Value: data}) diff --git a/pkg/mp4/muxer.go b/pkg/mp4/muxer.go index 96b8a372..f01758ec 100644 --- a/pkg/mp4/muxer.go +++ b/pkg/mp4/muxer.go @@ -2,6 +2,7 @@ package mp4 import ( "encoding/hex" + "github.com/AlexxIT/go2rtc/pkg/core" "github.com/AlexxIT/go2rtc/pkg/h264" "github.com/AlexxIT/go2rtc/pkg/h265" @@ -22,7 +23,7 @@ const ( MimeH264 = "avc1.640029" MimeH265 = "hvc1.1.6.L153.B0" MimeAAC = "mp4a.40.2" - MimeFlac = "fLaC" // case is important for Apple HLS + MimeFlac = "flac" MimeOpus = "opus" ) @@ -64,7 +65,7 @@ func (m *Muxer) GetInit(codecs []*core.Codec) ([]byte, error) { switch codec.Name { case core.CodecH264: sps, pps := h264.GetParameterSet(codec.FmtpLine) - // some dummy SPS and PPS not a problem + // some dummy SPS and PPS not a problem for MP4, but problem for HLS :( if len(sps) == 0 { sps = []byte{0x67, 0x42, 0x00, 0x0a, 0xf8, 0x41, 0xa2} }