hls: fix intermittent audio on iOS

This commit is contained in:
aler9 2021-12-23 19:13:06 +01:00
parent 18a6e04854
commit bb5129d219
2 changed files with 26 additions and 22 deletions

View File

@ -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) {

View File

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