Module mse
Media Source Extensions: MediaSource, SourceBuffer and SourceBufferList (src/page/media_source.odin). A SourceBuffer holds the coded frames a container parser made of what scripts appended (src/media), which a media element plays; the objects are EventTargets: sourceopen / sourceended / sourceclose, updatestart / update / updateend / error / abort, addsourcebuffer / removesourcebuffer are events of the host objects. In a dedicated worker the same functions drive a MediaSource whose media element is in the page (src/page/mse_worker.odin): its MediaSourceHandle is transferred to the page and set as the element's srcObject.
Exposed to: Window, Worker. Source: api/media_source.widl.
Odin: import "wren:mse".
Types
handle MediaSource : Object
Checked by the browser on every call (lookup_MediaSource).
handle SourceBuffer : Object
Checked by the browser on every call (lookup_SourceBuffer).
handle SourceBufferList : Object
Checked by the browser on every call (lookup_SourceBufferList).
handle MediaSourceHandle : Object
Checked by the browser on every call (lookup_MediaSourceHandle).
Functions
MediaSource_create
MediaSource MediaSource_create() raisesnew MediaSource(): closed until an element attaches it (in a dedicated worker too; not in other workers).
Raises: returns an Error (see web).
Host: MediaSource_create :: proc(c: ^Call) -> (u64, Api_Error)
ManagedMediaSource_create
MediaSource ManagedMediaSource_create() raisesnew ManagedMediaSource(): a MediaSource whose user agent says when to stream (startstreaming / endstreaming).
Raises: returns an Error (see web).
Host: ManagedMediaSource_create :: proc(c: ^Call) -> (u64, Api_Error)
ManagedMediaSource_streaming
bool ManagedMediaSource_streaming(MediaSource source)managedMediaSource.streaming: whether the user agent currently wants the page to append data.
Host: ManagedMediaSource_streaming :: proc(c: ^Call, source: Api_MediaSource) -> bool
MediaSource_registerObjectURL
void MediaSource_registerObjectURL(MediaSource source, string url) raisesURL.createObjectURL(mediaSource): the URL (of the page's origin) is registered, so that a media element whose src is that URL plays this source. Called by the engine with the URL it made. NotSupported for a worker's MediaSource.
Raises: returns an Error (see web).
Host: MediaSource_registerObjectURL :: proc(c: ^Call, source: Api_MediaSource, url: string) -> Api_Error
MediaSource_handle
MediaSourceHandle MediaSource_handle(MediaSource source) raisesmediaSource.handle: the same MediaSourceHandle each time (a dedicated worker's MediaSource; NotSupported else).
Raises: returns an Error (see web).
Host: MediaSource_handle :: proc(c: ^Call, source: Api_MediaSource) -> (u64, Api_Error)
MediaSourceHandle_take
u64 MediaSourceHandle_take(MediaSourceHandle h) raisesA MediaSourceHandle in the transfer list of a message: the token the receiving realm adopts (DataClone when it was transferred before or its MediaSource is attached already).
Raises: returns an Error (see web).
Host: MediaSourceHandle_take :: proc(c: ^Call, h: Api_MediaSourceHandle) -> (u64, Api_Error)
MediaSourceHandle_adopt
MediaSourceHandle MediaSourceHandle_adopt(u64 token) raisesThe receiving realm's MediaSourceHandle for a token.
Raises: returns an Error (see web).
Host: MediaSourceHandle_adopt :: proc(c: ^Call, token: u64) -> (u64, Api_Error)
MediaSource_revokeObjectURL
void MediaSource_revokeObjectURL(string url)URL.revokeObjectURL(url): the URL no longer names a Media Source (one already attached keeps playing).
Host: MediaSource_revokeObjectURL :: proc(c: ^Call, url: string)
MediaSource_isTypeSupported
bool MediaSource_isTypeSupported(string type)MediaSource.isTypeSupported(type)
Host: MediaSource_isTypeSupported :: proc(c: ^Call, type: string) -> bool
MediaSource_sourceBuffers
SourceBufferList MediaSource_sourceBuffers(MediaSource source)source.sourceBuffers, activeSourceBuffers: the same object each time.
Host: MediaSource_sourceBuffers :: proc(c: ^Call, source: Api_MediaSource) -> u64
MediaSource_activeSourceBuffers
SourceBufferList MediaSource_activeSourceBuffers(MediaSource source)Host: MediaSource_activeSourceBuffers :: proc(c: ^Call, source: Api_MediaSource) -> u64
MediaSource_readyState
string MediaSource_readyState(MediaSource source)source.readyState: "closed", "open" or "ended".
Host: MediaSource_readyState :: proc(c: ^Call, source: Api_MediaSource) -> string
MediaSource_duration
f64 MediaSource_duration(MediaSource source)Host: MediaSource_duration :: proc(c: ^Call, source: Api_MediaSource) -> f64
MediaSource_set_duration
void MediaSource_set_duration(MediaSource source, f64 value) raisessource.duration = value: InvalidState unless open or updating buffers, Type for a negative value or NaN.
Raises: returns an Error (see web).
Host: MediaSource_set_duration :: proc(c: ^Call, source: Api_MediaSource, value: f64) -> Api_Error
MediaSource_addSourceBuffer
SourceBuffer MediaSource_addSourceBuffer(MediaSource source, string type) raisessource.addSourceBuffer(type): NotSupported, InvalidState (not open), Quota.
Raises: returns an Error (see web).
Host: MediaSource_addSourceBuffer :: proc(c: ^Call, source: Api_MediaSource, type: string) -> (u64, Api_Error)
MediaSource_removeSourceBuffer
void MediaSource_removeSourceBuffer(MediaSource source, SourceBuffer buffer) raisesRaises: returns an Error (see web).
Host: MediaSource_removeSourceBuffer :: proc(c: ^Call, source: Api_MediaSource, buffer: Api_SourceBuffer) -> Api_Error
MediaSource_endOfStream
void MediaSource_endOfStream(MediaSource source, string error = "") raisessource.endOfStream(error): "" (none), "network" or "decode".
Raises: returns an Error (see web).
Host: MediaSource_endOfStream :: proc(c: ^Call, source: Api_MediaSource, error: string) -> Api_Error
MediaSource_setLiveSeekableRange
void MediaSource_setLiveSeekableRange(MediaSource source, f64 start, f64 end) raisesRaises: returns an Error (see web).
Host: MediaSource_setLiveSeekableRange :: proc(c: ^Call, source: Api_MediaSource, start: f64, end: f64) -> Api_Error
MediaSource_clearLiveSeekableRange
void MediaSource_clearLiveSeekableRange(MediaSource source) raisesRaises: returns an Error (see web).
Host: MediaSource_clearLiveSeekableRange :: proc(c: ^Call, source: Api_MediaSource) -> Api_Error
SourceBufferList_length
u32 SourceBufferList_length(SourceBufferList list)Host: SourceBufferList_length :: proc(c: ^Call, list: Api_SourceBufferList) -> u32
SourceBufferList_item
SourceBuffer SourceBufferList_item(SourceBufferList list, u32 index) raiseslist[index]: Not_Found past the end (undefined).
Raises: returns an Error (see web).
Host: SourceBufferList_item :: proc(c: ^Call, list: Api_SourceBufferList, index: u32) -> (u64, Api_Error)
SourceBuffer_mode
string SourceBuffer_mode(SourceBuffer buffer)buffer.mode: "segments" or "sequence".
Host: SourceBuffer_mode :: proc(c: ^Call, buffer: Api_SourceBuffer) -> string
SourceBuffer_set_mode
void SourceBuffer_set_mode(SourceBuffer buffer, string mode) raisesRaises: returns an Error (see web).
Host: SourceBuffer_set_mode :: proc(c: ^Call, buffer: Api_SourceBuffer, mode: string) -> Api_Error
SourceBuffer_updating
bool SourceBuffer_updating(SourceBuffer buffer)Host: SourceBuffer_updating :: proc(c: ^Call, buffer: Api_SourceBuffer) -> bool
SourceBuffer_ranges
bytes SourceBuffer_ranges(SourceBuffer buffer) raisesbuffer.buffered as pairs of f64 (start, end), seconds (InvalidState for a removed buffer): the engine makes the TimeRanges.
Raises: returns an Error (see web).
Host: SourceBuffer_ranges :: proc(c: ^Call, buffer: Api_SourceBuffer) -> ([]u8, Api_Error)
SourceBuffer_timestampOffset
f64 SourceBuffer_timestampOffset(SourceBuffer buffer)Host: SourceBuffer_timestampOffset :: proc(c: ^Call, buffer: Api_SourceBuffer) -> f64
SourceBuffer_set_timestampOffset
void SourceBuffer_set_timestampOffset(SourceBuffer buffer, f64 value) raisesRaises: returns an Error (see web).
Host: SourceBuffer_set_timestampOffset :: proc(c: ^Call, buffer: Api_SourceBuffer, value: f64) -> Api_Error
SourceBuffer_appendWindowStart
f64 SourceBuffer_appendWindowStart(SourceBuffer buffer)Host: SourceBuffer_appendWindowStart :: proc(c: ^Call, buffer: Api_SourceBuffer) -> f64
SourceBuffer_set_appendWindowStart
void SourceBuffer_set_appendWindowStart(SourceBuffer buffer, f64 value) raisesRaises: returns an Error (see web).
Host: SourceBuffer_set_appendWindowStart :: proc(c: ^Call, buffer: Api_SourceBuffer, value: f64) -> Api_Error
SourceBuffer_appendWindowEnd
f64 SourceBuffer_appendWindowEnd(SourceBuffer buffer)Host: SourceBuffer_appendWindowEnd :: proc(c: ^Call, buffer: Api_SourceBuffer) -> f64
SourceBuffer_set_appendWindowEnd
void SourceBuffer_set_appendWindowEnd(SourceBuffer buffer, f64 value) raisesRaises: returns an Error (see web).
Host: SourceBuffer_set_appendWindowEnd :: proc(c: ^Call, buffer: Api_SourceBuffer, value: f64) -> Api_Error
SourceBuffer_appendBuffer
void SourceBuffer_appendBuffer(SourceBuffer buffer, bytes data) raisesbuffer.appendBuffer(data): InvalidState while updating or removed, Quota when full.
Raises: returns an Error (see web).
Host: SourceBuffer_appendBuffer :: proc(c: ^Call, buffer: Api_SourceBuffer, data: []u8) -> Api_Error
SourceBuffer_abort
void SourceBuffer_abort(SourceBuffer buffer) raisesRaises: returns an Error (see web).
Host: SourceBuffer_abort :: proc(c: ^Call, buffer: Api_SourceBuffer) -> Api_Error
SourceBuffer_changeType
void SourceBuffer_changeType(SourceBuffer buffer, string type) raisesRaises: returns an Error (see web).
Host: SourceBuffer_changeType :: proc(c: ^Call, buffer: Api_SourceBuffer, type: string) -> Api_Error
SourceBuffer_remove
void SourceBuffer_remove(SourceBuffer buffer, f64 start, f64 end) raisesRaises: returns an Error (see web).
Host: SourceBuffer_remove :: proc(c: ^Call, buffer: Api_SourceBuffer, start: f64, end: f64) -> Api_Error