Application Development Tips and Tricks > Snapshots and thumbnails > Snapshots |
Snapshots
If you look at the NetStream.attachVideo entry in the Client-Side Communication ActionScript Dictionary, you will see the following usage:
myStream.attachVideo(source| null [,snapShotMilliseconds])
The snapShotMilliseconds parameter is used to send a single snapshot (by providing a value of 0) or a series of snapshotsin effect, time-lapse footageby providing a positive number that adds a trailer of the specified number of milliseconds to the video feed. When you specify the snapShotMilliseconds parameter, you are controlling how much time elapses during playback between recorded frames.
The following client-side ActionScript code in doc_snapshot.fla connects to the server and plays camera output locally. When the user chooses to take a snapshot, the event handler, doRecord, makes a call to out_ns.attachVideo(client_cam, 0). The second parameter, 0, causes just one frame to be recorded.
#include "NetDebug.as"
// Recording state variable
RecState_box.text = 0;
// Number of snapshots
numSnaps = 0;
// Initialize button label
Record_btn.setLabel("Record");
// Connect to the snapshot app and get connection status
function doConnect() {
client_nc = new NetConnection();
client_nc.onStatus = function(info) {
trace("Level: " + info.level + newline + "Code: " + info.code);
};
client_nc.connect("rtmp:/doc_snapshot/room_01");
}
// Create a stream for recording and getting the snapshot
function initStreams() {
// Stream for recording
out_ns = new NetStream(client_nc);
out_ns.onStatus = function(info) {
trace("Level: " + info.level + newline + "Code: " + info.code);
};
// Stream for playing
in_ns = new NetStream(client_nc);
in_ns.onStatus = function(info) {
trace("Level: " + info.level + newline + "Code: " + info.code);
};
}
// Get a camera instance and attach it to the local
// video, Live_video, and the output stream
client_cam = Camera.get();
Live_video.attachVideo(client_cam);
// Button event handler for publishing and showing the snapshot
function doRecord() {
// If you're not recording, begin to record
if (RecState_box.text == 0) {
// Clear the snapshot window
Snapshot_mc.removeMovieClip();
// Take a snapshot
out_ns.attachVideo(client_cam, 0);
out_ns.publish("myRecording"+numSnaps, "record");
// Set the label to stop
Record_btn.setLabel("Stop");
// Update the recording state
RecState_box.text = 1;
// If you're recording, stop
} else {
// Stop publishing recorded stream
out_ns.publish(false);
// Close the stream so that we can use the same to publish again
out_ns.close();
// Set the label to "Record"
Record_btn.setLabel("Record");
// Update the recording state
RecState_box.text = 0;
showSnapshot();
}
}
// Show the snapshot by attaching the stream to the SnapView_video
// video object and playing it
function showSnapshot() {
// Create a new movie clip from the exportable movie clip View_mc,
// which contains a video object, SnapView_video. Provide a new name, and
// depth (a number relative to the other View_mcs on the stage used
// to prevent collision)
_root.attachMovie("View_mc", "Snapshot_mc", numSnaps);
// Attach the input stream to the SnapView_video video object
// in the v instance of the View_mc movie
Snapshot_mc.SnapView_video.attachVideo(in_ns);
Snapshot_mc._x=375;
Snapshot_mc._y=225;
// Play the recording
in_ns.play("myRecording"+numSnaps);
// Update the counter for the number of snapshots for next time.
numSnaps++;
}
// Connect to the server
doConnect();
// Initialize the streams
initStreams();