Browse Source

hls: fix intermittent audio on iOS

pull/764/head v0.17.13
aler9 4 years ago
parent
commit
bb5129d219
  1. 10
      internal/hls/muxer_test.go
  2. 18
      internal/hls/muxer_ts_generator.go

10
internal/hls/muxer_test.go

@ -114,14 +114,18 @@ func TestMuxer(t *testing.T) { @@ -114,14 +114,18 @@ func TestMuxer(t *testing.T) {
// PES (AAC)
checkTSPacket(t, byts, 257, 3)
byts = byts[177:]
aus, err := aac.DecodeADTS(byts[:11])
byts = byts[166:]
aus, err := aac.DecodeADTS(byts[:22])
require.NoError(t, err)
require.Equal(t, 1, len(aus))
require.Equal(t, 2, len(aus))
require.Equal(t, 2, aus[0].Type)
require.Equal(t, 44100, aus[0].SampleRate)
require.Equal(t, 2, aus[0].ChannelCount)
require.Equal(t, []byte{0x01, 0x02, 0x03, 0x04}, aus[0].AU)
require.Equal(t, 2, aus[1].Type)
require.Equal(t, 44100, aus[1].SampleRate)
require.Equal(t, 2, aus[1].ChannelCount)
require.Equal(t, []byte{0x05, 0x06, 0x07, 0x08}, aus[1].AU)
}
func TestMuxerCloseBeforeFirstSegment(t *testing.T) {

18
internal/hls/muxer_ts_generator.go

@ -145,15 +145,18 @@ func (m *muxerTSGenerator) writeAAC(pts time.Duration, aus [][]byte) error { @@ -145,15 +145,18 @@ func (m *muxerTSGenerator) writeAAC(pts time.Duration, aus [][]byte) error {
}
}
for _, au := range aus {
enc, err := aac.EncodeADTS([]*aac.ADTSPacket{
{
pkts := make([]*aac.ADTSPacket, len(aus))
for i, au := range aus {
pkts[i] = &aac.ADTSPacket{
Type: m.aacConf.Type,
SampleRate: m.aacConf.SampleRate,
ChannelCount: m.aacConf.ChannelCount,
AU: au,
},
})
}
}
enc, err := aac.EncodeADTS(pkts)
if err != nil {
return err
}
@ -164,10 +167,7 @@ func (m *muxerTSGenerator) writeAAC(pts time.Duration, aus [][]byte) error { @@ -164,10 +167,7 @@ func (m *muxerTSGenerator) writeAAC(pts time.Duration, aus [][]byte) error {
}
if m.videoTrack == nil {
m.audioAUCount++
}
pts += 1000 * time.Second / time.Duration(m.aacConf.SampleRate)
m.audioAUCount += len(aus)
}
return nil

Loading…
Cancel
Save