<?xml version="1.0" encoding="UTF-8" ?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
  
      http://www.apache.org/licenses/LICENSE-2.0
    	  
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
  
-->
<library>

<!---
    The playBackVideoStream is used in the recording playerback to show the video
 -->
<class name="playBackVideoStream" extends="baseVideoStream" bgcolor="0x000000" visibility="hidden">
    
    <attribute name="timerDelegate" value="null"/>
    <attribute name="timerDelegateStarted" value="false" type="boolean"/>
    
    <handler name="oninit">
        this.timerDelegate = new LzDelegate( this, "calcProgressBar" );
    </handler>
    
    <handler name="onclick">
        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'togglePlayRecordingStream');
    </handler>
    
    <method name="playRecordingStream" args="streamName,delay">
        this.playStream(streamName,delay);
        this.timerDelegateStarted = true;
        lz.Timer.addTimer( this.timerDelegate , 1000 );
    </method>
    
    <method name="stopRecording">
        this._stop();
        lz.Timer.removeTimer(this.timerDelegate);
        this.timerDelegateStarted = false;
    </method>
    
    <handler name="onNetStatus" args="info">
        if ($debug) Debug.write("onNetStatus ",info);
        if (info.code ==  "NetStream.Play.Stop" ) {
            canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'stopRecordingStream');
        }
    </handler>
    <handler name="onMetaDataEvent" args="info">
        if ($debug) Debug.write("onMetaData ",info);
    </handler>
    
    <method name="calcProgressBar" args="tObjRef">
        if ($debug) Debug.write("calcProgressBar updateRecordingStreamTime",this._ns.time)
        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'updateRecordingStreamTime',this._ns.time);
        if (this.timerDelegateStarted) {
            lz.Timer.addTimer( this.timerDelegate , 1000 );
        }
    </method>
    
</class>	

</library>