I have a flash video file (FLV) stored in the ByteArray object and would like to play this video. Is there any way to achieve it? Maybe using Alchemy?
Thank you!
I will not ask Why ByteArray? The answer for your question is YES, but final result will work slow - slower when video is bigger and codec complex. You must read frames and put them as BitmapData in to Bitmap and write own player. The best way is to use Alchemy - then it works faster but also slow :) You can also use Haxe.
Sound in very similar way. The best point to start is adobe labs. At the end - remember that flv is decoded using hardware - your code will use only processor. Now ask yourself if really you need this feature?
There is now a better way of playing a video that you have stored in a ByteArray
using NetStream.appendBytes().
Here is an example of it in use: http://www.bytearray.org/?p=1689
The Loader+MovieClip trick is probably the only way to go, see this
For limitiations: The 2 minute limit is fine for rtmfp2p as distributing larger bytearrays is not feasiable anyway.
Assuming the playback metrics (playhead/current frame) are available, smooth transitions should not be a problem - start playing second swf with mute/visible=false until timelines are in synch, then flip video, and sound - this works very well well for netstream/play(), not so sure for plain swf just yet.
Another problem is figuring out exactly the way flv data are imported into the swf and how to construct proper swf at runtime, in as3. So far mxmlc/swfmill were unsucessful in directly embedding FLV for me (it's been a while, things might've changed), only plain flash AS3 was capable of creating bytearray-loadable swf with video. Should be possible though.
On a related note - one question is if its all worth the trouble - if one were to build a successful site featuring p2p VOD like this one, Adobe might as well just cut the line (hacking up something like no swf movieclips with embedded video to be loaded from bytearrays...).
i think "why ByteArray" is actually THE question ... how did it get there? :)
there are numerous approaches ... one was given by konrad ... but as he said it will be slow ... in fact, i think it'll be much slower than you can even imagine ... so here another one:
pass the ByteArray to a server and load the flv from there ... there are several options:
in both scenarios, you might run into crossdomain policy issues (probably only when sending, since i think you're allowed to load videos across domains), where you need to respond correctly to FlashPlayer's policy file requests (you can find tons of stuff on that) ... you could bypass sending restriction by making a LocalConnection bridge, as this one for C# ...
good luck then ... ;)
edit: ah ok, now i understand ... actually, there was already a very similar question ... i remember a short interview with some adobe guy, just shortly after p2p feature was announced ... adobe is very shy about this ... actually it took me weeks to find the p2p after flash player 10 was officially released (didn't really have time to bother before) ...
actually, i think this is made on purpose ... in the interview, it was made clear, that adobe is not trying to push away video streaming sites ... the two most important probably are youtube and google video ... youtube is one of the main reasons, why flash player became so popular in the first place ... and it's owned by google, as google video ... allowing easy creation of a p2p media platform would piss google off a lot ... you don't need a lot of servers for that ... "just" good software, but that's affordable ... and i think, adobe does not want to piss off google ... some reasons:
so i guess adobe does not have that much of an interest to do so ... it's pretty much a bit, like when google announced their payment system (was it GPay or so?), which was a direct concurrent of PayPal ... eBay is one of google's most important income sources ... and actually i never heard anything about it again ...
many decisions are political, when it comes to big companies ... and i think, the one not to make flash player's p2p too strong is one of them ...
I'm not sure this is possible at all since I have no idea how Flash encodes SWF embedded videos, but maybe you could convert that flv bytearray to a swf with the flv embedded in the timeline and use that bytearray to display it with Loader.loadBytes...