50 lines
1.4 KiB
Go
50 lines
1.4 KiB
Go
package astits
|
|
|
|
// NITData represents a NIT data
|
|
// Page: 29 | Chapter: 5.2.1 | Link: https://www.dvb.org/resources/public/standards/a38_dvb-si_specification.pdf
|
|
type NITData struct {
|
|
NetworkDescriptors []*Descriptor
|
|
NetworkID uint16
|
|
TransportStreams []*NITDataTransportStream
|
|
}
|
|
|
|
// NITDataTransportStream represents a NIT data transport stream
|
|
type NITDataTransportStream struct {
|
|
OriginalNetworkID uint16
|
|
TransportDescriptors []*Descriptor
|
|
TransportStreamID uint16
|
|
}
|
|
|
|
// parseNITSection parses a NIT section
|
|
func parseNITSection(i []byte, offset *int, tableIDExtension uint16) (d *NITData) {
|
|
// Init
|
|
d = &NITData{NetworkID: tableIDExtension}
|
|
|
|
// Network descriptors
|
|
d.NetworkDescriptors = parseDescriptors(i, offset)
|
|
|
|
// Transport stream loop length
|
|
var transportStreamLoopLength = int(uint16(i[*offset]&0xf)<<8 | uint16(i[*offset+1]))
|
|
*offset += 2
|
|
|
|
// Transport stream loop
|
|
transportStreamLoopLength += *offset
|
|
for *offset < transportStreamLoopLength {
|
|
// Transport stream ID
|
|
var ts = &NITDataTransportStream{}
|
|
ts.TransportStreamID = uint16(i[*offset])<<8 | uint16(i[*offset+1])
|
|
*offset += 2
|
|
|
|
// Original network ID
|
|
ts.OriginalNetworkID = uint16(i[*offset])<<8 | uint16(i[*offset+1])
|
|
*offset += 2
|
|
|
|
// Transport descriptors
|
|
ts.TransportDescriptors = parseDescriptors(i, offset)
|
|
|
|
// Append transport stream
|
|
d.TransportStreams = append(d.TransportStreams, ts)
|
|
}
|
|
return
|
|
}
|