YTSFlix_Go/vendor/github.com/asticode/go-astits/data_sdt.go
2018-11-04 15:58:15 +01:00

71 lines
2.1 KiB
Go

package astits
// Running statuses
const (
RunningStatusNotRunning = 1
RunningStatusPausing = 3
RunningStatusRunning = 4
RunningStatusServiceOffAir = 5
RunningStatusStartsInAFewSeconds = 2
RunningStatusUndefined = 0
)
// SDTData represents an SDT data
// Page: 33 | Chapter: 5.2.3 | Link: https://www.dvb.org/resources/public/standards/a38_dvb-si_specification.pdf
type SDTData struct {
OriginalNetworkID uint16
Services []*SDTDataService
TransportStreamID uint16
}
// SDTDataService represents an SDT data service
type SDTDataService struct {
Descriptors []*Descriptor
HasEITPresentFollowing bool // When true indicates that EIT present/following information for the service is present in the current TS
HasEITSchedule bool // When true indicates that EIT schedule information for the service is present in the current TS
HasFreeCSAMode bool // When true indicates that access to one or more streams may be controlled by a CA system.
RunningStatus uint8
ServiceID uint16
}
// parseSDTSection parses an SDT section
func parseSDTSection(i []byte, offset *int, offsetSectionsEnd int, tableIDExtension uint16) (d *SDTData) {
// Init
d = &SDTData{TransportStreamID: tableIDExtension}
// Original network ID
d.OriginalNetworkID = uint16(i[*offset])<<8 | uint16(i[*offset+1])
*offset += 2
// Reserved for future use
*offset += 1
// Loop until end of section data is reached
for *offset < offsetSectionsEnd {
// Service ID
var s = &SDTDataService{}
s.ServiceID = uint16(i[*offset])<<8 | uint16(i[*offset+1])
*offset += 2
// EIT schedule flag
s.HasEITSchedule = uint8(i[*offset]&0x2) > 0
// EIT present/following flag
s.HasEITPresentFollowing = uint8(i[*offset]&0x1) > 0
*offset += 1
// Running status
s.RunningStatus = uint8(i[*offset]) >> 5
// Free CA mode
s.HasFreeCSAMode = uint8(i[*offset]&0x10) > 0
// Descriptors
s.Descriptors = parseDescriptors(i, offset)
// Append service
d.Services = append(d.Services, s)
}
return
}