Documentation ¶
Index ¶
- Constants
- Variables
- type AdaptationSet
- func (as *AdaptationSet) AddContentProtection(cp ContentProtectioner) error
- func (as *AdaptationSet) AddNewContentProtectionRoot(defaultKIDHex string) (*CENCContentProtection, error)
- func (as *AdaptationSet) AddNewContentProtectionSchemePlayready(pro string) (*PlayreadyContentProtection, error)
- func (as *AdaptationSet) AddNewContentProtectionSchemePlayreadyV10(pro string) (*PlayreadyContentProtection, error)
- func (as *AdaptationSet) AddNewContentProtectionSchemePlayreadyV10WithPSSH(pro string) (*PlayreadyContentProtection, error)
- func (as *AdaptationSet) AddNewContentProtectionSchemePlayreadyWithPSSH(pro string) (*PlayreadyContentProtection, error)
- func (as *AdaptationSet) AddNewContentProtectionSchemeWidevine() (*WidevineContentProtection, error)
- func (as *AdaptationSet) AddNewContentProtectionSchemeWidevineWithPSSH(wvHeader []byte) (*WidevineContentProtection, error)
- func (as *AdaptationSet) AddNewRepresentationAudio(samplingRate int64, bandwidth int64, codecs string, id string) (*Representation, error)
- func (as *AdaptationSet) AddNewRepresentationSubtitle(bandwidth int64, id string) (*Representation, error)
- func (as *AdaptationSet) AddNewRepresentationVideo(bandwidth int64, codecs string, id string, frameRate string, width int64, ...) (*Representation, error)
- func (as *AdaptationSet) AddNewRole(schemeIDURI string, value string) (*Role, error)
- func (as *AdaptationSet) SetNewSegmentTemplate(duration int64, init string, media string, startNumber int64, timescale int64) (*SegmentTemplate, error)
- type AudioChannelConfiguration
- type AudioChannelConfigurationScheme
- type CENCContentProtection
- type ContentProtection
- type ContentProtectioner
- type DashProfile
- type Duration
- type Event
- type EventStream
- type MPD
- func (m *MPD) AddNewAdaptationSetAudio(mimeType string, segmentAlignment bool, startWithSAP int64, lang string) (*AdaptationSet, error)
- func (m *MPD) AddNewAdaptationSetSubtitle(mimeType string, lang string) (*AdaptationSet, error)
- func (m *MPD) AddNewAdaptationSetVideo(mimeType string, scanType string, segmentAlignment bool, startWithSAP int64) (*AdaptationSet, error)
- func (m *MPD) AddNewPeriod() *Period
- func (m *MPD) GetCurrentPeriod() *Period
- func (m *MPD) Validate() error
- func (m *MPD) Write(w io.Writer) error
- func (m *MPD) WriteToFile(path string) error
- func (m *MPD) WriteToString() (string, error)
- type MultipleSegmentBase
- type Period
- func (period *Period) AddNewAdaptationSetAudio(mimeType string, segmentAlignment bool, startWithSAP int64, lang string) (*AdaptationSet, error)
- func (period *Period) AddNewAdaptationSetSubtitle(mimeType string, lang string) (*AdaptationSet, error)
- func (period *Period) AddNewAdaptationSetVideo(mimeType string, scanType string, segmentAlignment bool, startWithSAP int64) (*AdaptationSet, error)
- func (period *Period) SetDuration(d time.Duration)
- type PlayreadyContentProtection
- type Representation
- func (r *Representation) AddNewAudioChannelConfiguration(scheme AudioChannelConfigurationScheme, channelConfiguration string) (*AudioChannelConfiguration, error)
- func (r *Representation) AddNewSegmentBase(indexRange string, initRange string) (*SegmentBase, error)
- func (r *Representation) SetNewBaseURL(baseURL string) error
- type Role
- type SegmentBase
- type SegmentList
- type SegmentTemplate
- type SegmentTimeline
- type SegmentTimelineSegment
- type SegmentURL
- type URL
- type WidevineContentProtection
Constants ¶
const ( DASH_MIME_TYPE_VIDEO_MP4 string = "video/mp4" DASH_MIME_TYPE_AUDIO_MP4 string = "audio/mp4" DASH_MIME_TYPE_SUBTITLE_VTT string = "text/vtt" DASH_MIME_TYPE_SUBTITLE_TTML string = "application/ttaf+xml" DASH_MIME_TYPE_SUBTITLE_SRT string = "application/x-subrip" DASH_MIME_TYPE_SUBTITLE_DFXP string = "application/ttaf+xml" )
Constants for some known MIME types, this is a limited list and others can be used.
const ( CONTENT_PROTECTION_ROOT_SCHEME_ID_URI = "urn:mpeg:dash:mp4protection:2011" CONTENT_PROTECTION_ROOT_VALUE = "cenc" CENC_XMLNS = "urn:mpeg:cenc:2013" CONTENT_PROTECTION_WIDEVINE_SCHEME_ID = "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" CONTENT_PROTECTION_WIDEVINE_SCHEME_HEX = "edef8ba979d64acea3c827dcd51d21ed" CONTENT_PROTECTION_PLAYREADY_SCHEME_ID = "urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" CONTENT_PROTECTION_PLAYREADY_SCHEME_HEX = "9a04f07998404286ab92e65be0885f95" CONTENT_PROTECTION_PLAYREADY_SCHEME_V10_ID = "urn:uuid:79f0049a-4098-8642-ab92-e65be0885f95" CONTENT_PROTECTION_PLAYREADY_SCHEME_V10_HEX = "79f0049a40988642ab92e65be0885f95" CONTENT_PROTECTION_PLAYREADY_XMLNS = "urn:microsoft:playready" )
Constants for DRM / ContentProtection
Variables ¶
var ( ErrNoDASHProfileSet error = errors.New("No DASH profile set") ErrAdaptationSetNil = errors.New("Adaptation Set nil") ErrSegmentTemplateLiveProfileOnly = errors.New("Segment template can only be used with Live Profile") ErrSegmentTemplateNil = errors.New("Segment Template nil ") ErrRepresentationNil = errors.New("Representation nil") ErrBaseURLEmpty = errors.New("Base URL empty") ErrSegmentBaseOnDemandProfileOnly = errors.New("Segment Base can only be used with On-Demand Profile") ErrSegmentBaseNil = errors.New("Segment Base nil") ErrAudioChannelConfigurationNil = errors.New("Audio Channel Configuration nil") ErrInvalidDefaultKID = errors.New("Invalid Default KID string, should be 32 characters") ErrPROEmpty = errors.New("PlayReady PRO empty") ErrContentProtectionNil = errors.New("Content Protection nil") )
Known error variables
Functions ¶
This section is empty.
Types ¶
type AdaptationSet ¶
type AdaptationSet struct { MimeType *string `xml:"mimeType,attr"` ScanType *string `xml:"scanType,attr"` SegmentAlignment *bool `xml:"segmentAlignment,attr"` StartWithSAP *int64 `xml:"startWithSAP,attr"` Lang *string `xml:"lang,attr"` ContentProtection []ContentProtectioner `xml:"ContentProtection,omitempty"` Roles []*Role `xml:"Role,omitempty"` SegmentBase *SegmentBase `xml:"SegmentBase,omitempty"` SegmentList *SegmentList `xml:"SegmentList,omitempty"` SegmentTemplate *SegmentTemplate `xml:"SegmentTemplate,omitempty"` // Live Profile Only Representations []*Representation `xml:"Representation,omitempty"` }
func (*AdaptationSet) AddContentProtection ¶
func (as *AdaptationSet) AddContentProtection(cp ContentProtectioner) error
Internal helper method for adding a ContentProtection to an AdaptationSet.
func (*AdaptationSet) AddNewContentProtectionRoot ¶
func (as *AdaptationSet) AddNewContentProtectionRoot(defaultKIDHex string) (*CENCContentProtection, error)
Adds a ContentProtection tag at the root level of an AdaptationSet. This ContentProtection tag does not include signaling for any particular DRM scheme. defaultKIDHex - Default Key ID as a Hex String.
func (*AdaptationSet) AddNewContentProtectionSchemePlayready ¶
func (as *AdaptationSet) AddNewContentProtectionSchemePlayready(pro string) (*PlayreadyContentProtection, error)
AddNewContentProtectionSchemePlayready adds a new content protection scheme for PlayReady DRM. pro - PlayReady Object Header, as a Base64 encoded string.
func (*AdaptationSet) AddNewContentProtectionSchemePlayreadyV10 ¶
func (as *AdaptationSet) AddNewContentProtectionSchemePlayreadyV10(pro string) (*PlayreadyContentProtection, error)
AddNewContentProtectionSchemePlayreadyV10 adds a new content protection scheme for PlayReady v1.0 DRM. pro - PlayReady Object Header, as a Base64 encoded string.
func (*AdaptationSet) AddNewContentProtectionSchemePlayreadyV10WithPSSH ¶
func (as *AdaptationSet) AddNewContentProtectionSchemePlayreadyV10WithPSSH(pro string) (*PlayreadyContentProtection, error)
AddNewContentProtectionSchemePlayreadyV10WithPSSH adds a new content protection scheme for PlayReady v1.0 DRM. The scheme will include both ms:pro and cenc:pssh subelements pro - PlayReady Object Header, as a Base64 encoded string.
func (*AdaptationSet) AddNewContentProtectionSchemePlayreadyWithPSSH ¶
func (as *AdaptationSet) AddNewContentProtectionSchemePlayreadyWithPSSH(pro string) (*PlayreadyContentProtection, error)
AddNewContentProtectionSchemePlayreadyWithPSSH adds a new content protection scheme for PlayReady DRM. The scheme will include both ms:pro and cenc:pssh subelements pro - PlayReady Object Header, as a Base64 encoded string.
func (*AdaptationSet) AddNewContentProtectionSchemeWidevine ¶
func (as *AdaptationSet) AddNewContentProtectionSchemeWidevine() (*WidevineContentProtection, error)
AddNewContentProtectionSchemeWidevine adds a new content protection scheme for Widevine DRM to the adaptation set.
func (*AdaptationSet) AddNewContentProtectionSchemeWidevineWithPSSH ¶
func (as *AdaptationSet) AddNewContentProtectionSchemeWidevineWithPSSH(wvHeader []byte) (*WidevineContentProtection, error)
AddNewContentProtectionSchemeWidevine adds a new content protection scheme for Widevine DRM to the adaptation set. With a <cenc:pssh> element that contains a Base64 encoded PSSH box wvHeader - binary representation of Widevine Header !!! Note: this function will accept any byte slice as a wvHeader value !!!
func (*AdaptationSet) AddNewRepresentationAudio ¶
func (as *AdaptationSet) AddNewRepresentationAudio(samplingRate int64, bandwidth int64, codecs string, id string) (*Representation, error)
Adds a new Audio representation to an AdaptationSet. samplingRate - in Hz (i.e. 44100). bandwidth - in Bits/s (i.e. 67095). codecs - codec string for Audio Only (in RFC6381, https://tools.ietf.org/html/rfc6381) (i.e. mp4a.40.2). id - ID for this representation, will get used as $RepresentationID$ in template strings.
func (*AdaptationSet) AddNewRepresentationSubtitle ¶
func (as *AdaptationSet) AddNewRepresentationSubtitle(bandwidth int64, id string) (*Representation, error)
Adds a new Subtitle representation to an AdaptationSet. bandwidth - in Bits/s (i.e. 256). id - ID for this representation, will get used as $RepresentationID$ in template strings.
func (*AdaptationSet) AddNewRepresentationVideo ¶
func (as *AdaptationSet) AddNewRepresentationVideo(bandwidth int64, codecs string, id string, frameRate string, width int64, height int64) (*Representation, error)
Adds a new Video representation to an AdaptationSet. bandwidth - in Bits/s (i.e. 1518664). codecs - codec string for Audio Only (in RFC6381, https://tools.ietf.org/html/rfc6381) (i.e. avc1.4d401f). id - ID for this representation, will get used as $RepresentationID$ in template strings. frameRate - video frame rate (as a fraction) (i.e. 30000/1001). width - width of the video (i.e. 1280). height - height of the video (i.e 720).
func (*AdaptationSet) AddNewRole ¶
func (as *AdaptationSet) AddNewRole(schemeIDURI string, value string) (*Role, error)
Adds a new Role to an AdaptationSet schemeIdUri - Scheme ID URI string (i.e. urn:mpeg:dash:role:2011) value - Value for this role, (i.e. caption, subtitle, main, alternate, supplementary, commentary, dub)
func (*AdaptationSet) SetNewSegmentTemplate ¶
func (as *AdaptationSet) SetNewSegmentTemplate(duration int64, init string, media string, startNumber int64, timescale int64) (*SegmentTemplate, error)
Sets up a new SegmentTemplate for an AdaptationSet. duration - relative to timescale (i.e. 2000). init - template string for init segment (i.e. $RepresentationID$/audio/en/init.mp4). media - template string for media segments. startNumber - the number to start segments from ($Number$) (i.e. 0). timescale - sets the timescale for duration (i.e. 1000, represents milliseconds).
type AudioChannelConfigurationScheme ¶
type AudioChannelConfigurationScheme string
const ( // Scheme for non-Dolby Audio AUDIO_CHANNEL_CONFIGURATION_MPEG_DASH AudioChannelConfigurationScheme = "urn:mpeg:dash:23003:3:audio_channel_configuration:2011" // Scheme for Dolby Audio AUDIO_CHANNEL_CONFIGURATION_MPEG_DOLBY AudioChannelConfigurationScheme = "tag:dolby.com,2014:dash:audio_channel_configuration:2011" )
type CENCContentProtection ¶
type CENCContentProtection struct { ContentProtection DefaultKID *string `xml:"cenc:default_KID,attr"` Value *string `xml:"value,attr"` // Default: cenc }
type ContentProtection ¶
type ContentProtection struct { AdaptationSet *AdaptationSet `xml:"-"` XMLName xml.Name `xml:"ContentProtection"` SchemeIDURI *string `xml:"schemeIdUri,attr"` // Default: urn:mpeg:dash:mp4protection:2011 XMLNS *string `xml:"xmlns:cenc,attr"` // Default: urn:mpeg:cenc:2013 }
func (ContentProtection) ContentProtected ¶
func (s ContentProtection) ContentProtected()
type ContentProtectioner ¶
type ContentProtectioner interface {
ContentProtected()
}
type DashProfile ¶
type DashProfile string
Type definition for DASH profiles
const ( // Live Profile DASH_PROFILE_LIVE DashProfile = "urn:mpeg:dash:profile:isoff-live:2011" // On Demand Profile DASH_PROFILE_ONDEMAND DashProfile = "urn:mpeg:dash:profile:isoff-on-demand:2011" // HbbTV Profile DASH_PROFILE_HBBTV_1_5_LIVE DashProfile = "urn:hbbtv:dash:profile:isoff-live:2012,urn:mpeg:dash:profile:isoff-live:2011" )
Constants for supported DASH profiles
type EventStream ¶
type MPD ¶
type MPD struct { XMLNs *string `xml:"xmlns,attr"` Profiles *string `xml:"profiles,attr"` Type *string `xml:"type,attr"` MediaPresentationDuration *string `xml:"mediaPresentationDuration,attr"` MinBufferTime *string `xml:"minBufferTime,attr"` BaseURL string `xml:"BaseURL,omitempty"` Periods []*Period `xml:"Period,omitempty"` // contains filtered or unexported fields }
func NewMPD ¶
func NewMPD(profile DashProfile, minBufferTime string) *MPD
Creates a new MPD object. profile - DASH Profile (Live or OnDemand). mediaPresentationDuration - Media Presentation Duration (i.e. PT6M16S). minBufferTime - Min Buffer Time (i.e. PT1.97S).
func Read ¶
Reads from an io.Reader interface into an MPD object. r - Must implement the io.Reader interface.
func ReadFromFile ¶
Reads an MPD XML file from disk into a MPD object. path - File path to an MPD on disk
func ReadFromString ¶
Reads a string into a MPD object. xmlStr - MPD manifest data as a string.
func (*MPD) AddNewAdaptationSetAudio ¶
func (m *MPD) AddNewAdaptationSetAudio(mimeType string, segmentAlignment bool, startWithSAP int64, lang string) (*AdaptationSet, error)
Create a new Adaptation Set for Audio Assets. mimeType - MIME Type (i.e. audio/mp4). segmentAlignment - Segment Alignment(i.e. true). startWithSAP - Starts With SAP (i.e. 1). lang - Language (i.e. en).
func (*MPD) AddNewAdaptationSetSubtitle ¶
func (m *MPD) AddNewAdaptationSetSubtitle(mimeType string, lang string) (*AdaptationSet, error)
Create a new Adaptation Set for Subtitle Assets. mimeType - MIME Type (i.e. text/vtt). lang - Language (i.e. en).
func (*MPD) AddNewAdaptationSetVideo ¶
func (m *MPD) AddNewAdaptationSetVideo(mimeType string, scanType string, segmentAlignment bool, startWithSAP int64) (*AdaptationSet, error)
Create a new Adaptation Set for Video Assets. mimeType - MIME Type (i.e. video/mp4). scanType - Scan Type (i.e.progressive). segmentAlignment - Segment Alignment(i.e. true). startWithSAP - Starts With SAP (i.e. 1).
func (*MPD) AddNewPeriod ¶
AddNewPeriod creates a new Period and make it the currently active one.
func (*MPD) GetCurrentPeriod ¶
GetCurrentPeriod returns the current Period.
func (*MPD) Write ¶
Writes an MPD object to an io.Writer interface w - Must implement the io.Writer interface.
func (*MPD) WriteToFile ¶
Writes an MPD object to a file on disk. path - Output path to write the manifest to.
func (*MPD) WriteToString ¶
Writes an MPD object to a string.
type MultipleSegmentBase ¶
type MultipleSegmentBase struct { SegmentBase SegmentTimeline *SegmentTimeline `xml:"SegmentTimeline,omitempty"` BitstreamSwitching *URL `xml:"BitstreamSwitching,omitempty"` Duration *uint32 `xml:"duration,attr,omitempty"` StartNumber *uint32 `xml:"startNumber,attr,omitempty"` }
type Period ¶
type Period struct { ID string `xml:"id,attr,omitempty"` Duration Duration `xml:"duration,attr,omitempty"` Start string `xml:"start,attr,omitempty"` BaseURL string `xml:"BaseURL,omitempty"` SegmentBase *SegmentBase `xml:"SegmentBase,omitempty"` SegmentList *SegmentList `xml:"SegmentList,omitempty"` SegmentTemplate *SegmentTemplate `xml:"SegmentTemplate,omitempty"` AdaptationSets []*AdaptationSet `xml:"AdaptationSet,omitempty"` EventStreams []*EventStream `xml:"EventStream,omitempty"` }
func (*Period) AddNewAdaptationSetAudio ¶
func (period *Period) AddNewAdaptationSetAudio(mimeType string, segmentAlignment bool, startWithSAP int64, lang string) (*AdaptationSet, error)
Create a new Adaptation Set for Audio Assets. mimeType - MIME Type (i.e. audio/mp4). segmentAlignment - Segment Alignment(i.e. true). startWithSAP - Starts With SAP (i.e. 1). lang - Language (i.e. en).
func (*Period) AddNewAdaptationSetSubtitle ¶
func (period *Period) AddNewAdaptationSetSubtitle(mimeType string, lang string) (*AdaptationSet, error)
Create a new Adaptation Set for Subtitle Assets. mimeType - MIME Type (i.e. text/vtt). lang - Language (i.e. en).
func (*Period) AddNewAdaptationSetVideo ¶
func (period *Period) AddNewAdaptationSetVideo(mimeType string, scanType string, segmentAlignment bool, startWithSAP int64) (*AdaptationSet, error)
Create a new Adaptation Set for Video Assets. mimeType - MIME Type (i.e. video/mp4). scanType - Scan Type (i.e.progressive). segmentAlignment - Segment Alignment(i.e. true). startWithSAP - Starts With SAP (i.e. 1).
func (*Period) SetDuration ¶
type PlayreadyContentProtection ¶
type PlayreadyContentProtection struct { ContentProtection PlayreadyXMLNS *string `xml:"xmlns:mspr,attr,omitempty"` PRO *string `xml:"mspr:pro,omitempty"` PSSH *string `xml:"cenc:pssh,omitempty"` }
type Representation ¶
type Representation struct { AdaptationSet *AdaptationSet `xml:"-"` AudioChannelConfiguration *AudioChannelConfiguration `xml:"AudioChannelConfiguration,omitempty"` AudioSamplingRate *int64 `xml:"audioSamplingRate,attr"` // Audio Bandwidth *int64 `xml:"bandwidth,attr"` // Audio + Video Codecs *string `xml:"codecs,attr"` // Audio + Video FrameRate *string `xml:"frameRate,attr,omitempty"` // Video Height *int64 `xml:"height,attr"` // Video ID *string `xml:"id,attr"` // Audio + Video Width *int64 `xml:"width,attr"` // Video BaseURL *string `xml:"BaseURL,omitempty"` // On-Demand Profile SegmentBase *SegmentBase `xml:"SegmentBase,omitempty"` // On-Demand Profile SegmentList *SegmentList `xml:"SegmentList,omitempty"` SegmentTemplate *SegmentTemplate `xml:"SegmentTemplate,omitempty"` }
func (*Representation) AddNewAudioChannelConfiguration ¶
func (r *Representation) AddNewAudioChannelConfiguration(scheme AudioChannelConfigurationScheme, channelConfiguration string) (*AudioChannelConfiguration, error)
Sets a new AudioChannelConfiguration on a Representation. This is required for the HbbTV profile. scheme - One of the two AudioConfigurationSchemes. channelConfiguration - string that represents the channel configuration.
func (*Representation) AddNewSegmentBase ¶
func (r *Representation) AddNewSegmentBase(indexRange string, initRange string) (*SegmentBase, error)
Sets a new SegmentBase on a Representation. This is for On Demand profile. indexRange - Byte range to the index (sidx)atom. init - Byte range to the init atoms (ftyp+moov).
func (*Representation) SetNewBaseURL ¶
func (r *Representation) SetNewBaseURL(baseURL string) error
Sets the BaseURL for a Representation. baseURL - Base URL as a string (i.e. 800k/output-audio-und.mp4)
type Role ¶
type Role struct { AdaptationSet *AdaptationSet `xml:"-"` SchemeIDURI *string `xml:"schemeIdUri,attr"` Value *string `xml:"value,attr"` }
type SegmentBase ¶
type SegmentBase struct { Initialization *URL `xml:"Initialization,omitempty"` RepresentationIndex *URL `xml:"RepresentationIndex,omitempty"` Timescale *uint32 `xml:"timescale,attr,omitempty"` PresentationTimeOffset *uint64 `xml:"presentationTimeOffset,attr,omitempty"` IndexRange *string `xml:"indexRange,attr,omitempty"` IndexRangeExact *bool `xml:"indexRangeExact,attr,omitempty"` AvailabilityTimeOffset *float32 `xml:"availabilityTimeOffset,attr,omitempty"` AvailabilityTimeComplete *bool `xml:"availabilityTimeComplete,attr,omitempty"` }
type SegmentList ¶
type SegmentList struct { MultipleSegmentBase SegmentURLs []*SegmentURL `xml:"SegmentURL,omitempty"` }
type SegmentTemplate ¶
type SegmentTemplate struct { AdaptationSet *AdaptationSet `xml:"-"` SegmentTimeline *SegmentTimeline `xml:"SegmentTimeline,omitempty"` PresentationTimeOffset *uint64 `xml:"presentationTimeOffset,attr,omitempty"` Duration *int64 `xml:"duration,attr"` Initialization *string `xml:"initialization,attr"` Media *string `xml:"media,attr"` StartNumber *int64 `xml:"startNumber,attr"` Timescale *int64 `xml:"timescale,attr"` }
Segment Template is for Live Profile Only
type SegmentTimeline ¶
type SegmentTimeline struct {
Segments []*SegmentTimelineSegment `xml:"S,omitempty"`
}
type SegmentTimelineSegment ¶
type SegmentURL ¶
type WidevineContentProtection ¶
type WidevineContentProtection struct { ContentProtection PSSH *string `xml:"cenc:pssh,omitempty"` }
func NewWidevineContentProtection ¶
func NewWidevineContentProtection(wvHeader []byte) (*WidevineContentProtection, error)