Commit fe2fe860 authored by Anssi Piirainen's avatar Anssi Piirainen
Browse files

Merge pull request #179 from flowplayer/dev

3.2.17
parents 2e54765a 5b9ca458

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.
......@@ -6,3 +6,4 @@ dist
*.iml
flowplayer.swc
Flowplayer Unlimited license terms are available in this page:
http://flowplayer.org/download/licenses/license_unlimited.htm
\ No newline at end of file
http://flowplayer.org/license/unlimited.html
\ No newline at end of file
Version history:
3.2.17
------
- #75 set the child display list different when a gradient is set.
- The clip property 'bufferLength' now accepts decimal values, for example bufferLength: 0.2
- #121 XSS fix: Only load plugins and external config from the same domain as the player swf is loaded from
- Made it possible to tab out of the player and into the HTML page using the keyboard alone.
- Change links in the context menu and in the logos to point to http://flash.flowplayer.org
- Pausing a live stream now leaves the video frame visible #81
- Audio plugin is not loaded nor used when the the provider is set excplicitly in the clip to a non-audio value, for
example to 'http'
- Allow playing another instream clip while already playing one. Issue #131
- Fixed memory leaks related to repeatedly starting playback with the play() API method. #163
3.2.16
------
- new clip event onMetadataChange, dispatched for example when switching bitrate
Fixes:
- Shows logo in accelerated mode #20
- mid-rolls freeze if multiple providers are used #42
- onFire fired twice on replay #52
- rtmp + hw accel + instream clips lose video, or aspect ratio #44
- URL name parts containing semi-colons (;) should pass validation through linkUrl usage #53
- cuepoints fired multiple times with the bitrateselect plugin #50
- fix for dispatching onBegin in certain situations
- if onStart has been dispatched already prevent dispatching many onBegin events
3.2.15
------
- #15 fixes for #627, handle the display init on startup.
- #615 dispatch begin if in paused mode too early.
- #629 if start has been dispatched already prevent dispatching many begin events.
......@@ -10,11 +39,11 @@ Version history:
- #52 when replaying flag start has dispatched on the current clip.
- #44 fixes for #627 check if the stagevideo dimensions and positioning has changed to update the stage video mask with.
- unbinding and binding stage video events caused issues with instream playlists therefore has to be kept binded.
unbinded stage video events during seeking to prevent the mask repositioning.
- unbinded stage video events during seeking to prevent the mask repositioning.
- #53 update url filter to accomodate for pretty urls with semi colons.
- #50 if we have metadata already set it is being updated during seeks and switching, dispatch metadata change events instead.
3.2.15
3.2.14
------
- #614 when the clip ends if the next clip in the provider has a different provider close the provider stream.
- #627 only detach / attach the display on start events which causes issues in buffering events after a seek in stagevideo.
......
# you need to adjust following to point to your Flex SDK
flexdir=/Users/Api/flex_sdk_4.5.0.19786
# change following to point to .exe files when running on Windows
mxmlc_bin= ${flexbindir}/mxmlc
compc_bin= ${flexbindir}/compc
asdoc_bin= /Users/Api/flex_sdk_3/bin/asdoc
devkit-dir=../lib/devkit
plugins.dir=../plugins
lib.dir=../lib
site.dir=/Users/api/hyde/site
js.deploy.dir=${site.dir}/deploy/js
deploy.dir=${site.dir}/content/swf
#plugin.buildfiles=rtmp/build.xml
#
# 3.2.16
plugin.buildfiles=rtmp/build.xml,controls/build.xml,controls/build-tube.xml,controls/build-air.xml,controls/build-skinless.xml, \
sharing/build.xml,viralvideos/build.xml,bitrateselect/build.xml,bwcheck/build.xml,bwcheck/build-httpstreaming.xml \
httpstreaming/build.xml,menu/build.xml,pseudostreaming/build.xml
#
#plugin.buildfiles=analytics/build.xml,audio/build.xml,bwcheck/build.xml,bwcheck/build-httpstreaming.xml \
# captions/build.xml,content/build.xml,controls/build.xml,controls/build-tube.xml,controls/build-air.xml,controls/build-skinless.xml, \
# f4m/build.xml,httpstreaming/build.xml,pseudostreaming/build.xml,rtmp/build.xml,securestreaming/build.xml, \
# sharing/build.xml,slowmotion/build.xml,smil/build.xml,viralvideos/build.xml, \
# bitrateselect/build.xml,menu/build.xml,cluster/build.xml
# all plugins
allplugins.buildfiles=analytics/build.xml,audio/build.xml,bwcheck/build.xml,bwcheck/build-httpstreaming.xml \
captions/build.xml,content/build.xml,controls/build.xml,controls/build-tube.xml,controls/build-air.xml,controls/build-skinless.xml, \
f4m/build.xml,httpstreaming/build.xml,pseudostreaming/build.xml,rtmp/build.xml,securestreaming/build.xml, \
sharing/build.xml,slowmotion/build.xml,smil/build.xml,viralvideos/build.xml,securedrm/build.xml, \
bitrateselect/build.xml,menu/build.xml,cluster/build.xml
jsplugins.buildfiles=controls/build.xml,embed/build.xml,ipad/build.xml,playlist/build.xml,bitrateselect/build.xml
cloudfront.version=1.0
adsense.version=flowplayer.org-1.6.1
# for plugins that can be built inside the player
plugin-classes=${plugins.dir}/controls/src/actionscript ${lib.dir}/common/src/actionscript
#plugin-classes=${plugins.dir}/controls/src/actionscript ${plugins.dir}/pseudostreaming/src/actionscript \
# ${plugins.dir}/rtmp/src/actionscript \
# ${lib.dir}/common/src/actionscript
plugin-swc=${plugins.dir}/controls/src/flash ${plugins.dir}/pseudostreaming/lib
controls-dir=${plugins.dir}/controls
compiler.defines=
# following can usually be left as they are
flexbindir=${flexdir}/bin
flexlibsdir=${flexdir}/frameworks/libs
flashplayer_bin=
framerate=24
bgcolor=0xFFFFFF
width=500
height=350
# Flash Player targets
flash.use.10.1=true
flash.target.player=10.2.0
This diff is collapsed.
......@@ -47,7 +47,7 @@ package com.adobe.serialization.json {
* var myObject:Object = JSON.decode( jsonString );
* </code>
*/
public class JSON {
public class JSONforFP {
/**
......
......@@ -20,13 +20,14 @@
* THE SOFTWARE.
*/
package org.goasap.items {
import flash.utils.getTimer;
import flash.utils.getTimer;
import org.goasap.GoEngine;
import org.goasap.errors.EasingFormatError;
import org.goasap.events.GoEvent;
import org.goasap.interfaces.IPlayable;
import org.goasap.managers.LinearGoRepeater;
import org.goasap.managers.LinearGoRepeater;
/**
* Dispatched during an animation's first update after the delay
......@@ -262,13 +263,14 @@ package org.goasap.items {
}
public function set easing(type:Function):void {
if (_state==STOPPED) {
try {
//try {
if (type(1,1,1,1) is Number) {
_easing = type;
return;
}
} catch (e:Error) {}
throw new EasingFormatError();
//} catch (e:Error) {}
//#163 don't throw an error just because.
//throw new EasingFormatError();
}
}
......@@ -496,18 +498,25 @@ package org.goasap.items {
defaultDelay = 0;
if (isNaN(defaultDuration))
defaultDuration = 1;
try { this.easing = defaultEasing; }
catch (e1:EasingFormatError) { defaultEasing = easeOut; }
/*try { this.easing = defaultEasing; }
catch (e1:EasingFormatError) { defaultEasing = easeOut; } */
//#163 set default easing
this.easing = easeOut;
// set params
if (!isNaN(delay)) _delay = delay;
else _delay = defaultDelay;
if (!isNaN(duration)) _duration = duration;
else _duration = defaultDuration;
try { this.easing = easing; }
/*try { this.easing = easing; }
catch (e2:EasingFormatError) {
if (easing!=null) { throw e2; } // user passed invalid easing function
this.easing = defaultEasing;
}
}*/
//if (easing && easing)
//#163 set easing if enabled on the argument, not needed for normal Flowplayer animations.
if (easing!=null) this.easing = easing;
if (extraEasingParams) _extraEaseParams = extraEasingParams;
if (useRelative) this.useRelative = true;
if (useRounding) this.useRounding = true;
......
<?xml version="1.0" encoding="UTF-8"?>
<componentPackage>
<component id="Flowplayer" class="org.flowplayer.view.Flowplayer"/>
<component id="PropertyBinder" class="org.flowplayer.util.PropertyBinder" />
<component id="Arrange" class="org.flowplayer.util.Arrange" />
<component id="Assert" class="org.flowplayer.util.Assert" />
<component id="PluginEvent" class="org.flowplayer.model.PluginEvent" />
<component id="TextUtil" class="org.flowplayer.util.TextUtil" />
<component id="AbstractSprite" class="org.flowplayer.view.AbstractSprite" />
<component id="StyleableSprite" class="org.flowplayer.view.StyleableSprite" />
<component id="AutomationEngine" class="org.flowplayer.view.AnimationEngine" />
<component id="NetStreamControllingStreamProvider" class="org.flowplayer.controller.NetStreamControllingStreamProvider" />
<component id="Plugin" class="org.flowplayer.model.Plugin" />
<component id="PluginModel" class="org.flowplayer.model.PluginModel" />
<component id="DisplayPluginModel" class="org.flowplayer.model.DisplayPluginModel" />
<component id="ProviderPlugin" class="org.flowplayer.model.ProviderModel" />
<component id="GraphicsUtil" class="org.flowplayer.util.GraphicsUtil" />
<component id="URLUtil" class="org.flowplayer.util.URLUtil" />
<component id="Animation" class="org.flowplayer.view.AnimationEngine" />
<component id="Log" class="org.flowplayer.util.Log" />
<component id="JSON" class="com.adobe.serialization.json.JSON" />
<!--<component id="Log" class="org.flowplayer.view.FlowplayerComponent" />-->
</componentPackage>
<project name="Flowplayer release" default="release">
<property file="build.properties" />
<property file="${user.home}/fprelease.properties" />
<import file="../lib/devkit/remotecopy.xml"/>
<import file="build.xml"/>
<target name="release-core-resources">
<remotecopy bucketname="flowplayer-releases/flowplayer" keyfile="${keyfile}" pass="${remotepass}" >
<releasefiles>
<fileset dir="${dist-dir}">
<include name="${dist-name}"/>
<include name="${commercial-dist-name}"/>
<include name="${source-dist-name}"/>
<include name="${multidomain-dist-name}"/>
</fileset>
<fileset dir="${build-dir}">
<include name="${player-binary}"/>
<include name="${player-binary-versioned}"/>
<include name="${commercial-player-binary}"/>
<include name="${commercial-player-binary-versioned}"/>
</fileset>
</releasefiles>
</remotecopy>
<remotecopy bucketname="flowplayer-releases/flowplayer.devkit" keyfile="${keyfile}" pass="${remotepass}" >
<releasefiles>
<fileset dir="${dist-dir}">
<include name="${devkit-dist-name}"/>
</fileset>
</releasefiles>
</remotecopy>
<remotecopy bucketname="flowplayer-releases/swf" keyfile="${keyfile}" pass="${remotepass}">
<releasefiles>
<fileset dir="${build-dir}">
<!--<include name="${player-binary}"/>-->
<include name="${player-binary-versioned}"/>
<include name="${commercial-player-binary}"/>
<include name="${commercial-player-binary-versioned}"/>
</fileset>
</releasefiles>
</remotecopy>
</target>
<target name="upload-dev-core">
<remotecopy bucketname="flowplayer-releases/flowplayer" keyfile="${keyfile}" pass="${remotepass}" >
<releasefiles>
<fileset dir="${dist-dir}">
<include name="${dist-name-dev}"/>
<include name="${commercial-dist-name-dev}"/>
</fileset>
<fileset dir="${build-dir}">
<include name="${player-binary}"/>
<include name="${commercial-player-binary}"/>
</fileset>
</releasefiles>
</remotecopy>
<remotecopy bucketname="flowplayer-releases/swf" keyfile="${keyfile}" pass="${remotepass}">
<releasefiles>
<fileset dir="${build-dir}">
<!--<include name="${player-binary}"/>-->
<include name="${player-binary}"/>
<include name="${commercial-player-binary}"/>
</fileset>
</releasefiles>
</remotecopy>
</target>
<target name="release-core-resources-dev">
<remotecopy-dev remotedir="${swfremotedir}" keyfile="${keyfile}" pass="${remotepass}">
<releasefiles>
<fileset dir="${build-dir}">
<!--<include name="${player-binary}"/>-->
<include name="${player-binary-versioned}"/>
<include name="${commercial-player-binary}"/>
<include name="${commercial-player-binary-versioned}"/>
</fileset>
</releasefiles>
</remotecopy-dev>
</target>
<target name="zip-core-swfs">
<delete file="${dist-dir}/latest.zip" verbose="true"/>
<updatezip zip="${dist-dir}/latest.zip">
<zipfiles>
<fileset dir="${build-dir}">
<include name="flowplayer.swf"/>
<include name="flowplayer.commercial.swf"/>
</fileset>
</zipfiles>
</updatezip>
</target>
<target name="release-swf-zip">
<remotecopy bucketname="flowplayer-releases" keyfile="${keyfile}" pass="${remotepass}">
<releasefiles>
<fileset dir="${dist-dir}">
<include name="latest.zip"/>
</fileset>
</releasefiles>
</remotecopy>
</target>
<target name="release-apidoc">
<remotecopy bucketname="flowplayer-releases/asdoc-latest" keyfile="${keyfile}" pass="${remotepass}" >
<releasefiles>
<fileset dir="${apidoc-dir}" />
</releasefiles>
</remotecopy>
</target>
<target name="release-js-plugins">
<iterate-plugins target="release-remote" buildfiles="${jsplugins.buildfiles}" basedirectory="../js-plugins"/>
</target>
<target name="release" description="Release to S3" depends="prepare, dist, release-core-resources, release-js-plugins">
<iterate-plugins target="release-remote" />
<iterate-plugins target="write-filesize" buildfiles="${jsplugins.buildfiles}" basedirectory="../js-plugins"/>
<antcall target="zip-swfs" />
<antcall target="release-swf-zip" />
<antcall target="upload-release-files" />
</target>
<target name="upload-dev" description="Upload dev versions to S3, all plugins" depends="prepare, all-dist, upload-dev-core">
<iterate-plugins target="upload-dev-version" buildfiles="${allplugins.buildfiles}" />
<antcall target="zip-swfs" />
<antcall target="release-swf-zip" />
<antcall target="upload-release-files" />
</target>
<target name="release-dev" description="Release to the dev server" depends="prepare, dist, release-core-resources-dev">
<iterate-plugins target="release-remote-dev" />
</target>
<target name="zip-swfs" depends="zip-core-swfs">
<iterate-plugins target="zip-swfs" buildfiles="${allplugins.buildfiles}" />
</target>
<target name="upload-release-files" depends="generate-url-file, generate-release-yaml, deploy-release-yaml">
<remotecopy bucketname="flowplayer-releases/info" keyfile="${keyfile}" pass="${remotepass}" >
<releasefiles>
<fileset dir="${core-dir}/dist">
<include name="dist.html" />
<include name="releases.yaml" />
</fileset>
</releasefiles>
</remotecopy>
</target>
<target name="deploy-release-yaml" depends="generate-release-yaml">
<copy file="${core-dir}/dist/releases.yaml" todir="${site.dir}" />
</target>
<target name="generate-url-file" description="generates a text file with paths to plugin zip files in flowplayer.org">
<!--<property name="url-file-from-plugins" value="${basedir}/dist/dist.html" />-->
<property name="url-file" value="${basedir}/dist/dist.html" />
<delete file="${url-file}" />
<echo message="writing zip urls to ${url-file}" />
<echo file="${url-file}" append="true">&#60;a href="http://flowplayer-releases.s3.amazonaws.com/flowplayer/flowplayer.zip"&#62;flowplayer.zip&#60;/a&#62; &#60;br /&#62;
</echo>
<echo file="${url-file}" append="true">&#60;a href="http://flowplayer-releases.s3.amazonaws.com/flowplayer/flowplayer.commercial.zip"&#62;flowplayer.commercial.zip&#60;/a&#62; &#60;br /&#62;
</echo>
<echo file="${url-file}" append="true">&#60;a href="http://flowplayer-releases.s3.amazonaws.com/flowplayer/flowplayer-src.zip"&#62;flowplayer-src.zip&#60;/a&#62; &#60;br /&#62;
</echo>
<iterate-plugins target="write-zip-url" buildfiles="${plugin.buildfiles}" />
<tstamp>
<format property="build.time" pattern="MMMM dd yyyy hh:mm aa"
timezone="GMT" />
</tstamp>
<echo file="${url-file}" append="true">
&#60;br /&#62;
&#60;a href="http://flowplayer-releases.s3.amazonaws.com/latest.zip"&#62;latest.zip: All latest dev-version swf files in one zip&#60;/a&#62; &#60;br /&#62;
&#60;br /&#62;
Build time: ${build.time} GMT
</echo>
</target>
<target name="generate-release-yaml" description="Generates a YAML formatted file containing URLs to all released/uploaded plugins" depends="jsplugins">
<property name="yaml-file" value="${basedir}/dist/releases.yaml" />
<property name="urlbase" value="http://releases.flowplayer.org/" />
<delete file="${yaml-file}" />
<echo message="writing SWF urls to ${yaml-file}" />
<echo file="${yaml-file}" append="true" message="urls:">
</echo>
<echo file="${yaml-file}" append="true" message=" swf:">
</echo>
<echo file="${yaml-file}" append="true" message=" base: ${urlbase}">
</echo>
<echo file="${yaml-file}" append="true" message=" js:">
</echo>
<echo file="${yaml-file}" append="true" message=" base: ${urlbase}">
</echo>
<echo file="${yaml-file}" append="true" message=" zip:">
</echo>
<echo file="${yaml-file}" append="true" message=" base: ${urlbase}">
</echo>
<echo file="${yaml-file}" append="true" message="versions:">
</echo>
<echo file="${yaml-file}" append="true" message=" swf:">
</echo>
<echo file="${yaml-file}" append="true" message=" player: ${version-info}">
</echo>
<echo file="${yaml-file}" append="true" message=" commercial: ${version-info}">
</echo>
<iterate-plugins target="write-version" buildfiles="${allplugins.buildfiles}" />
<!-- 3rd party plugins -->
<echo file="${yaml-file}" append="true" message=" cloudfrontsignedurl: ${cloudfront.version}">
</echo>
<echo file="${yaml-file}" append="true" message=" adsense: ${adsense.version}">
</echo>
<echo file="${yaml-file}" append="true" message=" js:">
</echo>
<echo file="${yaml-file}" append="true" message=" player: ${flowplayer-js-version-info}">
</echo>
<iterate-plugins target="write-version" buildfiles="${jsplugins.buildfiles}" basedirectory="../js-plugins"/>
<echo file="${yaml-file}" append="true" message=" zip:">
</echo>
<echo file="${yaml-file}" append="true" message=" devkit: ${version-info}">
</echo>
<echo file="${yaml-file}" append="true" message=" flowplayer: ${version-info}">
</echo>
<echo file="${yaml-file}" append="true" message=" filesizes:">
</echo>
<iterate-plugins target="write-filesize" buildfiles="${allplugins.buildfiles}" />
<iterate-plugins target="write-filesize" buildfiles="${jsplugins.buildfiles}" basedirectory="../js-plugins"/>
</target>
</project>
\ No newline at end of file
......@@ -106,7 +106,7 @@ package org.flowplayer.view {
private function buildMenu(menu:ContextMenu):ContextMenu {
addItem(menu, new ContextMenuItem("About " +VersionInfo.versionInfo()+ "...", false, true), function(event:ContextMenuEvent):void {
navigateToURL(new URLRequest("http://flowplayer.org"), "_self");
navigateToURL(new URLRequest("http://flash.flowplayer.org"), "_self");
});
// 1-3 Required by the GPL license
// 1 copyright notice
......
......@@ -31,7 +31,7 @@ package org.flowplayer.view {
public static function validate(swfUrl:String, version:Array, configuredKeys:Object, externalInterfaceAvailable:Boolean):Boolean {
trace("using validator " + FlowplayerLicenseKey.id);
return FlowplayerLicenseKey.validate(swfUrl, version, configuredKeys, externalInterfaceAvailable);
return FlowplayerLicenseKey.validate(swfUrl, version, configuredKeys, (CONFIG::secondaryDomains).split(" "), externalInterfaceAvailable);
}
}
......
......@@ -286,14 +286,18 @@ package org.flowplayer.view {
private function startTimer():void {
_hideTimer = new Timer(_model.displayTime * 1000, 1);
_hideTimer.addEventListener(TimerEvent.TIMER_COMPLETE,
function(event:TimerEvent):void {
log.debug("display time complete");
hide(_model.fadeSpeed);
_hideTimer.stop();
});
_hideTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onHideComplete);
_hideTimer.start();
}
private function onHideComplete(event:TimerEvent):void
{
log.debug("display time complete");
hide(_model.fadeSpeed);
_hideTimer.reset();
_hideTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, onHideComplete);
_hideTimer = null;
}
CONFIG::freeVersion
public function setModel(model:Logo):void {
......@@ -306,7 +310,7 @@ package org.flowplayer.view {
_model.top = "20";
_model.right = "20";
_model.opacity = 0.3;
_model.linkUrl = "http://flowplayer.org";
_model.linkUrl = "http://flash.flowplayer.org";
log.debug("initial model dimensions " + _model.dimensions);
}
......
......@@ -57,6 +57,7 @@ package org.flowplayer.view {
private var _play:PlayButtonOverlay;
private var _rotation:RotatingAnimation;
private var _playDetectTimer:Timer;
private var _startTime:Number;
public function PlayButtonOverlayView(resizeToTextWidth:Boolean, play:PlayButtonOverlay, pluginRegistry:PluginRegistry) {
_resizeToTextWidth = resizeToTextWidth;
......@@ -464,10 +465,10 @@ package org.flowplayer.view {
private function bufferUntilStarted(event:ClipEvent = null):void {
if (event && event.isDefaultPrevented()) return;
startBuffering();
createPlaybackStartedCallback(stopBuffering);
createPlaybackStartedCallback();
}
private function createPlaybackStartedCallback(callback:Function):void {
private function createPlaybackStartedCallback():void {
log.debug("detectPlayback()");
if (! _player.isPlaying()) {
......@@ -479,24 +480,30 @@ package org.flowplayer.view {
return;
}
var time:Number = _player.status.time;
_startTime = _player.status.time;
_playDetectTimer = new Timer(200);
_playDetectTimer.addEventListener(TimerEvent.TIMER,
function(event:TimerEvent):void {
var currentTime:Number = _player.status.time;
log.debug("on detectPlayback() currentTime " + currentTime + ", time " + time);
if (Math.abs(currentTime - time) > 0.2) {
_playDetectTimer.stop();
log.debug("playback started");
callback();
} else {
log.debug("not started yet, currentTime " + currentTime + ", time " + time);
}
});
_playDetectTimer.addEventListener(TimerEvent.TIMER,onPlayDetect);
log.debug("doStart(), starting timer");
_playDetectTimer.start();
}
//#163 move play detect timer to external listener and clear when done.
private function onPlayDetect(event:TimerEvent):void
{
var currentTime:Number = _player.status.time;
log.debug("on detectPlayback() currentTime " + currentTime + ", time " + _startTime);
if (Math.abs(currentTime - _startTime) > 0.2) {
stopBuffering();
_playDetectTimer.stop();
_playDetectTimer.removeEventListener(TimerEvent.TIMER,onPlayDetect);