Copy link to clipboard
Copied
Hi all,
I'm trying to create a personalised video using the techniques described here: http://www.adobe.com/devnet/flash/articles/atv_personalized_video.html
I have created the video and tracking data in After Effects (CS5), converted the tracking data to Flash cue points and exported the .flv file. I can import the video into Flash (CS6) just fine and I can see all the cue point data however when I try to compile the Flash project, bearing in mind this is just an empty stage with an instance of FLVPlayback on it, I get the following errors:
VerifyError: Error #1107: The ABC data is corrupt, attempt to read out of bounds.
ReferenceError: Error #1065: Variable Icon is not defined.
ReferenceError: Error #1065: Variable FLVPlayback is not defined.
ReferenceError: Error #1065: Variable Main is not defined.
If I export the .flv without the cue point data I can import, compile and play the video without error.
I've had a look around and I've not really been able to find any information about this issue and don't have a clue where to start with it.
Any ideas?!
Copy link to clipboard
Copied
don't import the video.
use an flvplayback component to progressively download your video. ie, add an flvplayback component to the stage and assign its source in the properties panel or with actionscript.
Copy link to clipboard
Copied
Hi kglad,
Thanks for your reply. I'm not embedding the video in the swf, I've loaded it into an FLVPlayback component. This has been done on the stage and by assigning the video source in the properties panel.
Cheers,
Tom
Copy link to clipboard
Copied
Update:
I've found a workaround. I had a suspicion that this error might be due to an incompatibility between CS5 and CS6 so I installed Flash CS5 and tried the CS5 exported .flv which resulted in the same error. I then installed After Effects CS6 and tried re-exporting the .flv file which led me to find that AE CS6 has a bug whereby it fails to export .flv files with the flash cue point metadata as described here: http://forums.adobe.com/message/4791847
After tinkering around with AE and Flash I've found the following works:
1. Export flv from AE WITHOUT cue point metadata
2. In AE convert properties to markers
3. Run a modified version of Bob9743 script from the other thread (I will post the exact script I used later) to export cue point data from AE as XML in a format that Flash will read.
4. Open Flash, create an FLVPlayback with the exported flv
5. Import the cue point data into the FLVPlayback component from the XML
I've tested this and can confirm it works. Interestingly when I first tried this Flash failed to import the cue points complaining about a stack overflow, when I stripped the number of cue points down from around 3000 to around 1000 I was able to import without problem. I'm now thinking that this large number of cue points may have been the cause of the original problem.
Hope that helps someone!
Tom
Copy link to clipboard
Copied
Here is the script I used to export the markers as valid XML for Flash to import. Please note that this will export all markers from all layers so if, as I did, you have multiple 'versions' of your tracking data on different layers it will export the whole lot.
var comp = app.project.activeItem;
var XMLStart = "<?xml version='1.0' encoding='UTF-8' ?><FLVCoreCuePoints>";
var XMLEnd = "</FLVCoreCuePoints>";
var XMLTemp = "";
var XMLFinal = "";
var layerCount = comp.numLayers;
var layer = new Object;
var layerMarkers = new Object;
var markerCount = 0;
var curMarkerTime = 0;
var curMarkerName = "";
var curMarkerType = "";
var curMarkerXML = "";
//Layer markers
for(i=1; i<layerCount+1; i++) {
layer = comp.layer(i);
layerMarkers = layer.marker;
markerCount = layerMarkers.numKeys;
for(j=1; j<markerCount+1; j++) {
// get the parameters for this marker
var params = layerMarkers.keyValue(j).getParameters();
var XMLParam = "";
var cont = false;
// loop through parameters
for(param in params) {
// I added this conditional to strip out markers in my project which were superfluous
/*
if(params[param] == "410,230.5") {
var cont = true;
continue;
}
*/
// generate the XML for the parameter
XMLParam += "<Parameter>";
XMLParam += "<Name>" + param + "</Name>";
XMLParam += "<Value>" + params[param] + "</Value>";
XMLParam += "</Parameter>";
}
// if this is a superfluous marker then don't add it to the XML string, just go on to the next
if(cont) {
continue;
}
// get / set additional marker meta data
curMarkerTime = layerMarkers.keyTime(j) * 1000;
curMarkerName = layerMarkers.keyValue(j).cuePointName;
curMarkerType = "actionscript";
// assemble the full XML element for this cue point
curMarkerXML = "<CuePoint><Time>" + curMarkerTime + "</Time><Type>" + curMarkerType + "</Type><Name>" + curMarkerName + "</Name><Parameters>" + XMLParam + "</Parameters></CuePoint>";
XMLTemp += curMarkerXML;
}
}
//Comp markers
var tempText = comp.layers.addText("");
var tempSrc = tempText.text.sourceText;
tempSrc.expression = "thisComp.marker.numKeys";
markerCount = Number(tempSrc.value);
if(markerCount > 0) {
for (i=1; i<=markerCount; i++) {
tempSrc.expression = "thisComp.marker.key(" + i + ").time;";
curMarkerTime = Number(tempSrc.value) * 1000;
tempSrc.expression = "thisComp.marker.key(" + i + ").cuePointName;";
curMarkerName = String(tempSrc.value);
tempSrc.expression = "thisComp.marker.key(" + i + ").eventCuePoint;";
if(tempSrc.value == "true") {
curMarkerType = "event";
} else {
curMarkerType = "navigation";
}
curMarkerXML = "<CuePoint><Time>" + curMarkerTime + "</Time><Type>" + curMarkerType + "</Type><Name>" + curMarkerName + "</Name></CuePoint>";
XMLTemp += curMarkerXML;
}
}
tempText.remove();
//create output string
XMLFinal = XMLStart + XMLTemp + XMLEnd;
//Write file
var cueFile = File.saveDialog("Save the XML file", "XML:*.xml" );
cueFile.open("W");
cueFile.write(XMLFinal);
cueFile.close();
Copy link to clipboard
Copied
Really nice scipt.. thanks.
I just have one small problem.
if i use it for exporting tracking data markers, it seems to lag if i import it into flash, and try to track somthing (red box) onto the tracking area.
any ideas?
Regards Kim
Copy link to clipboard
Copied
Hi Again
Solved it!
it seems like Flash cant handle the masses of data if the Event-type is ActionScript. if i change it to "Event" it works fine.
i have made a little guide explaining the workaround: http://kim.thoeisen.dk/ae-cs6-flv-cue-point-export/
Thanks a lot for the Script!
Regards Kim