PDA

Volledige versie bekijken : SWF genereren voor FLV


Tosti82
%Europe/Berlin %503 %2010, 13:05
Hallo Allemaaltjes,


Ik ben op zoek naar een mogelijkheid om vanuit een flashpagina een andere swf te genereren.

Wat ik graag precies zou willen hebben is dat ik vanuit mn bestaande flashfile een FLV kan pakken(Waarschijnlijk met fileReference) en dat hij dan aan de hand van het formaat van de FLV een nieuwe SWF aanmaakt. deze SWF zal idealiter het formaat hebben als de FLV.
Het mooiste zou zijn als ik deze swf ook nog kan opslaan.

Is dit mogelijk?



Groet,
Tosti(bakker)

cornedor
%Europe/Berlin %523 %2010, 13:34
hier word uitgelegd hoe je een mp3 naar een swf kunt converten met as3: http://blog.debit.nl/2009/02/mp3-to-swf-converter-in-actionscript-3/

Jan
%Europe/Berlin %586 %2010, 15:04
In principe kan het wel. Je moet een actionscript library vinden die swf's en flv's kan maken.
Voor het browsen naar en opslaan van lokale files heb je wel FlashPlayer10 nodig.

In bijlage een simpel voorbeeldje:
http://www.haxer.be/flv2swf/FLV2SWF.zip

Ik heb de swc uit hxswfml ervoor gebruikt:
http://code.google.com/p/hxswfml/

package
{
import be.haxer.hxswfml.VideoWriter;
import haxe.io.Bytes;

import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.text.*;
import flash.utils.*;

public class Main extends Sprite
{
var btn:MovieClip;
var fr:FileReference;
var swf:ByteArray;

public function Main()
{
fr = new FileReference();
fr.addEventListener(Event.SELECT, onFileSelect);
fr.addEventListener(Event.COMPLETE, onLoadComplete);

btn = createButton();
addChild(btn);
btn.addEventListener(MouseEvent.CLICK, selectFile);
}
function selectFile(event:MouseEvent)
{
btn.removeEventListener(MouseEvent.CLICK, selectFile);
fr.browse([new FileFilter("flash video (*.flv)","*.flv")]);
}
function onFileSelect(event:Event)
{
btn.tf.text= "Please wait..."
fr.load();
}
function onLoadComplete(event:Event)
{
var writer = new VideoWriter();
writer.write(Bytes.ofData(fr.data));
swf = writer.getSWF();

btn.tf.text="save flv";
btn.addEventListener(MouseEvent.CLICK, saveFile);
}
function saveFile(event:MouseEvent)
{
btn.removeEventListener(MouseEvent.CLICK, saveFile);
btn.addEventListener(MouseEvent.CLICK, selectFile);
new FileReference().save(swf,'output.swf');
}
function createButton():MovieClip
{
btn = new MovieClip();
btn.graphics.lineStyle(2,1);
btn.graphics.beginFill(0xEEEEEE, 1);
btn.graphics.drawRoundRect(0, 0, 100, 20, 10, 10);

var tf = new TextField();
tf.text = 'Select FLV';
tf.autoSize = TextFieldAutoSize.LEFT
tf.x = (btn.width - tf.width)/2;
tf.y = (btn.height - tf.height)/2;
btn.addChild(tf);
btn.mouseChildren = false;
btn.buttonMode = true;
btn.tf = tf;
return btn;
}
}
}

Jan

Tosti82
%Europe/Berlin %612 %2010, 15:42
Hoi Adnez,


Wat een mooi script zeg. Dit is precies wat ik zoek. Nu zelf nog wat controls en scrubbertje maken. Klopt het dat hij nu automatisch het formaat van de FLV aanhoud?

Ook lukte het mij om 2x "flv2swf.swf" te runnen en een flv te pakken en naar swf om te toveren.

Nu krijg ik een foutmelding:

Eof
at haxe.io::BytesInput/readUInt16()[C:\Program Files\Motion-Twin\haxe/std/haxe/io/BytesInput.hx:128]
at be.haxer.hxswfml::VideoWriter/parse()[src/be/haxer/hxswfml/VideoWriter.hx:118]
at be.haxer.hxswfml::VideoWriter/write()[src/be/haxer/hxswfml/VideoWriter.hx:154]
at Main/onLoadComplete()[C:\Documents and Settings\jan\Desktop\FLV2SWF\src\Main.as:41]

Wat kan ik hieraan doen?


Groet,
Tosti

Jan
%Europe/Berlin %764 %2010, 19:20
Mijn script was meer als voorbeeld dat het wel degelijk kan, maar het ondersteunt niet alle codecs die je in een flv kan terugvinden.
Het ondersteunt On2 VP6, On2VP6 with alpha en Sorenson Spark (Sorenson H.263) voor video en enkel mp3 voor audio. Dat is(was) het meest voorkomende en dus genoeg voor mijn doel in hxswfml.

Wat kan ik hieraan doen?
Het is open source, dus je kan er zelf mee aan de slag.
Als je de flv die niet werkt ergens online hebt wil ik er ook wel eens naar kijken waar het concreet fout loopt.
Misschien is ffmpeg een iets betrouwbaardere oplossing in jouw geval, maar dat moet je dan wel server side draaien en flv/swf data dus uitwisselen tussen flash en php bijvoorbeeld.

Jan