/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mangui.osmf.plugins.traits { import org.mangui.hls.HLS; import org.mangui.hls.event.HLSEvent; import org.mangui.hls.constant.HLSSeekStates; import org.osmf.traits.SeekTrait; import org.osmf.traits.TimeTrait; CONFIG::LOGGING { import org.mangui.hls.utils.Log; } public class HLSSeekTrait extends SeekTrait { private var _hls : HLS; public function HLSSeekTrait(hls : HLS, timeTrait : TimeTrait) { CONFIG::LOGGING { Log.debug("HLSSeekTrait()"); } super(timeTrait); _hls = hls; _hls.addEventListener(HLSEvent.SEEK_STATE, _stateChangedHandler); } override public function dispose() : void { CONFIG::LOGGING { Log.debug("HLSSeekTrait:dispose"); } _hls.removeEventListener(HLSEvent.SEEK_STATE, _stateChangedHandler); super.dispose(); } /** * @private * Communicates a seeking change to the media through the NetStream. * @param newSeeking New seeking value. * @param time Time to seek to, in seconds. */ override protected function seekingChangeStart(newSeeking : Boolean, time : Number) : void { if (newSeeking) { CONFIG::LOGGING { Log.info("HLSSeekTrait:seekingChangeStart(newSeeking/time):(" + newSeeking + "/" + time + ")"); } _hls.stream.seek(time); } super.seekingChangeStart(newSeeking, time); } /** state changed handler **/ private function _stateChangedHandler(event : HLSEvent) : void { if (seeking && event.state != HLSSeekStates.SEEKING) { CONFIG::LOGGING { Log.debug("HLSSeekTrait:setSeeking(false);"); } setSeeking(false, timeTrait.currentTime); } } } }