Documentation
¶
Overview ¶
Package scte35 is for handling scte35 splice signals
Index ¶
- Constants
- Variables
- func SCTE35AccumulatorDoneFunc(b []byte) (bool, error)
- type Component
- type ComponentOffset
- type DeviceRestrictions
- type SCTE35
- type SegDescType
- type SegUPIDType
- type SegmentationDescriptor
- type SpliceCommand
- type SpliceCommandType
- type SpliceInsertCommand
- type State
- type TimeSignalCommand
- type UPID
Constants ¶
const ( // SpliceNull is a Null Splice command type SpliceNull SpliceCommandType = 0x00 // SpliceSchedule is a splice schedule command type SpliceSchedule = 0x04 // SpliceInsert is a splice insert command type SpliceInsert = 0x05 // TimeSignal is a splice signal command type TimeSignal = 0x06 // BandwidthReservation is a command type that represents a reservation of bandwidth BandwidthReservation = 0x07 // PrivateCommand is a command type that represents private command data PrivateCommand = 0xFF )
const ( SegDescNotIndicated SegDescType = 0x00 SegDescContentIdentification = 0x01 SegDescProgramStart = 0x10 SegDescProgramEnd = 0x11 SegDescProgramEarlyTermination = 0x12 SegDescProgramBreakaway = 0x13 SegDescProgramResumption = 0x14 SegDescProgramRunoverPlanned = 0x15 SegDescProgramRunoverUnplanned = 0x16 SegDescProgramOverlapStart = 0x17 SegDescProgramBlackoutOverride = 0x18 SegDescProgramStartInProgress = 0x19 SegDescChapterStart = 0x20 SegDescChapterEnd = 0x21 SegDescBreakStart = 0x22 SegDescBreakEnd = 0x23 SegDescOpeningCreditStart = 0x24 SegDescOpeningCreditEnd = 0x25 SegDescClosingCreditStart = 0x26 SegDescClosingCreditEnd = 0x27 SegDescProviderAdvertisementStart = 0x30 SegDescProviderAdvertisementEnd = 0x31 SegDescDistributorAdvertisementStart = 0x32 SegDescDistributorAdvertisementEnd = 0x33 SegDescProviderPOStart = 0x34 SegDescProviderPOEnd = 0x35 SegDescDistributorPOStart = 0x36 SegDescDistributorPOEnd = 0x37 SegDescProviderPromoStart = 0x3C SegDescProviderPromoEnd = 0x3D SegDescUnscheduledEventStart = 0x40 SegDescUnscheduledEventEnd = 0x41 SegDescAlternateContentOpportunityStart = 0x42 SegDescAlternateContentOpportunityEnd = 0x43 SegDescProviderAdBlockStart = 0x44 SegDescProviderAdBlockEnd = 0x45 SegDescNetworkStart = 0x50 SegDescNetworkEnd = 0x51 )
const ( SegUPIDNotUsed SegUPIDType = 0x00 SegUPIDUserDefined = 0x01 SegUPIDISCI = 0x02 SegUPIDAdID = 0x03 SegUPIDUMID = 0x04 SegUPIDISAN = 0x05 SegUPIDVISAN = 0x06 SegUPIDTID = 0x07 SegUPIDTI = 0x08 SegUPIDADI = 0x09 SegUPIDEIDR = 0x0a SegUPIDATSCID = 0x0b SegUPIDMPU = 0x0c SegUPIDMID = 0x0d SegUPADSINFO = 0x0e SegUPIDURN = 0x0f )
Variables ¶
var DeviceRestrictionsNames = map[DeviceRestrictions]string{ RestrictGroup0: "RestrictGroup0", RestrictGroup1: "RestrictGroup1", RestrictGroup2: "RestrictGroup2", RestrictNone: "RestrictNone", }
var SegDescTypeNames = map[SegDescType]string{ SegDescNotIndicated: "SegDescNotIndicated", SegDescContentIdentification: "SegDescContentIdentification", SegDescProgramStart: "SegDescProgramStart", SegDescProgramEnd: "SegDescProgramEnd", SegDescProgramEarlyTermination: "SegDescProgramEarlyTermination", SegDescProgramBreakaway: "SegDescProgramBreakaway", SegDescProgramResumption: "SegDescProgramResumption", SegDescProgramRunoverPlanned: "SegDescProgramRunoverPlanned", SegDescProgramRunoverUnplanned: "SegDescProgramRunoverUnplanned", SegDescProgramOverlapStart: "SegDescProgramOverlapStart", SegDescProgramBlackoutOverride: "SegDescProgramBlackoutOverride", SegDescProgramStartInProgress: "SegDescProgramStartInProgress", SegDescChapterStart: "SegDescChapterStart", SegDescChapterEnd: "SegDescChapterEnd", SegDescBreakStart: "SegDescBreakStart", SegDescBreakEnd: "SegDescBreakEnd", SegDescProviderAdvertisementStart: "SegDescProviderAdvertisementStart", SegDescProviderAdvertisementEnd: "SegDescProviderAdvertisementEnd", SegDescOpeningCreditStart: "SegDescOpeningCreditStart", SegDescOpeningCreditEnd: "SegDescOpeningCreditEnd", SegDescClosingCreditStart: "SegDescClosingCreditStart", SegDescClosingCreditEnd: "SegDescClosingCreditEnd", SegDescDistributorAdvertisementStart: "SegDescDistributorAdvertisementStart", SegDescDistributorAdvertisementEnd: "SegDescDistributorAdvertisementEnd", SegDescProviderPOStart: "SegDescProviderPOStart", SegDescProviderPOEnd: "SegDescProviderPOEnd", SegDescDistributorPOStart: "SegDescDistributorPOStart", SegDescDistributorPOEnd: "SegDescDistributorPOEnd", SegDescProviderPromoStart: "SegDescProviderPromoStart", SegDescProviderPromoEnd: "SegDescProviderPromoEnd", SegDescUnscheduledEventStart: "SegDescUnscheduledEventStart", SegDescUnscheduledEventEnd: "SegDescUnscheduledEventEnd", SegDescAlternateContentOpportunityStart: "SegDescAlternateContentOpportunityStart", SegDescAlternateContentOpportunityEnd: "SegDescAlternateContentOpportunityEnd", SegDescProviderAdBlockStart: "SegDescProviderAdBlockStart", SegDescProviderAdBlockEnd: "SegDescProviderAdBlockEnd", SegDescNetworkStart: "SegDescNetworkStart", SegDescNetworkEnd: "SegDescNetworkEnd", }
var SegUPIDTypeNames = map[SegUPIDType]string{ SegUPIDNotUsed: "SegUPIDNotUsed", SegUPIDUserDefined: "SegUPIDUserDefined", SegUPIDISCI: "SegUPIDISCI", SegUPIDAdID: "SegUPIDAdID", SegUPIDUMID: "SegUPIDUMID", SegUPIDISAN: "SegUPIDISAN", SegUPIDVISAN: "SegUPIDVISAN", SegUPIDTID: "SegUPIDTID", SegUPIDTI: "SegUPIDTI", SegUPIDADI: "SegUPIDADI", SegUPIDEIDR: "SegUPIDEIDR", SegUPIDATSCID: "SegUPIDATSCID", SegUPIDMPU: "SegUPIDMPU", SegUPIDMID: "SegUPIDMID", SegUPADSINFO: "SegUPADSINFO", SegUPIDURN: "SegUPIDURN", }
var SpliceCommandTypeNames = map[SpliceCommandType]string{ SpliceNull: "SpliceNull", SpliceSchedule: "SpliceSchedule", SpliceInsert: "SpliceInsert", TimeSignal: "TimeSignal", BandwidthReservation: "BandwidthReservation", PrivateCommand: "PrivateCommand", }
Functions ¶
func SCTE35AccumulatorDoneFunc ¶
SCTE done func is the same as the PMT because they're both psi
Types ¶
type Component ¶
type Component interface {
// ComponentTag returns the tag of the component.
ComponentTag() byte
// HasPTS returns if the component has a PTS.
HasPTS() bool
// PTS returns the PTS of the component.
PTS() gots.PTS
// SetComponentTag sets the component tag, which is used for the identification of the component.
SetComponentTag(value byte)
// SetHasPTS sets a flag that determines if the component has a PTS.
SetHasPTS(value bool)
// SetPTS sets the PTS of the component.
SetPTS(value gots.PTS)
}
Component is an interface for components, a structure in SpliceInsertCommand.
func CreateComponent ¶
func CreateComponent() Component
CreateComponent will create a component that is used in SpliceInsertCommand.
type ComponentOffset ¶
type ComponentOffset interface {
// ComponentTag returns the tag of the component.
ComponentTag() byte
// PTSOffset returns the PTS offset of the component.
PTSOffset() gots.PTS
// SetComponentTag sets the component tag, which is used for the identification of the component.
SetComponentTag(value byte)
// SetPTSOffset sets the PTS offset of the component.
SetPTSOffset(value gots.PTS)
}
ComponentOffset is an interface for componentOffset, a structure in SegmentationDescriptor.
func CreateComponentOffset ¶
func CreateComponentOffset() ComponentOffset
CreateComponentOffset will create a ComponentOffset structure that belongs in a SegmentationDescriptor.
type DeviceRestrictions ¶
type DeviceRestrictions byte
DeviceRestrictions type is used to specify what group that the segment is restricted to.
const ( RestrictGroup0 DeviceRestrictions = 0x00 RestrictGroup1 DeviceRestrictions = 0x01 RestrictGroup2 DeviceRestrictions = 0x02 RestrictNone DeviceRestrictions = 0x03 // no restrictions )
type SCTE35 ¶
type SCTE35 interface {
// HasPTS returns true if there is a pts time.
HasPTS() bool
// SetHasPTS sets if this SCTE35 message has a PTS.
SetHasPTS(flag bool)
// PTS returns the PTS time of the signal if it exists. Includes adjustment.
PTS() gots.PTS
// SetPTS sets the PTS time of the signal's command. There will be no PTS adjustment using this function.
// If HasPTS is false, then it will have no effect until it is set to true. Also this command has no
// effect with a null splice command.
SetPTS(pts gots.PTS)
// SetAdjustPTS will modify the pts adjustment field. The desired PTS value
// after adjustment should be passed, The adjustment value will be calculated
// during the call to Data().
SetAdjustPTS(pts gots.PTS)
// Tier returns which authorization tier this message was assigned to.
// The tier value of 0XFFF is the default and will ignored. When using tier values,
// the SCTE35 message must fit entirely into the ts payload without being split up.
// The tier is a 12 bit unsigned integer.
Tier() uint16
// SetTier sets which authorization tier this message was assigned to.
// The tier value of 0XFFF is the default and will ignored. When using tiers,
// the SCTE35 message must fit entirely into the ts payload without being split up.
// The tier is a 12 bit unsigned integer.
SetTier(tier uint16)
// Command returns the signal's splice command.
Command() SpliceCommandType
// CommandInfo returns an object describing fields of the signal's splice
// command structure.
CommandInfo() SpliceCommand
// SetCommandInfo sets the object describing fields of the signal's splice
// command structure
SetCommandInfo(commandInfo SpliceCommand)
// Descriptors returns a slice of the signals SegmentationDescriptors sorted
// by descriptor weight (least important signals first)
Descriptors() []SegmentationDescriptor
// SetDescriptors sets a slice of the signals SegmentationDescriptors they
// should be sorted by descriptor weight (least important signals first)
SetDescriptors(descriptors []SegmentationDescriptor)
// AlignmentStuffing returns how many stuffing bytes will be added to the SCTE35
// message at the end.
AlignmentStuffing() uint
// SetAlignmentStuffing sets how many stuffing bytes will be added to the SCTE35
// message at the end.
SetAlignmentStuffing(alignmentStuffing uint)
// UpdateData will encode the SCTE35 information to bytes and return it.
// UpdateData will make the next call to Data() return these new bytes.
UpdateData() []byte
// Data returns the raw data bytes of the scte signal. It will not change
// unless a call to UpdateData() is issued before this.
Data() []byte
// String returns a string representation of the SCTE35 message.
// String function is for debugging and testing.
String() string
}
SCTE35 represent operations available on a SCTE35 message.
func CreateSCTE35 ¶
func CreateSCTE35() SCTE35
CreateSCTE35 creates a default SCTE35 message and returns it. The default message has the tier 0xFFF and a Splice Null command.
type SegDescType ¶
type SegDescType uint8
SegDescType is the Segmentation Descriptor Type - not really needed for processing according to method below, but included here for backwards compatibility/porting
type SegUPIDType ¶
type SegUPIDType uint8
SegUPIDType is the Segmentation UPID Types - Only type that really needs to be checked is SegUPIDURN for CSP
type SegmentationDescriptor ¶
type SegmentationDescriptor interface {
// SCTE35 returns the SCTE35 signal this segmentation descriptor was found in.
SCTE35() SCTE35
// EventID returns the event id
EventID() uint32
// SetEventID sets the event id
SetEventID(value uint32)
// IsEventCanceled returns the event cancel indicator
IsEventCanceled() bool
// SetIsEventCanceled sets the the event cancel indicator
SetIsEventCanceled(value bool)
// HasProgramSegmentation returns if the descriptor has program segmentation
HasProgramSegmentation() bool
// SetHasProgramSegmentation if the descriptor has program segmentation
SetHasProgramSegmentation(value bool)
// HasDuration returns true if there is a duration associated with the descriptor
HasDuration() bool
// SetHasDuration determines if a duration is present in the descriptor
SetHasDuration(value bool)
// Duration returns the duration of the descriptor, 40 bit unsigned integer.
Duration() gots.PTS
// SetDuration sets the duration of the descriptor, 40 bit unsigned integer. extra bits will be truncated.
SetDuration(value gots.PTS)
// IsDeliveryNotRestricted returns if the delivery is not restricted
IsDeliveryNotRestricted() bool
// SetIsDeliveryNotRestricted sets a flag that determines if the delivery is not restricted
SetIsDeliveryNotRestricted(bool)
// IsWebDeliveryAllowed returns if web delivery is allowed, this field has no meaning if delivery is not restricted.
IsWebDeliveryAllowed() bool
// SetIsWebDeliveryAllowed sets a flag that determines if web delivery is allowed, this field has no meaning if delivery is not restricted.
SetIsWebDeliveryAllowed(bool)
// HasNoRegionalBlackout returns true if there is no regional blackout, this field has no meaning if delivery is not restricted.
HasNoRegionalBlackout() bool
// SetHasNoRegionalBlackout sets a flag that determines if there is no regional blackout, this field has no meaning if delivery is not restricted.
SetHasNoRegionalBlackout(bool)
// IsArchiveAllowed returns true if there are restrictions to storing/recording this segment, this field has no meaning if delivery is not restricted.
IsArchiveAllowed() bool
// SetIsArchiveAllowed sets a flag that determines if there are restrictions to storing/recording this segment, this field has no meaning if delivery is not restricted.
SetIsArchiveAllowed(bool)
// DeviceRestrictions returns which device group the segment is restriced to, this field has no meaning if delivery is not restricted.
DeviceRestrictions() DeviceRestrictions
// SetDeviceRestrictions sets which device group the segment is restriced to, this field has no meaning if delivery is not restricted.
SetDeviceRestrictions(DeviceRestrictions)
// Components will return components' offsets
Components() []ComponentOffset
// SetComponents will set components' offsets
SetComponents([]ComponentOffset)
// UPIDType returns the type of the upid
UPIDType() SegUPIDType
// SetUPIDType sets the type of upid, only works if UPIDType is not SegUPIDMID
SetUPIDType(value SegUPIDType)
// UPID returns the upid of the descriptor, if the UPIDType is not SegUPIDMID
UPID() []byte
// SetUPID sets the upid of the descriptor
SetUPID(value []byte)
// MID returns multiple UPIDs, if UPIDType is SegUPIDMID
MID() []UPID
// SetMID sets multiple UPIDs, only works if UPIDType is SegUPIDMID
SetMID(value []UPID)
// TypeID returns the segmentation type for descriptor
TypeID() SegDescType
// SetTypeID sets the type id
SetTypeID(value SegDescType)
// SegmentNumber returns the segment number for this descriptor.
SegmentNumber() uint8
// SetSegmentNumber sets the segment number for this descriptor.
SetSegmentNumber(value uint8)
// SegmentsExpected returns the number of expected segments for this descriptor.
SegmentsExpected() uint8
// SetSegmentsExpected sets the number of expected segments for this descriptor.
SetSegmentsExpected(value uint8)
// HasSubSegments returns true if this segmentation descriptor has subsegment fields.
HasSubSegments() bool
// SetHasSubSegments sets the field that determines if this segmentation descriptor has sub subsegments.
SetHasSubSegments(bool)
// SubSegmentNumber returns the sub-segment number for this descriptor.
SubSegmentNumber() uint8
// SetSubSegmentNumber sets the sub-segment number for this descriptor.
SetSubSegmentNumber(value uint8)
// SubSegmentsExpected returns the number of expected sub-segments for this descriptor.
SubSegmentsExpected() uint8
// SetSubSegmentsExpected sets the number of expected sub-segments for this descriptor.
SetSubSegmentsExpected(value uint8)
// StreamSwitchSignalID returns the signalID of streamswitch signal if
// present in the descriptor
StreamSwitchSignalId() (string, error)
// IsOut returns true if a signal is an out
IsOut() bool
// IsIn returns true if a signal is an in
IsIn() bool
// CanClose returns true if this descriptor can close the passed in descriptor
CanClose(out SegmentationDescriptor) bool
// Equal returns true/false if segmentation descriptor is functionally
// equal (i.e. a duplicate)
Equal(sd SegmentationDescriptor) bool
// Data returns the raw data bytes of the SegmentationDescriptor
Data() []byte
// SegmentNum is deprecated, use SegmentNumber instead.
// SegmentNum returns the segment_num descriptor field.
SegmentNum() uint8
}
SegmentationDescriptor describes the segmentation descriptor interface.
func CreateSegmentationDescriptor ¶
func CreateSegmentationDescriptor() SegmentationDescriptor
CreateSegmentationDescriptor creates and returns a default SegmentationDescriptor.
type SpliceCommand ¶
type SpliceCommand interface {
// CommandType returns the signal's splice command type value.
CommandType() SpliceCommandType
// HasPTS returns true if there is a pts time on the command.
HasPTS() bool
// PTS returns the PTS time of the command, not including adjustment.
PTS() gots.PTS
// SetHasPTS sets the flag that indicates if there is a pts time on the command.
SetHasPTS(value bool)
// SetPTS sets the PTS.
SetPTS(value gots.PTS)
// Data returns the bytes of this splice command.
Data() []byte
}
SpliceCommand represent operations available on all SpliceCommands.
func CreateSpliceNull ¶
func CreateSpliceNull() SpliceCommand
CreateSpliceNull will create a Null SpliceCommand
type SpliceCommandType ¶
type SpliceCommandType uint16
SpliceCommandType is a type used to describe the types of splice commands.
type SpliceInsertCommand ¶
type SpliceInsertCommand interface {
SpliceCommand
// EventID returns the event id
EventID() uint32
// SetEventID sets the event id
SetEventID(value uint32)
// IsEventCanceled returns the event cancel indicator
IsEventCanceled() bool
// SetIsEventCanceled sets the the event cancel indicator
SetIsEventCanceled(value bool)
// IsOut returns the value of the out of network indicator
IsOut() bool
// SetIsOut sets the out of network indicator
SetIsOut(value bool)
// IsProgramSplice returns if the program_splice_flag is set
IsProgramSplice() bool
// SetIsProgramSplice sets the program splice flag
SetIsProgramSplice(value bool)
// HasDuration returns true if there is a duration
HasDuration() bool
// SetHasDuration sets the duration flag
SetHasDuration(value bool)
// SpliceImmediate returns if the splice_immediate_flag is set
SpliceImmediate() bool
// SetSpliceImmediate sets the splice immediate flag
SetSpliceImmediate(value bool)
// Components returns the components of the splice command
Components() []Component
// IsAutoReturn returns the boolean value of the auto return field
IsAutoReturn() bool
// SetIsAutoReturn sets the auto_return flag
SetIsAutoReturn(value bool)
// Duration returns the PTS duration of the command
Duration() gots.PTS
// SetDuration sets the PTS duration of the command
SetDuration(value gots.PTS)
// UniqueProgramId returns the unique_program_id field
UniqueProgramId() uint16
// SetUniqueProgramId sets the unique program Id
SetUniqueProgramId(value uint16)
// AvailNum returns the avail_num field, index of this avail or zero if unused
AvailNum() uint8
// SetAvailNum sets the avail_num field, zero if unused. otherwise index of the avail
SetAvailNum(value uint8)
// AvailsExpected returns avails_expected field, number of avails for program
AvailsExpected() uint8
// SetAvailsExpected sets the expected number of avails
SetAvailsExpected(value uint8)
}
SpliceInsertCommand is a type of SpliceCommand.
func CreateSpliceInsertCommand ¶
func CreateSpliceInsertCommand() SpliceInsertCommand
CreateSpliceInsertCommand will create a default SpliceInsertCommand.
type State ¶
type State interface {
// Open returns a list of open signals
Open() []SegmentationDescriptor
// ProcessDescriptor takes a scte35 descriptor and returns a list of descriptors closed by it
ProcessDescriptor(desc SegmentationDescriptor) ([]SegmentationDescriptor, error)
// Close acts like Process and acts as if an appropriate close has been
// received for this given descriptor.
Close(desc SegmentationDescriptor) ([]SegmentationDescriptor, error)
}
State maintains current state for all signals and descriptors. The intended usage is to call ParseSCTE35() on raw data to create a signal, and then call ProcessSignal with that signal. This returns the list of descriptors closed by that signal. If signals have a duration and need to be closed implicitly after some timer has passed, then Close() can be used for that. Some example code is below. s := scte35.NewState() scte,_ := scte.ParseSCTE35(bytes)
for _,d := range(scte.Descriptors()) {
closed = s.ProcessDescriptor(d)
...handle closed signals appropriately here
if d.HasDuration() {
time.AfterFunc(d.Duration() + someFudgeDelta,
func() { closed = s.Close(d) })
}
}
type TimeSignalCommand ¶
type TimeSignalCommand interface {
SpliceCommand
}
TimeSignalCommand is a type of SpliceCommand.
func CreateTimeSignalCommand ¶
func CreateTimeSignalCommand() TimeSignalCommand
CreateTimeSignalCommand will create a default TimeSignalCommand
type UPID ¶
type UPID interface {
// UPIDType returns the type of UPID stored
UPIDType() SegUPIDType
// UPID returns the actual UPID
UPID() []byte
// SetUPIDType will set the type of the UPID
SetUPIDType(value SegUPIDType)
// SetUPID set the actual UPID
SetUPID(value []byte)
}
UPID describes the UPID, this is only used for MID.