HTML5的MSE,GitHub - flussonic/mse-player: HTML5 zero latency player for Flussonic

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-player

Usage

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

var FlussonicMsePlayer = window.FlussonicMsePlayer

var player = new FlussonicMsePlayer(element, url, opts)

Static Methods:

isSupported() - return true if browser is supported Media Source Extension

replaceHttpByWS(url: string) - return new url where replaced http(s):// by ws(s)://

Construction:

const player = new FlussonicMsePlayer(element, url, opts)

element -

url - url of a stream

opts is plain object it can include methods:

debug?: boolean - if true then enable logs in browser console. And export methods humanTime, humanDate to window.

progressUpdateTime?: number - time period for invoking onProgress.

connectionRetries?: number - number of reconnection retries if player can't start playback.

wsReconnect?: boolean - trying to restart websocket connection on error closing.

preferHQ?: boolean - if true, player will automatically select the highest available quality of the stream.

retryMuted?: boolean - if true, 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 sourceBuffer

onProgress(utc: number) - triggered every 100ms(progressUpdateTime) while a stream is playing and gives current playback time

onMediaInfo(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 finished

onStartStalling() - triggered when playing is stalled

onEndStalling() - 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 play will 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 pause command by websocket

stop() - 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. If false - returns array with the tracks of the lowest available quality.

seek(utc: number) - send seek command by websocket

setTracks(tracks: Array) -

Types:

type MediaInfo = {

height: number,

width: number,

streams: Array,

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值