Wren a web browser where WebAssembly runs everything, JavaScript included

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() raises

new 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() raises

new 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) raises

URL.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) raises

mediaSource.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) raises

A 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) raises

The 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) raises

source.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) raises

source.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) raises

Raises: 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 = "") raises

source.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) raises

Raises: 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) raises

Raises: 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) raises

list[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) raises

Raises: 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) raises

buffer.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) raises

Raises: 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) raises

Raises: 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) raises

Raises: 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) raises

buffer.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) raises

Raises: 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) raises

Raises: 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) raises

Raises: returns an Error (see web).

Host: SourceBuffer_remove :: proc(c: ^Call, buffer: Api_SourceBuffer, start: f64, end: f64) -> Api_Error

Edit this page on GitHub