Skip to content

Commit 473f66c

Browse files
committed
Demuxer: emit an error in case of unknown data packets and EOF (#32)
At the moment, the demuxer returns (nil, nil) when the stream is finished, there are TS packets in the queue but they're unknown data packets. This patch makes the demuxer emit (nil, ErrNoMorePackets).
1 parent ddb96a7 commit 473f66c

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

demuxer.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,14 +119,16 @@ func (dmx *Demuxer) NextData() (d *DemuxerData, err error) {
119119
}
120120

121121
// Parse data
122-
if ds, err = parseData(ps, dmx.optPacketsParser, dmx.programMap); err != nil {
122+
var errParseData error
123+
if ds, errParseData = parseData(ps, dmx.optPacketsParser, dmx.programMap); errParseData != nil {
123124
// We need to silence this error as there may be some incomplete data here
124125
// We still want to try to parse all packets, in case final data is complete
125126
continue
126127
}
127128

128129
// Update data
129130
if d = dmx.updateData(ds); d != nil {
131+
err = nil
130132
return
131133
}
132134
}

demuxer_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,27 @@ func TestDemuxerNextData(t *testing.T) {
101101
assert.EqualError(t, err, ErrNoMorePackets.Error())
102102
}
103103

104+
func TestDemuxerNextDataUnknownDataPackets(t *testing.T) {
105+
buf := &bytes.Buffer{}
106+
bufWriter := astikit.NewBitsWriter(astikit.BitsWriterOptions{Writer: buf})
107+
108+
// Packet that isn't a data packet (PSI or PES)
109+
b1, _ := packet(PacketHeader{
110+
ContinuityCounter: uint8(0),
111+
PID: 256,
112+
PayloadUnitStartIndicator: true,
113+
HasPayload: true,
114+
}, PacketAdaptationField{}, []byte{0x01, 0x02, 0x03, 0x04}, true)
115+
bufWriter.Write(b1)
116+
117+
// The demuxer must return "no more packets"
118+
dmx := NewDemuxer(context.Background(), bytes.NewReader(buf.Bytes()),
119+
DemuxerOptPacketSize(188))
120+
d, err := dmx.NextData()
121+
assert.Equal(t, (*DemuxerData)(nil), d)
122+
assert.EqualError(t, err, ErrNoMorePackets.Error())
123+
}
124+
104125
func TestDemuxerNextDataPATPMT(t *testing.T) {
105126
pat := hexToBytes(`474000100000b00d0001c100000001f0002ab104b2ffffffffffffffff
106127
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

0 commit comments

Comments
 (0)