diff options
-rw-r--r-- | stream/src/stream_info.rs | 12 | ||||
-rw-r--r-- | web/script/player/track/mod.ts | 2 | ||||
-rw-r--r-- | web/script/player/track/mse.ts | 5 |
3 files changed, 10 insertions, 9 deletions
diff --git a/stream/src/stream_info.rs b/stream/src/stream_info.rs index a8b6989..43c536a 100644 --- a/stream/src/stream_info.rs +++ b/stream/src/stream_info.rs @@ -57,12 +57,7 @@ pub(crate) async fn stream_info(info: Arc<SMediaInfo>) -> Result<(InternalStream let segment = StreamSegmentInfo { name: None, - duration: metadata[0] - .info - .as_ref() - .unwrap() - .duration - .unwrap_or_default(), + duration: media_duration(&metadata[0]), tracks, }; Ok(( @@ -162,3 +157,8 @@ pub(crate) async fn write_stream_info(info: Arc<SMediaInfo>, mut b: DuplexStream spawn(async move { b.write_all(&serde_json::to_vec(&info)?).await }); Ok(()) } + +fn media_duration(m: &MatroskaMetadata) -> f64 { + let info = m.info.as_ref().unwrap(); + (info.duration.unwrap_or_default() * info.timestamp_scale as f64) / 1_000_000_000. +} diff --git a/web/script/player/track/mod.ts b/web/script/player/track/mod.ts index 5a91209..99b348c 100644 --- a/web/script/player/track/mod.ts +++ b/web/script/player/track/mod.ts @@ -8,7 +8,7 @@ import { TimeRange } from "../types_stream.ts"; import { OVar } from "../../jshelper/mod.ts"; import { BufferRange } from "../player.ts"; -export const TARGET_BUFFER_DURATION = 10 +export const TARGET_BUFFER_DURATION = 15 export const MIN_BUFFER_DURATION = 1 export interface AppendRange extends TimeRange { buf: ArrayBuffer, index: number, cb: () => void } diff --git a/web/script/player/track/mse.ts b/web/script/player/track/mse.ts index 066bbfd..9fa5e42 100644 --- a/web/script/player/track/mse.ts +++ b/web/script/player/track/mse.ts @@ -142,7 +142,7 @@ export class MSEPlayerTrack extends PlayerTrack { this.current_load = frag; // TODO why is appending so unreliable?! sometimes it does not add it this.source_buffer.changeType(track_to_content_type(this.active_format.value!.format, this.active_format.value!.container)); - this.source_buffer.timestampOffset = this.active_format.value !== undefined ? frag.start : 0 + this.source_buffer.timestampOffset = 0 // TODO send if relative PTS //this.active_format.value !== undefined ? frag.start : 0 console.log(`append track ${this.track_index}`); this.source_buffer.appendBuffer(frag.buf); } @@ -151,7 +151,8 @@ export class MSEPlayerTrack extends PlayerTrack { public debug(): OVar<HTMLElement> { const rtype = (t: string, b: BufferRange[]) => { const c = b.filter(r => r.status == t); - return `${c.length} range${c.length != 1 ? "s" : ""}, ${c.reduce((a, v) => a + v.end - v.start, 0).toFixed(2)}s` + // ${c.length} range${c.length != 1 ? "s" : ""} + return `${c.reduce((a, v) => a + v.end - v.start, 0).toFixed(2)}s` } return this.active_format.liftA2(this.buffered, (p, b) => e("pre", |