Zurück   Flashforum > Flex und AIR > Flex programmieren

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-04-2011, 11:20   #1 (permalink)
EventDispatcher
 
Registriert seit: Jun 2003
Ort: Berlin
Beiträge: 47
Ein Video aufteilen

Hallo,

kann mir wer sagen ob es irgendwie möglich ein Video zur Laufzeit zu zerteilen/-schneiden und die einzelnen Teile getrennt darzustellen? Also das Video soll vorher nicht bearbeitet werden.

Ich habe zB ein Video welches ich darstelle und möchte, sagen wir mal, die obere Hälfte darstellen und rechts daneben die untere hälfte. Geht das mit copyPixel(), Pixel Bender etc???

Grüße
a-tom
__________________
Grüße aus der Signatur...

.oO°ºo. Never Touch a Running System .oO°ºo.oº°Oo. Geht nicht gibt's nicht! .oº°Oo.
a-tom ist offline   Mit Zitat antworten
Alt 12-04-2011, 11:29   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Man kann Videos (wie alle anderen DisplayObjects auch) mit der Methode draw (auch in Ausschnitten) in beliebig viele BitmapDatas. Wenn man dieses Script bei Event.ENTER_FRAME ausführt lassen sich so auch parrallel abspielende aber räumlich getrennte Video-Fragmente erzeugen.
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 12-04-2011, 13:48   #3 (permalink)
EventDispatcher
 
Registriert seit: Jun 2003
Ort: Berlin
Beiträge: 47
Vielen Dank für die Antwort

Dann werde ich das mal angehen, wenn wer noch Ideen hat... immer her damit
__________________
Grüße aus der Signatur...

.oO°ºo. Never Touch a Running System .oO°ºo.oº°Oo. Geht nicht gibt's nicht! .oº°Oo.
a-tom ist offline   Mit Zitat antworten
Alt 26-04-2011, 09:22   #4 (permalink)
EventDispatcher
 
Registriert seit: Jun 2003
Ort: Berlin
Beiträge: 47
Meine Idee mit copyPixels war gar nicht so schlecht, jetzt funktioniert es In onEnterFrame mit draw das Video aktualisieren und dann Teile per copyPixels kopieren. Das Gute daran, man kann gleichzeitig Filter nutzen...

Habe das Ganze jetzt in AS3 mit Eclipse/FDT und OSMF (1.5) umgesetzt da es mit Flex nicht auf anhieb funktionieren wollte.
__________________
Grüße aus der Signatur...

.oO°ºo. Never Touch a Running System .oO°ºo.oº°Oo. Geht nicht gibt's nicht! .oº°Oo.
a-tom ist offline   Mit Zitat antworten
Alt 10-05-2011, 14:05   #5 (permalink)
EventDispatcher
 
Registriert seit: Jun 2003
Ort: Berlin
Beiträge: 47
Ich erstelle meine BitmapData für links, rechts und ein internes welches nicht abgebildet wird.

Code:
        private var _internBitmap : BitmapData = new BitmapData(videoW,videoH,false,0x000000);
	private var _LBitmapData: BitmapData = new BitmapData(videoW/2,videoH,false,0x000000);
	private var _LBitmap : Bitmap = new Bitmap(_LBitmapData);
	private var _RBitmapData: BitmapData = new BitmapData(videoW/2,videoH,false,0x000000);
	private var _RBitmap : Bitmap = new Bitmap(_RBitmapData);
Im onEnterFrame aktualisiere ich das interne und kopiere die linke und rechte hälfte in die sichtbaren Bitmaps... Soweit so gut und es funktioniert mit Streams von einem Wowza-Streamingserver und mit lokalen Files...

Code:
private function onEnterFrame(event : Event) : void {
	// Unsichtbares Video aktualisieren
	try
	{
	   _internBitmap.draw(mediaContainer);
	}
	catch( se : SecurityError) { 
	   trace(se);
	}  
	// Linke und rechte Seite des Videos aktualisieren
	_LBitmapData.copyPixels(_internBitmap, new Rectangle(0,0,videoW/2,videoH), new Point(0,0));
	_RBitmapData.copyPixels(_internBitmap, new Rectangle(videoW/2,0,videoW,videoH), new Point(0,0));
}
Mein Problem ist, ich bekomme es nicht hin ein Livestream zu kopieren da wahrscheinlich die interne BitmapData nicht aktualisiert wird... Woran liegt das und hatte jemand vielleicht schon einmal das Problem??? Der Livestream wird aber übertragen und ich habe ihn auch schon anzeigen lassen nebenbei...
__________________
Grüße aus der Signatur...

.oO°ºo. Never Touch a Running System .oO°ºo.oº°Oo. Geht nicht gibt's nicht! .oº°Oo.

Geändert von a-tom (10-05-2011 um 14:10 Uhr)
a-tom ist offline   Mit Zitat antworten
Alt 17-05-2011, 13:19   #6 (permalink)
EventDispatcher
 
Registriert seit: Jun 2003
Ort: Berlin
Beiträge: 47
Folgender Fehler kommt... Ich weiß keine Lösung, eine crossdomain.xml wird geladen...

Code:
SecurityError: Error #2123: Verletzung der Sicherheits-Sandbox:
BitmapData.draw: file:///...Player.swf kann nicht auf rtmp://x.x.x.x:1935/live zugreifen.
Es haben keine Richtliniendateien Zugriff gewährt.
__________________
Grüße aus der Signatur...

.oO°ºo. Never Touch a Running System .oO°ºo.oº°Oo. Geht nicht gibt's nicht! .oº°Oo.

Geändert von a-tom (18-05-2011 um 09:55 Uhr)
a-tom ist offline   Mit Zitat antworten
Alt 18-05-2011, 09:36   #7 (permalink)
EventDispatcher
 
Registriert seit: Jun 2003
Ort: Berlin
Beiträge: 47
DIE LÖSUNG

Es liegt nicht an Flash/Flex selber sondern man muss dem FMS/Wowza sagen das er dem Flashplayer erlaubt snapshots vom Stream zu machen.

Das geschieht in der Application.xml im conf/live Verzeichnis (oder wie es auch immer genannt wird bei Euch)...

Die sieht standartmäßig so aus an der Stelle <Client>

Code:
		<Client>
			<IdleFrequency>-1</IdleFrequency>
			<Access>
				<StreamReadAccess>*</StreamReadAccess>
				<StreamWriteAccess>*</StreamWriteAccess>
				<StreamAudioSampleAccess></StreamAudioSampleAccess>
				<StreamVideoSampleAccess></StreamVideoSampleAccess>
				<SharedObjectReadAccess>*</SharedObjectReadAccess>
				<SharedObjectWriteAccess>*</SharedObjectWriteAccess>
			</Access>
		</Client>
Folgende Stellen ändert man ab
Code:
				<StreamAudioSampleAccess>*</StreamAudioSampleAccess>
				<StreamVideoSampleAccess>*</StreamVideoSampleAccess>
...also nur zwei Sternchen

Dann den FMS/Wowza neu starten und fertig... Es geht!!!

Jetzt geht auch BitmapData.draw auf Livestreams *spring in die Luft*

PS: Ich habe alles Mögliche in Flash/Flex probiert, nichts hat geklappt... Das diese Richtliniendatei die Application.xml ist, bzw. die Konfiguration des Streamingservers, kann ja keiner wissen. Also gibt es mehr als nur die crossdomain.xml zu beachten...
Jetzt kann ich wieder sagen "Geht nicht gibt's nicht!" *puhhh*
__________________
Grüße aus der Signatur...

.oO°ºo. Never Touch a Running System .oO°ºo.oº°Oo. Geht nicht gibt's nicht! .oº°Oo.

Geändert von a-tom (18-05-2011 um 09:59 Uhr)
a-tom ist offline   Mit Zitat antworten
Alt 18-05-2011, 13:35   #8 (permalink)
Neuer User
 
Benutzerbild von andrelehnert
 
Registriert seit: Oct 2007
Ort: Kölle
Beiträge: 1.231
Hi,
Läuft zwar alles, aber hier mal ne Klasse, die ein Video in Raster beliebiger Anzahl (Performance hält auf meinem Rechner bis ca 1200 Tiles) zerschneidet... Kann man sicher alles noch weiter optimieren
PHP-Code:
package 
{
    
import flash.display.Bitmap;
    
import flash.display.BitmapData;
    
import flash.display.Sprite;
    
import flash.events.AsyncErrorEvent;
    
import flash.events.Event;
    
import flash.events.NetStatusEvent;
    
import flash.geom.Point;
    
import flash.geom.Rectangle;
    
import flash.media.Video;
    
import flash.net.NetConnection;
    
import flash.net.NetStream;
    
import flash.utils.Dictionary;
    
/**
     * ...
     * @author al
     */
    
public class Main extends Sprite     
    
    
{    
        private var 
videoUrl:String "demo.f4v"
        
private var numTilesX:int 6;
        private var 
numTilesY:int 3;
        private var 
videoWidth:int 720;
        private var 
videoHeight:int 576;    
        private var 
distanceX:int 12;
        private var 
distanceY:int 9;
        private var 
nc:NetConnection;
        private var 
dict:Dictionary = new Dictionary();
        private var 
ns:NetStream;
        private var 
cont:Sprite = new Sprite();
        private var 
vid:Video = new Video();
        private var 
bmpDataVector:Vector.<BitmapData> = new Vector.<BitmapData>();
        private var 
bmpVector:Vector.<Bitmap> = new Vector.<Bitmap>();
        private var 
numTiles:int numTilesX numTilesY;;
        private var 
tileWidth:int int(videoWidth numTilesX);
        private var 
tileHeight:int int(videoHeight numTilesY);
    
        public function 
Main():void 
        
{
            if (
stageinit();
            else 
addEventListener(Event.ADDED_TO_STAGEinit);
        }
        
        private function 
init(e:Event null):void 
        
{            
            
removeEventListener(Event.ADDED_TO_STAGEinit);
            
iniNetConnection();
            
iniVideo();
            
iniVideoTiles();
        }
        private function 
iniNetConnection():void 
        
{
            
nc = new NetConnection(); 
            
nc.connect(null);            
        }
        private function 
iniVideo():void 
        
{    
            
ns = new NetStream(nc); 
            
ns.client this;
            
ns.addEventListener(AsyncErrorEvent.ASYNC_ERRORasyncErrorHandler);
            
ns.addEventListener("netStatus"netStatusHandler);
            
vid.attachNetStream(ns); 
            
cont.addChild(vid);            
            
//ns.bufferTime = 5;
            
ns.play(videoUrl);
        }
        private function 
iniVideoTiles():void 
        
{
            for (var 
i:int 0numTilesXi++)             {
                for (var 
j:int 0numTilesYj++) 
                {
                    var 
bmpData:BitmapData = new BitmapData(tileWidthtileHeightfalse0xCC0000);
                    var 
bmp:Bitmap = new Bitmap(bmpData);
                    var 
dictObj:Object = new Object();
                    
dictObj.bmpData bmpData;
                    
dictObj.xPos =int(videoWidth numTilesX);
                    
dictObj.yPos =int (videoHeight numTilesY);
                    
bmp.* (tileWidth +distanceX);
                    
bmp.* (tileHeight+distanceY);
                    
dict[bmpData] = dictObj;    
                    
bmpDataVector.push(bmpData);
                    
bmpVector.push(bmp);
                    
addChild(bmp);
                }            
            }
            
numTiles bmpDataVector.length;
            
            
cont.addEventListener(Event.ENTER_FRAMEupdateTiles);
        }        
        
        private function 
updateTiles(e:Event):void 
        
{
            var 
videoBmpData:BitmapData = new BitmapData(videoWidthvideoHeightfalse0x000000);
            
videoBmpData.draw(cont);
            for (var 
i:int 0numTilesi++) 
            {    var 
tileBmpData:BitmapData bmpDataVector[i];
                var 
xPos:int dict[tileBmpData].xPos;
                var 
yPos:int dict[tileBmpData].yPos;
                
                
tileBmpData.copyPixels(videoBmpData, new Rectangle(xPosyPostileWidthtileHeight), new Point(00));;
                
//bmpVector[i].rotationX++;
            
}
            
videoBmpData.dispose();
            
videoBmpData null;
        }
        
        private function 
asyncErrorHandler(event:AsyncErrorEvent):void 
        

            
// ignore error 
        
}
        private function 
netStatusHandler(e:NetStatusEvent):void
        
{                            
                
//trace(e.info.code);
                
switch(e.info.code
                {
                    case 
"NetStream.Play.Start":
                        
vid.width videoWidth;
                        
vid.height videoHeight;                
                    break;
                    case 
"NetStream.Buffer.Full":
                        
//
                    
break;                
                }            
        }
        
        public function 
onMetaData(e:Object):void {
            
//trace("META : " + e);            
        
}        
    }    

LG ANdré
__________________
Die Hoffnung stirbt zuletzt.
Aber sie stirbt.
andrelehnert ist offline   Mit Zitat antworten
Alt 20-07-2011, 08:28   #9 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 106
Zitat:
Zitat von a-tom Beitrag anzeigen
DIE LÖSUNG

Es liegt nicht an Flash/Flex selber sondern man muss dem FMS/Wowza sagen das er dem Flashplayer erlaubt snapshots vom Stream zu machen.

Das geschieht in der Application.xml im conf/live Verzeichnis (oder wie es auch immer genannt wird bei Euch)...

Die sieht standartmäßig so aus an der Stelle <Client>

Code:
		<Client>
			<IdleFrequency>-1</IdleFrequency>
			<Access>
				<StreamReadAccess>*</StreamReadAccess>
				<StreamWriteAccess>*</StreamWriteAccess>
				<StreamAudioSampleAccess></StreamAudioSampleAccess>
				<StreamVideoSampleAccess></StreamVideoSampleAccess>
				<SharedObjectReadAccess>*</SharedObjectReadAccess>
				<SharedObjectWriteAccess>*</SharedObjectWriteAccess>
			</Access>
		</Client>
Folgende Stellen ändert man ab
Code:
				<StreamAudioSampleAccess>*</StreamAudioSampleAccess>
				<StreamVideoSampleAccess>*</StreamVideoSampleAccess>
...also nur zwei Sternchen

Dann den FMS/Wowza neu starten und fertig... Es geht!!!

Jetzt geht auch BitmapData.draw auf Livestreams *spring in die Luft*

PS: Ich habe alles Mögliche in Flash/Flex probiert, nichts hat geklappt... Das diese Richtliniendatei die Application.xml ist, bzw. die Konfiguration des Streamingservers, kann ja keiner wissen. Also gibt es mehr als nur die crossdomain.xml zu beachten...
Jetzt kann ich wieder sagen "Geht nicht gibt's nicht!" *puhhh*
das hört sich sehr gut an ... weißt du auch wie das ganze für den Red5 aussieht? Habe nämlich genau die gleiche Fehlermeldung beim Red5 und weiß nich genau wo ich da diese Anpassungen machen kann, weil es diese Application.xml bei mir nicht gibt :-/

Unabhängig davon: Brauch ich denn die Crossdomain.xml überhaupt noch, wenn ich diese Richtlinien auf dem Red5 selbst ändere?

Gruß, Manu
le_unam ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Video: aufteilen? salt Video 1 29-04-2010 16:52
[Flash CS3] In Seiten aufteilen Firemice Flash Einsteiger 1 26-04-2010 15:08
Video in Ausschnitte aufteilen labr1005 ActionScript 3 2 03-11-2009 18:11
Bild aufteilen Mischap ActionScript 1 2 08-05-2004 15:45
video aufteilen aber überall sichtbar bupermann Flash MX 3 04-08-2003 12:46


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:04 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele