A flash based RTMP encoder featuring
- "adobe" authentication (the same performed by FMLE)
- automatic video resize
- javascript interface
- log to javascript console
- works in every browser with flash plugin installed
The root directory is a flash builder project. "bin-debug/" folder contains a sample app.
var producer = new WebProducer({
id: 'producer', // the html object id
width: 320 * 1.5, // these are sizes of the player on the page
height: 240 * 1.5, // not related to the stream resolution
trace: false // would enable debug logs in js console
});
producer.once('ready', function () {
console.log('The producer is now ready');
console.log("These are methods supported by producer flash object", producer.methods);
// check there is a camera available
var numCameras = producer.countCameras();
console.log("We have " + numCameras + " camera(s) available");
if (numCameras == 0) return alert('there is no camera availalbe');
// checking user permissions on camera
producer.once('camera-unmuted', function () {
console.log("Camera is now available");
tryToConnect();
});
producer.on('camera-muted', function () {
console.log("The user has denied access to the camera");
});
var cameraMuted = producer.isCameraMuted();
if (cameraMuted) {
console.log("The user must approve camera access");
} else {
console.log("The camera is available, user already approved");
producer.fire('camera-unmuted'); // we manually trigger the event
}
var tryToConnect = function () {
//producer.setCredentials("username", "password"); // if you want to emulate fmle auth
var streamName = "foo"; // stream name will reflect in the recorded filename
var url = 'rtmp://' +
window.location.hostname +
':1935/live'; // "live/" is the RTMP application name, always the same.
producer.setUrl(url);
producer.setStreamName(streamName);
producer.setStreamWidth(640);
producer.setStreamHeight(480);
producer.on('connect', function () {
console.log("We are now streaming live on our channel");
});
producer.on('disconnect', function () {
console.log("The producer has been disconnected");
});
producer.on('error', function (reason) {
console.log("ERROR: ", reason);
});
producer.connect();
setTimeout(function () { producer.disconnect(); }, 10000);
}
});
Open bin-debug/index.html to see it in action. Remeber it has to be running on a webserver you can't open it from file:// otherwise the NetConnection would not work (this is due to some Flash restrictions).