Skip to content

Commit

Permalink
✨ Duration support
Browse files Browse the repository at this point in the history
  • Loading branch information
yumexupanic committed May 20, 2024
1 parent e8ec303 commit 4884414
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 1 deletion.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ let wsfmp4 = new WSFMP4(media, {
- live Enable live mode default false (recommended to enable live)
- liveMaxLatency The maximum latency of the live broadcast, after exceeding it, it will refresh to the latest frame automatically Unit second Default 0 (recommended configuration for live broadcast)
- cacheMax Maximum length of cache, buffer will be cleaned up automatically in seconds Default 8
- duration Sets the total duration of the video in seconds Default 0 (this will toggle the loading method to sequence instead of PTS)

For live streaming, it is recommended to turn on the configuration related to live streaming, which can effectively control the latency. Live streaming latency usually requires the cooperation of the server and the client, and the client handles the refresh of the cached content as well as the management of the buffer. After the live state is turned on, some optimizations will be performed by default. One of the liveMaxLatency configuration is more important, set too small video will frequently wait, too large delay is high. Specifically according to the streaming media slice time and key frame settings, there is no fixed value.

Expand Down
1 change: 1 addition & 0 deletions README_jp.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ let wsfmp4 = new WSFMP4(media, {
- live ライブモードを有効にします。デフォルトはfalseです(ライブモードを有効にすることを推奨します)。
- liveMaxLatency ライブ放送の最大レイテンシ。これを超えると、自動的に最新フレームにリフレッシュされる 単位秒 デフォルト 0(ライブ放送をオンにすることを推奨)
- cacheMax キャッシュの最大長、自動的にバッファをクリーンアップ 単位秒 デフォルト8
- duration 動画の総時間を秒単位で設定します デフォルト 0 (ロード方法を PTS ではなくシーケンスに切り替えます)

ライブ・ストリーミングでは、ライブ・ストリーミングに関連する設定をオンにすることをお勧めします。 ライブ・ストリーミングの遅延は通常、サーバーとクライアントの協力を必要とし、クライアントはキャッシュされたコンテンツのリフレッシュとバッファの管理を処理します。 ライブ状態がオンになった後、デフォルトでいくつかの最適化が実行されます。 liveMaxLatency設定の1つはより重要であり、小さすぎるビデオが頻繁に待機するように設定され、大きすぎる遅延が高くなります。 具体的には、ストリーミングメディアのスライス時間とキーフレームの設定に応じて、固定値はありません。

Expand Down
1 change: 1 addition & 0 deletions README_zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ let wsfmp4 = new WSFMP4(media, {
- live 开启直播模式 默认 false (直播推荐开启)
- liveMaxLatency 直播最大延迟,超过后会自动刷新到最新帧 单位秒 默认 0 (直播推荐开启)
- cacheMax 缓存的最大时长,自动清理 buffer 单位秒 默认 8
- duration 设置视频总时长,单位秒 默认 0(这会切换加载方式为 sequence,而不是 PTS)

对于直播流,推荐开启直播相关的配置,能有效的控制延时,直播延时通常需要服务器和客户端配合,客户端处理缓存的内容刷新以及 buffer 的管理。开启了直播状态后,默认会进行一些优化。其中 liveMaxLatency 的配置比较重要,设置的太小视频会频繁的等待,太大会延迟较高。具体需要根据流媒体的分片时间以及关键帧设置,没有固定值。

Expand Down
19 changes: 18 additions & 1 deletion lib/wsfmp4.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class WSFMP4 {
this.sourceBuffer = null;
this.bufferOffset = 0;
this.lastBufferEnd = 0;
this.isSetDuration = false;

this._setup()
}
Expand Down Expand Up @@ -101,12 +102,28 @@ class WSFMP4 {
this.media.src = URL.createObjectURL(this.mediasource);

this.mediasource.addEventListener('sourceopen', () => {
if (this.options.debug) {
console.log('sourceopen init')
}
this.sourceBuffer = this.mediasource.addSourceBuffer(this.codecs);
if (this.options.duration) {
mediasource.duration = this.options.duration
this.mediasource.duration = this.options.duration
}

this.sourceBuffer.onupdateend = () => {
if (!this.sourceBuffer.updating && !this.isSetDuration && this.options.duration) {
if (this.sourceBuffer.mode == "segments") {
this.sourceBuffer.mode = "sequence"
if (this.options.debug) {
console.log(`set sourceBuffer mode => sequence`)
}
}
this.mediasource.duration = this.options.duration
this.isSetDuration = true
if (this.options.debug) {
console.log(`set duration => ${this.options.duration}`)
}
}

let current = this.media.currentTime;
if (this.media.buffered.length > 0) {
Expand Down

0 comments on commit 4884414

Please sign in to comment.