Wie kann ich BitmapData.draw mit NetStream.appendBytes verwenden?

8

Ich verwende NetStream.appendBytes (), um ein lokales Video (kein Server) in Adobe AIR abzuspielen. Ich möchte BitmapData.draw() verwenden, um ein Bild von der Videoausgabe zu machen, aber ich erhalte diesen Fehler:

  

Fehler # 2123: Sicherheits-Sandbox-Verletzung: BitmapData.draw: kann nicht auf Null zugreifen. Keine Richtliniendateien gewährt Zugriff.

Hier ist ein Beispielcode:

%Vor%

Dies ist nur der Beispielcode, der für eine Erklärung verwendet wird. Der Fehler tritt auf, wenn die getImage-Methode aufgerufen wird, während das Video abgespielt wird. Der Fehler erwähnt eine nicht gefundene Richtliniendatei. Da die Datei lokal geladen wird, gibt es nicht wirklich einen Platz für eine Richtliniendatei. Gibt es irgendwo eine Richtlinieneinstellung, die gesetzt werden muss oder ist das Feature BitmapData.draw bei Verwendung von appendBytes ? Nicht verfügbar?

    
Aaron 09.04.2011, 18:43
quelle

7 Antworten

1

Ich denke, eine andere Lösung besteht darin, _ns.play(path) zu verwenden und _ns.appendBytes() nicht zu verwenden.

    
yukoba 11.08.2011 02:18
quelle
0

Versuchen Sie, NetStream.checkPolicyFile = true zu setzen, bevor Sie die Funktion play() aufrufen.

So:

%Vor%

Was das checkPolicyFile -Flag tut, ist, dass es dem Host-SWF mitteilt, eine Richtliniendatei vom Server des geladenen SWF zu laden. Wenn Sie dieses Flag zum Ladezeitpunkt nicht angegeben haben, erhalten Sie SecurityError , wenn Sie versuchen, Pixeldaten aus dem geladenen Stream durch BitmapData.draw() zu erhalten.

Link zur Adobe-Ressource: Ссылка

    
Tjofras 09.04.2011 18:52
quelle
0

Ich habe eine Lösung, um den Sandbox-Fehler loszuwerden, wenn ich versuche, einen netstream.appendByte() Inhalt zu zeichnen.

Die SWF ruft eine Sandbox ab, weil sie nach einer Crossdomain-Datei an der von Ihnen angegebenen Adresse sucht :netstream.play(null) . Er sucht nach etwas, das es nicht gibt.

Nun, die Lösung besteht darin, eine gefälschte Video-URL wie " netstream.play(http://myserv.com/video.flv) " mit einer echten crossdomain-Datei abzuspielen und danach das gewünschte Video dank der appendBytes-Funktion zu laden.

Die SWF wird getäuscht!

So seltsam es klingt, es funktioniert für mich :-)

    
Pixel Expander 01.06.2011 14:07
quelle
0

Sie können keinen Snapshot von Video oder Audio aus einem rtmp-Stream erstellen, es sei denn, die serverseitigen Einstellungen StreamVideoSampleAccess oder StreamAudioSampleAccess sind auf true festgelegt oder wie dieser StreamVideoSampleAccess / StramVideoSampleAccess festgelegt. Ich habe keine Möglichkeit gefunden, dies zu tun, ohne Zugriff auf die Seite des FMS-Servers zu haben.

    
bolnad 05.08.2011 18:33
quelle
0

Platzieren Sie das Videoobjekt in einem MovieClip und verwenden Sie bit.draw(_movieclipInstanceName); anstelle des Videoobjekts. Ich hoffe, es funktioniert.

    
KielSoft 13.03.2012 16:21
quelle
0

Ich weiß, dass diese Frage wirklich alt ist ... aber es ist immer noch ein Problem, dem ich gerade gegenübergestanden habe und ich weiß, dass andere das auch tun werden ... Also wollte ich den Link zu der anderen Stack-Frage veröffentlichen, wo ich den Bug veröffentlicht habe Adobe und der Workaround, um es zum Laufen zu bringen.

Problemumgehung für einen Fehler bei einer doppelten Stack-Frage

    
Jason Reeves 26.03.2015 16:33
quelle
-1

Es sieht so aus, als ob Sie versuchen, die BitmapData.draw () -Methode für ein Video aufzurufen, das nicht geladen ist oder wenn das NetStream-Objekt null ist.

mögliche Fehlerbehebung: Warten Sie, bis NetStream.Buffer.Full NetStatus ausgelöst wird, bevor Sie draw ()

aufrufen     
FlashDictionary 23.05.2012 21:30
quelle