@flussonic/flussonic-mse-player v25.6.3-1-g01bd0c9
flussonic-mse-player
flussonic-mse-player is a JavaScript library for playing video relies on flussonic backend, HTML5 video and MediaSource Extensions
Installation
npm install --save @flussonic/flussonic-mse-playerUsage
Webpack:
import FlussonicMsePlayer from '@flussonic/flussonic-mse-player'
...
const player = new FlussonicMsePlayer(element, url, opts)Script tag:
Since the library include via script tag it is accesible at window.FlussonicMsePlayer
<script type="text/javascript" src="../../dist/FlussonicMsePlayer.js"></script>var FlussonicMsePlayer = window.FlussonicMsePlayer
var player = new FlussonicMsePlayer(element, url, opts)Static Methods:
isSupported() - return
trueif browser is supported Media Source ExtensionreplaceHttpByWS(url: string) - return new url where replaced http(s):// by ws(s)://
Publication
In order to publish new project version:
- update
package.jsonversion in accordance with{year}.{month}.{minor}(e.g.25.5.3). - run
yarn build - add all changes to the commit
- create an annotated tag with new version and push it
For instance:
git tag -a v25.5.3 -m "Release version 25.5.3"
git push origin v25.5.3- make sure that
git describereturns the updated version - push the commit with changes
Construction:
const player = new FlussonicMsePlayer(element, url, opts)element - DOM element
url - url of a stream
opts is plain object it can include methods:
debug?: boolean- iftruethen enable logs in browser console. And export methods humanTime, humanDate to window.progressUpdateTime?: number- time period for invokingonProgress.connectionRetries?: number- number of reconnection retries if player can't start playback.wsReconnect?: boolean- trying to restart websocket connection on error closing.preferHQ?: boolean- iftrue, player will automatically select the highest available quality of the stream.retryMuted?: boolean- iftrue, in some cases, due to "Browser Autoplay Policy Changes" it will try to restart playing process with initialy muted video element.maxBufferDelay?: number- maxBufferDelay option for sourceBufferonInit()- triggered on player initialized.onProgress(utc: number)- triggered every 100ms(progressUpdateTime) while a stream is playing and gives current playback timeonMediaInfo(info: MediaInfo)- triggered when metadata of the stream is available. metadata include a common information of the stream such as width, height, information about mbr streams and so on. After this callback triggered you can use getVideoTracks()/getAudioTracks() methods.onDisconnect(status: object)- triggered on websocket connection lost.onError(error: object)- triggered on player errors.onEvent(event: object)- triggered on player events.onMuted()- triggered on player set muted.onPause()- triggered on player set paused.onResume()- triggered on player gets resumed from pause.onStats(stats: object)- triggered on player stats change. Stats include a common ststistics of the stream: endTime, currentTime, videoBuffer, audioBuffer, timestamp, readyState, networkState.onSeeked()- triggered when process of seeking is finishedonStartStalling()- triggered when playing is stalledonEndStalling()- triggered when the video tag is progressed(start playing).onStartStalling()/onEndStalling()useful callback for implementation loading-spinner.•••DEPRECATED•••
bufferMode: 'segments'|'sequence'- SourceBuffer Object Append Mode. Default value is'sequence'.errorsBeforeStop: number- Amount of errors will be happened before invoke the stop() method.
Methods:
play(videoTrack?: Track, audioTrack?: Track) => Promise - start playing.
Return a
Promise. Resolved if HTMLMediaElement.play() resolved(HTMLMediaElement.play() Returns a Promise). Overwise rejected with error message.if you do autoplay="true" muted="false" video. The
playwill be rejected(Autoplay Policy Changes)For resolve this behaviour you can mute the video before playing. Or you can process play's rejection and show play button.
pause() - send
pausecommand by websocketstop() - close websocket connection; detach mediaSource from given HTMLMediaElement; invoke the HTMLMediaElement stop method
restart() - perform a full restart of playing process
autoTrackSelection(preferBest: boolean) => tracks: Array - if
true- returns array with the tracks of highest available quality. Iffalse- returns array with the tracks of the lowest available quality.seek(utc: number) - send
seekcommand by websocketsetTracks(tracks: Array) -
Types:
type MediaInfo = {
height: number,
width: number,
streams: Array<StreamInfo>,
activeStreams: ActiveStreams,
}
type StreamInfo = {
bitrate: number,
codec: string,
content: string,
fps: number,
height: number,
length_size: number,
level: string,
pixel_height: number,
pixel_width: number,
profile: "Baseline",
sar_height: number,
sar_width: number,
size: string,
track_id: TrackId,
width: number
}
type ActiveStreams = {
video: TrackId,
audio: TrackId,
}
type TrackId = 'a1'|'a2'|'a3'| ... 'aN'|'v1'|'v2'|'v3'| ... 'vN'
type UtcOrLive = number | 'live'TODO
CHANGELOG
6 months ago
6 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago