Bonjour,
J'utilise RED5 pour diffuser en live ma webcam mais l'audio est simplement pourri
Il est intermitent et de mauvaise qualité sonore.
Je vous met mes 2 scripts faisant appel à la diffusion de ma cam en live.
Ma config est-elle bonne car j'ai essayé d'améliorer la qualité de la vidéo et de l'audio??
Le 1er est pour le publier.
Code ActionScript :
public class CameraBroadcast{
private var cam : Camera;
private var nc : NetConnection;
private var ns : NetStream;
private var mic:Microphone;
private var monUrl : URLRequest;
public var expediteur :String;
public var code :String;
public function CameraBroadcast(){
//Constructeur
}
public function initNC() : void {
// Pour indiquer au serveur qui doit être le client (peut être tout objet ActionScript)
this.nc = new NetConnection();
this.nc.client = this;
// Red5 ne supporte que AMF0
this.nc.objectEncoding = ObjectEncoding.AMF0;
// Connection au serveur Red5 sur le port RTMP 1935
this.nc.connect("rtmp://xxxxxxxxxxxxxxxxxxxx");
// On écoute les évènements de la couche transport
this.nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
this.nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
}
private function netStatusHandler (event : NetStatusEvent) : void{
switch (event******.code){
case "NetConnection.Connect.Success": {
this.cam = Camera.getCamera();
this.ns = new NetStream (this.nc);
//-------- PARAMETRES MICROPHONE --------------
this.mic = Microphone.getMicrophone();
//Supprime le probleme ECHO
this.mic.setUseEchoSuppression(true);
//Améliore la diffusion du son entre chaque utilisation temps en millisecondes
this.mic.setSilenceLevel(10,1000);
//--------- PARAMETRES CAMERA -----------------
//Améliore la qualité de l'image
this.cam.setQuality(40000,80);
//Améliore la capture de l'image
this.cam.setMotionLevel(30,500);
//Definir les dimensions de la cam diffusée
this.cam.setMode(407,307,25,true);
this.ns.attachCamera(this.cam);
this.ns.attachAudio(this.mic);
try{
this.ns.client = this;
this.ns.publish(this.expediteur,"live");
}
catch (e:Error) {
trace (e.message);
}
break;
}
default:
alert.show("Attention...Assurez-vous que votre webcam soit branchée !");
break;
}
}
public function onBWDone():void {
// Appelé par RED5 au moment de la connexion
}
public function onMetaData (data : Object) : void{
// Appelé par RED5 au moment de la connexion
}
public function onPlayStatus (data : Object) : void {
// Appelé par RED5 au moment de la connexion
}
public function asyncErrorHandler(event:AsyncErrorEvent):void {
// Appelé par RED5 au moment de la connexion
}
public function stopperCamera():void{
this.ns.close();
this.monUrl = new URLRequest("http://xxxxxxxxxxxxxx/index.php?do=maj&cs="+this.code);
navigateToURL(this.monUrl,"_self");
}
}
Le 2ème pour le lire.
Code ActionScript :
public function initNC () : void{
// Pour indiquer au serveur qui doit être le client (peut être tout objet ActionScript)
this.nc = new NetConnection();
this.nc.client = this;
// Red5 ne supporte que AMF0
this.nc.objectEncoding = ObjectEncoding.AMF0;
// Connection au serveur Red5 sur le port RTMP 1935
this.nc.connect("rtmp://xxxxxxxxxxxxxxxxxxxxxxxxxxx");
// On écoute les évènements de la couche transport
this.nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
this.nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
}
private function netStatusHandler (event : NetStatusEvent) : void{
switch (event******.code){
case "NetConnection.Connect.Success": {
this.ns = new NetStream(this.nc);
this.video = new Video();
this.video.attachNetStream(this.ns);
this.video.width = 407;
this.video.height = 307;
slr.addChild(this.video);
try{
this.ns.client = this;
this.ns.play(this.destinataire);
}
catch (e:Error) {
trace (e.message);
}
break;
}
default:
break;
}
}
public function onBWDone():void {
// Appelé par RED5 au moment de la connexion
}
public function onMetaData (data : Object) : void{
// Appelé par RED5 au moment de la connexion
}
public function onPlayStatus (data : Object) : void {
// Appelé par RED5 au moment de la connexion
}
public function asyncErrorHandler(event:AsyncErrorEvent):void {
// Appelé par RED5 au moment de la connexion
}
Merci de votre aide