is there any sample on using array bitmapdata to record video from webcam and generate flash movieclip file? i want to record sound as well without using red5/flash streaming server
R – bitmapdata record video
actionscriptactionscript-3flashflashdevelopred5
Related Solutions
This sounds like a good candidate for Thibault Imbert's AS3 GIF Animation Encoding Class. I've used it about 2 years ago for a project at University. You can check it out here. In my opinion you would have 3 steps:
//1.Create a Camera object
//this code comes from the LiveDocs
var camera:Camera = Camera.getCamera();
var video:Video;
if (camera != null) {
video = new Video(camera.width * 2, camera.height * 2);
video.attachCamera(camera);
addChild(video);
} else {
trace("You need a camera.");
}
//2. Take one or more 'screenshots' using BitmapData
var screenshot:BitmapData = new BitmapData(video.width,video.height,false,0x009900);
screenshot.draw(video);
//you would probably save more of these in an array called screenshots maybe
//3. Create a GIFEncoder and send it to the server:
//assuming screenshots is an array of BitmapData objects previously saved
var animationEncoder:GIFEncoder = new GIFEncoder();
animationEncoder.setRepeat(0);
animationEncoder.setDelay (150);
animationEncoder.start();
for(var i:int = 1 ; i < screenshots.length ; i++){
animationEncoder.addFrame(screenshots[i]);
}
animationEncoder.finish();
//save it on the server
var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");//binary header
var gifRequest:URLRequest = new URLRequest ('http://yourServer/writeGIF.php?name=myFile.gif&method=download');
gifRequest.requestHeaders.push (header);
gifRequest.method = URLRequestMethod.POST;
gifRequest.data = animationEncoder.stream;
sendToURL(gifRequest);
//Obviously you would have listeners to check if everything was ok, and when the operation //is complete.
//The PHP code would be something simple as this
<?php
$method = $_GET['method'];
$name = $_GET['name'];
if ( isset ( $GLOBALS["HTTP_RAW_POST_DATA"] )) {
// get bytearray
$gif = $GLOBALS["HTTP_RAW_POST_DATA"];
// add headers for download dialog-box
header('Content-Type: image/gif');
header('Content-Length: '.strlen($gif ));
header('Content-disposition:'.$method.'; filename="'.$name.'".gif');
echo $gif ;
} else echo 'An error occured.';
?>
That should be it.
Make sure you check out Thibault Imbert's AS3 GIF Animation Encoding Class and this Web-Cam-Stop-Motion fun app :) Lee Felarca's SimpleFlvWriter is worth looking at as well, depending on your needs.
I don't believe any libraries exist for streaming video from AS3. It's very processor-intensive, and probably couldn't be real-time. http://en.wikipedia.org/wiki/Flash_Video
You can save a .flv containing uncompressed bitmap data with this lib, but that's not going to get you what you want.. http://www.zeropointnine.com/blog/simpleflvwriteras-as3-class-to-create-flvs/
You're probably going to need some server-side code to get this goal accomplished - you'll get much better performance also if your flash app just sends the component photos across the wire (assuming this is some kind of slideshow)...
Is realtime a requirement?
Best Answer
The video part may be possible at very low framerates, but you would have to port an FLV encoder into AS3, which is no trivial task. It would also be very memory intensive.
As for audio, there is simply no programatic access to raw microphone data from within the Flash player. If you want to record audio you must you a server like FMS or Red5.