From 1695c63ca9a02fa2d056129b21353f759f620189 Mon Sep 17 00:00:00 2001 From: mangui Date: Wed, 8 Apr 2015 17:58:24 +0200 Subject: [PATCH] add fragment duration in HLSPlayMetrics --- examples/chromeless/index.html | 6 +++--- examples/libs/canvas.js | 3 +++ src/org/mangui/hls/event/HLSPlayMetrics.as | 4 +++- src/org/mangui/hls/model/Fragment.as | 1 + src/org/mangui/hls/stream/HLSNetStream.as | 10 +++++----- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/examples/chromeless/index.html b/examples/chromeless/index.html index 30aa0122..c21cac17 100644 --- a/examples/chromeless/index.html +++ b/examples/chromeless/index.html @@ -346,6 +346,8 @@

Test Videos

document.getElementById('mediaInfo').rows[Y_MAX_BUFFER].cells[X_MAX_BUFFER].innerHTML = api.getMaxBufferLength().toFixed(2); }, onVideoSize: function(instanceId, width, height) { + var event = {time : new Date() - startDate, type : "resize", name : width + 'x' + height}; + events.video.push(event); var state = api.getCapLeveltoStage(); if(!state) { var ratio = width / height; @@ -357,8 +359,6 @@

Test Videos

api.flashObject.height = height; var canvas = document.getElementById('buffered_c'); canvas.width = width; - var event = {time : new Date() - startDate, type : "reize", name : width + 'x' + height}; - events.video.push(event); } }, onComplete: function(instanceId) { @@ -446,7 +446,7 @@

Test Videos

refreshCanvas(); }, onFragmentPlaying: function(instanceId, playmetrics) { - var event = {time : new Date() - startDate, type : "playing frag", name : playmetrics.seqnum + '@' + playmetrics.level}; + var event = {time : new Date() - startDate, type : "playing frag", name : playmetrics.seqnum + '@' + playmetrics.level, duration : playmetrics.duration*1000}; events.video.push(event); }, onPosition: function(instanceId, timemetrics) { diff --git a/examples/libs/canvas.js b/examples/libs/canvas.js index 962dc453..c85f1eda 100644 --- a/examples/libs/canvas.js +++ b/examples/libs/canvas.js @@ -432,6 +432,9 @@ //draw event rectangle x_start = networkChartStart + networkChartWidth*(event.time-minTime)/(maxTime-minTime); if(event.duration) { + if(event.type && event.type.indexOf("playing frag") !==-1) { + ctx.fillStyle = "green"; + } x_w = networkChartWidth*event.duration/(maxTime-minTime); } else { x_w = 1; diff --git a/src/org/mangui/hls/event/HLSPlayMetrics.as b/src/org/mangui/hls/event/HLSPlayMetrics.as index 28471927..f5b11e60 100644 --- a/src/org/mangui/hls/event/HLSPlayMetrics.as +++ b/src/org/mangui/hls/event/HLSPlayMetrics.as @@ -7,16 +7,18 @@ package org.mangui.hls.event { public var level : int; public var seqnum : int; public var continuity_counter : int; + public var duration : Number; public var audio_only : Boolean; public var program_date : Number; public var video_width : int; public var video_height : int; public var tag_list : Array; - public function HLSPlayMetrics(level : int, seqnum : int, cc : int, audio_only : Boolean, program_date : Number, video_width : int, video_height : int, tag_list : Array) { + public function HLSPlayMetrics(level : int, seqnum : int, cc : int, duration : Number, audio_only : Boolean, program_date : Number, video_width : int, video_height : int, tag_list : Array) { this.level = level; this.seqnum = seqnum; this.continuity_counter = cc; + this.duration = duration; this.audio_only = audio_only; this.program_date = program_date; this.video_width = video_width; diff --git a/src/org/mangui/hls/model/Fragment.as b/src/org/mangui/hls/model/Fragment.as index 159ff796..ee07a3e3 100644 --- a/src/org/mangui/hls/model/Fragment.as +++ b/src/org/mangui/hls/model/Fragment.as @@ -64,6 +64,7 @@ package org.mangui.hls.model { data.writeObject(this.level); data.writeObject(this.seqnum); data.writeObject(this.continuity); + data.writeObject(this.duration); data.writeObject(this.program_date); data.writeObject(!this.data.video_found); data.writeObject(this.data.video_width); diff --git a/src/org/mangui/hls/stream/HLSNetStream.as b/src/org/mangui/hls/stream/HLSNetStream.as index 2e85e6fd..9bd1a295 100644 --- a/src/org/mangui/hls/stream/HLSNetStream.as +++ b/src/org/mangui/hls/stream/HLSNetStream.as @@ -23,9 +23,9 @@ package org.mangui.hls.stream { import org.mangui.hls.utils.Log; } /** Class that overrides standard flash.net.NetStream class, keeps the buffer filled, handles seek and play state - * + * * play state transition : - * FROM TO condition + * FROM TO condition * HLSPlayStates.IDLE HLSPlayStates.PLAYING_BUFFERING play()/play2()/seek() called * HLSPlayStates.PLAYING_BUFFERING HLSPlayStates.PLAYING buflen > minBufferLength * HLSPlayStates.PAUSED_BUFFERING HLSPlayStates.PAUSED buflen > minBufferLength @@ -67,7 +67,7 @@ package org.mangui.hls.stream { super.client = _client; }; - public function onHLSFragmentChange(level : int, seqnum : int, cc : int, audio_only : Boolean, program_date : Number, width : int, height : int, ... tags) : void { + public function onHLSFragmentChange(level : int, seqnum : int, cc : int, duration : Number, audio_only : Boolean, program_date : Number, width : int, height : int, ... tags) : void { CONFIG::LOGGING { Log.debug("playing fragment(level/sn/cc):" + level + "/" + seqnum + "/" + cc); } @@ -79,7 +79,7 @@ package org.mangui.hls.stream { Log.debug("custom tag:" + tags[i]); } } - _hls.dispatchEvent(new HLSEvent(HLSEvent.FRAGMENT_PLAYING, new HLSPlayMetrics(level, seqnum, cc, audio_only, program_date, width, height, tag_list))); + _hls.dispatchEvent(new HLSEvent(HLSEvent.FRAGMENT_PLAYING, new HLSPlayMetrics(level, seqnum, cc, duration, audio_only, program_date, width, height, tag_list))); } // function is called by SCRIPT in FLV @@ -303,7 +303,7 @@ package org.mangui.hls.stream { } _streamBuffer.seek(position); _setSeekState(HLSSeekStates.SEEKING); - /* if HLS was in paused state before seeking, + /* if HLS was in paused state before seeking, * switch to paused buffering state * otherwise, switch to playing buffering state */