hls muxer: update primary playlist in case SPS/PPS changed

This commit is contained in:
aler9 2022-04-24 13:01:27 +02:00
parent 3b21da7762
commit 07591c7514

View File

@ -1,7 +1,6 @@
package hls package hls
import ( import (
"bytes"
"encoding/hex" "encoding/hex"
"io" "io"
"strconv" "strconv"
@ -13,42 +12,38 @@ import (
type muxerPrimaryPlaylist struct { type muxerPrimaryPlaylist struct {
videoTrack *gortsplib.TrackH264 videoTrack *gortsplib.TrackH264
audioTrack *gortsplib.TrackAAC audioTrack *gortsplib.TrackAAC
cnt []byte
} }
func newMuxerPrimaryPlaylist( func newMuxerPrimaryPlaylist(
videoTrack *gortsplib.TrackH264, videoTrack *gortsplib.TrackH264,
audioTrack *gortsplib.TrackAAC, audioTrack *gortsplib.TrackAAC,
) *muxerPrimaryPlaylist { ) *muxerPrimaryPlaylist {
p := &muxerPrimaryPlaylist{ return &muxerPrimaryPlaylist{
videoTrack: videoTrack, videoTrack: videoTrack,
audioTrack: audioTrack, audioTrack: audioTrack,
} }
var codecs []string
if p.videoTrack != nil {
sps := p.videoTrack.SPS()
if len(sps) >= 4 {
codecs = append(codecs, "avc1."+hex.EncodeToString(sps[1:4]))
}
}
// https://developer.mozilla.org/en-US/docs/Web/Media/Formats/codecs_parameter
if p.audioTrack != nil {
codecs = append(codecs, "mp4a.40."+strconv.FormatInt(int64(p.audioTrack.Type()), 10))
}
p.cnt = []byte("#EXTM3U\n" +
"#EXT-X-VERSION:3\n" +
"\n" +
"#EXT-X-STREAM-INF:BANDWIDTH=200000,CODECS=\"" + strings.Join(codecs, ",") + "\"\n" +
"stream.m3u8\n")
return p
} }
func (p *muxerPrimaryPlaylist) reader() io.Reader { func (p *muxerPrimaryPlaylist) reader() io.Reader {
return bytes.NewReader(p.cnt) return &asyncReader{generator: func() []byte {
var codecs []string
if p.videoTrack != nil {
sps := p.videoTrack.SPS()
if len(sps) >= 4 {
codecs = append(codecs, "avc1."+hex.EncodeToString(sps[1:4]))
}
}
// https://developer.mozilla.org/en-US/docs/Web/Media/Formats/codecs_parameter
if p.audioTrack != nil {
codecs = append(codecs, "mp4a.40."+strconv.FormatInt(int64(p.audioTrack.Type()), 10))
}
return []byte("#EXTM3U\n" +
"#EXT-X-VERSION:3\n" +
"\n" +
"#EXT-X-STREAM-INF:BANDWIDTH=200000,CODECS=\"" + strings.Join(codecs, ",") + "\"\n" +
"stream.m3u8\n")
}}
} }