Hi All,

I would dearly appreciaty any light anyone could shed on this issue - I have 
run into a couple of Flash bugs that have stumped me for quite a while, and my 
deadline is aproaching fast.

Essentially, I would like to play back 3 reasonably high res videos (On2 VP6-S) 
simultaneously in one Flash App (using flash.video, netstream and netconnect - 
code only). Unfortunately, when I do this, the video playback drops a lot of 
frames, however, CPU usage does not go much above 50% - spread over both cores. 
I'm using a Core2Duo. If I play the same 3 videos simultaneously in 3 separate 
flash apps (FP10), they play much better (and use close to 100% CPU). I even 
tried creating it as an AIR app with 3 separate windows (NativeWindow), but 
that made little difference. I have lodged this as a bug via the Flash Bug 
Reporting System (http://bugs.adobe.com/jira/browse/FP-2341).

And yes, I do need to be doing something as crazy as this - it is for a pretty 
cool kiosk app, so I know what hardware will be used (and it has a good 
Graphics Card).

One promising workaround appeared to be playing back a single NetStream in 
multiple Video instances, as it is NetStream that does the decoding, so I could 
decode once and present it in 3 places. Two of my video objects are actually 
the same flv (on different monitors), so there would be a 33% saving right 
there. If necessary, I could encode both flvs into a single 1920x1200 flv (I've 
checked - it would play back ok) and then use video.mask to show the relevant 
bits.
However, another bug has been reported at 
http://bugs.adobe.com/jira/browse/FP-920 saying this does not work - Video in 
the object that last called attachNetStream(ns) will play, all others will 
freeze. They do mention a workaround that gets both videos to play - reset the 
size of freezed videos on ENTER_FRAME event. However, I cannot get this 
workaround to work - my first video is empty (not even frozen).

So there are a couple of things I would love any feedback on. Firstly, if 
anyone has insights on how I could get this to work. Secondly, if anyone could 
try the "multiple videos on one netStream with workaround" code below (simply 
copy, paste and point to a relevant flv) and let me know if it works and the 
versions of software they used, I'd be very thankful.

---------------Code Begins-------------
import flash.events.Event;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;

showRedrawRegions(true); // both the placeholders and the entire window redraws 
every frame.
// When only video1 is attached, only video1's region is redrawing
// When both videos are attached, both video's regions are redrawing, BUT 
video1 is empty.
trace ("Capabilities.version = " + Capabilities.version); // = WIN 10,0,22,91 
// in Flash CS4 10.0.2

//var nc:NetConnection = new NetConnection( null ); // Got Eror: 1137: 
Incorrect number of arguments. Expected no more than 0.
var nc:NetConnection = new NetConnection();
nc.connect(null);
// Connect nc here ...? Unnecessary in this case?
var ns:NetStream = new NetStream(nc);
ns.client = new Object(); // Simplest way to deal with cuePoints and metaData 
by doing nothing. For more, see 
http://blogs.adobe.com/pdehaan/2006/07/playing_back_flvs_with_actions_1.html
var stream:String = "test.flv";
var video1:Video = new Video(); // Defaults to size of 320x240
var video2:Video = new Video(); // Defaults to size of 320x240
video2.x = 320;
addChild(video1);
addChild(video2);

ns.play(stream);

video1.attachNetStream(ns);
video2.attachNetStream(ns);
// PROBLEM: Video in the object that last called attachNetStream(ns) will play, 
all others will freeze.
// See WORKAROUND below for solution:


//WORKAROUND to stop the first split stream from freezing:
addEventListener(Event.ENTER_FRAME, onEnterFrame);
function onEnterFrame(e:Event){
video1.width = 320;
video1.height = 240;
trace ("video1.videoWidth = " + video1.videoWidth);
trace ("video2.videoWidth = " + video2.videoWidth);
// When only video1 is attached, video1.videoWidth = 1920, video2.videoWidth = 0
// When both videos are attached, video1.videoWidth = 0, video2.videoWidth = 
1920
}
---------------Code Ends-------------

Letting me know what exact versions of the following software was used would 
help a lot:
- Windows/OS (e.g. XP SP3).
- App code was written in. (e.g. Flash CS4 IDE 10.0.2, Flash Develop 3.0.1).
- App code was compiled in. (e.g. Flash CS4 IDE 10.0.2, Flex SDK 3.4.0.6955).
- Type and Version of Flash Player used (e.g. Standalone Debug Flash Player 
v10,0,22,91).
The versions I used are listed above.


Lastly, for what it is work, I found three interesting/informative results, but 
they didn't help me:
- When only video1 is attached, video1.videoWidth = 1920, video2.videoWidth = 0
  When both videos are attached, video1.videoWidth = 0, video2.videoWidth = 1920
- When only video1 is attached, only video1's region is redrawing
  When both videos are attached, both video's regions are redrawing, BUT video1 
is empty.
- var nc:NetConnection = new NetConnection( null ); // Got Eror: 1137: 
Incorrect number of arguments. Expected no more than 0.
  So I had to change it to:
    var nc:NetConnection = new NetConnection();
    nc.connect(null);
  Does this mean my NetConnection class is different and maybe incompatible 
with this workaround?


Many, many thanks,

Eric

--
I am using the free version of SPAMfighter.
We are a community of 6 million users fighting spam.
SPAMfighter has removed 1346 of my spam emails to date.
Get the free SPAMfighter here: http://www.spamfighter.com/len

The Professional version does not have this message
_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to