Ciao a tutti,
premetto che ho pochissima esperienza su actionscript, ma mi è stato chiesto di realizzare un sistema che permetta agli utenti di un portale di registrare un piccolo videoclip attraverso la loro webcam e salvarlo per poi renderlo disponibile in visione.
Abbiamo a disposizione e già installato il server di streaming RED5, e questo integra, per chi lo conosce, anche un esempio che fa al caso mio. L'esempio si chiama "simpleRecorder", visionabile a questo indirizzo:
http://www.digs.jp:5080/demos/simpleRecorder.swf
Purtroppo però questo esempio andrebbe modificato nel senso che ad esempio l'url del server red5 e dell'applicativo che si occupa dello streaming non posso farlo inserire all'utente, oltre al fatto che i pulsanti per lo "start recording" e "stop recording" andrebbero modificati per renderli più "intuitivi".
Di questo esempio non c'è il .fla che mi permetterebbe magari la modifica e quindi mi sono armato di pazienza(anche se la sto perdendo) e sto provando a farlo, con scarsissimi risultati.
posto il codice actionscript cosicchè qualcuno magari mi può dare qualche dritta:
codice:
// Oggetto necessario per instaurare la connessione al server
var nc:NetConnection=new NetConnection();
// Stream dedicato alla pubblicazione del flusso sul server
var out_ns:NetStream;
// Crea un oggetto Camera
var publisher_cam:Camera;
// Crea un oggetto Microfono
var publisher_mic:Microphone;
var idStream:String;
var streamingServer:String;
var streamingStarted:Boolean = false;
/*** GESTIONE EVENTI PULSANTI ***/
startRecording.onPress = function(){
doPublish("1");
}
stopRecording.onPress = function(){
stopPublish("2");
}
init();
/*** FINE GESTIONE EVENTI PULSANTI ***/
function doConnect(){
status_txt.text="Connecting to "+ streamingServer +"...\n";
nc.connect(streamingServer);
}
function doPublish(idStream:String){
publishStream(idStream);
}
function stopPublish(idStream:String){
stopPublishStream(idStream);
}
/* PUBBLICA LO USER STREAM SUL SERVER DI STREAMING */
function publishStream(idStream:String){
status_txt.text+="[INFO] Publishing Started for stream" + idStream + "\n";
// Collego la web cam all'oggetto
// video presente sullo stage
previewVideo.attachVideo(publisher_cam);
//Inserisco l'audio al flusso
out_ns.attachAudio(publisher_mic);
// Inserisco il video al flusso
out_ns.attachVideo(publisher_cam);
// Pubblico sul server Red5
// il flusso audiovisivo
out_ns.publish("stream"+idStream);
startRecording.enabled = false;
stopRecording.enabled = true;
out_ns.onStatus = function(info){
if(info.code!="NetStream.Publish.BadName"){
streamingStarted = true;
status_txt.text+="[OK] Trasmissione avviata";
}else{
status_txt.text+="[INFO]" + info.code + "\n";
}
}
}
/* PUBBLICA LO USER STREAM SUL SERVER DI STREAMING */
function stopPublishStream(idStream:String){
status_txt.text+="[INFO] Stopping stream" + idStream + "\n";
previewVideo.attachVideo(null);
out_ns.attachAudio(null);
out_ns.attachVideo(null);
// Pubblico sul server Red5
// il flusso audiovisivo
out_ns.close("stream"+idStream);
stopRecording.enabled = false;
startRecording.enabled = true;
}
function init(id:String){
idStream = id;
streamingServer="rtmp://mystreamingRED5Server/oflaDemo";
width_txt.text=250;
height_txt.text=250;
doConnect();
}
nc.onStatus = function(info){
status_txt.text+="[INFO]" + info.code + "\n";
// Se l'instaurazione della connessione è andata a buon fine
if(info.code=="NetConnection.Connect.Success"){
//Inizializzo lo stream in uscita
out_ns = new NetStream(nc);
status_txt.text+="[INFO] Connected to Red5 Streaming Server" + "\n";
// Abilito il pulsante "Start recording"
startRecording.enabled=true;
// Imposto le proprietà del video trasmesso dalla WebCam
publisher_cam.setMode(width_txt.text, height_txt.text);
// Creo un riferimento alla videocamera
publisher_cam = Camera.get();
// Creo un riferimento al microfono
publisher_mic = Microphone.get();
}else{
status_txt.text+="[ERROR]" + info.code;
}
}
/* GESTIONE CONNESSIONE AL SERVER */
Rimango in attesa che qualcuno di buona volontà abbia l'intenzione e la pazienza di leggere...