Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

создание видео чата

345
27 декабря 2012 года
vadim_k
312 / / 01.08.2006
Привет всем!

Вопрос к экспертам .Решил написать себе на сайт простенький FLEX видео чат на RED5.

Появилось два вопроса

1. При количестве трансляций не более 10 потянит ли VQ12 hetzner (только RED5).

2.У меня дома оптика 10Мбит может тупо дома сервер поставить это будет работать ?
1
27 декабря 2012 года
kot_
7.3K / / 20.01.2000
1. Проблематично. 10 трансляций - это уже не маленькая нагрузка.
2. Если канал позволяет - то можно. Но 10Мбит - это на самом деле не так уж и много для видео-чата.
345
28 декабря 2012 года
vadim_k
312 / / 01.08.2006
А если там же EX 4 (Intel® Core™ i7-2600 Quad-Core 16ГБ) арендовать он сколько трансляций потянит если его только под RED5 использовать ??

Заранее спасибо..
1
28 декабря 2012 года
kot_
7.3K / / 20.01.2000
У меня приложение (видеочат с использованием OpenMeetings) на RED5 работало под 4 Гб памяти - и этого хватало впритык на 5-6 подключений с видео и голосом. Сейчас просто лень искать конфигурацию сервера. Но больше ничего работать на нем в этот момент не могло - ядра были загружены на 50%, а память загружалась практически вся. Возможно это особенность данной конкретной платформы - в любом случае, тут надо брать начиная с минимальной и по нарастающей.
345
29 декабря 2012 года
vadim_k
312 / / 01.08.2006
Блин не думал что такие ресурсы нужны, интересно какие же сервера на видео ресурсах работают...???
1
30 декабря 2012 года
kot_
7.3K / / 20.01.2000
Цитата: vadim_k
Блин не думал что такие ресурсы нужны, интересно какие же сервера на видео ресурсах работают...???


Перекодирование графики, сжатие видеопотока требует ресурсов - в первую очередь оперативной памяти.

345
02 января 2013 года
vadim_k
312 / / 01.08.2006
Ну что начал от скуки разбирать с FLEX ActionScript

для начала решил простенький шаблон сделать и запустить локально захват видео с вебки это не сложно
а вот остановить чтобы замерло и запусть снова не получается может кто сталкивался

Код:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();" layout="absolute" width="1000" height="600" cornerRadius="10" borderColor="#0E4E7B">
<mx:Script>
    <![CDATA[
   
    var camera:Camera;
       
       
        public function initApp():void {
        bcam.addEventListener(MouseEvent.CLICK, InitCamera);
        }
       
       
        public function InitCamera(event:Event):void{
        camera=Camera.getCamera ();
        if ( camera != null )
      {
        var widthcam:int = 640;
        var heightcam:int = 480;
        camera.setMode ( widthcam, heightcam, 30 );
        camera.setQuality ( 0, 80 );
        vd.attachCamera(camera);
        bcam.label="Выключить";
        bcam.addEventListener(MouseEvent.CLICK, StopCamera);
       
       }
        }
       
        public function StopCamera(event:Event):void{
            bcam.label="Включить Видео";
            bcam.addEventListener(MouseEvent.CLICK, InitCamera);
           
            vd.attachCamera(null);
        }
       
    ]]>
</mx:Script>

    <mx:TextArea y="39" width="216" height="551" x="20" cornerRadius="15" backgroundColor="#9AB9BF"/>
    <mx:TextInput x="244" y="499" width="528" height="51"/>
    <mx:Button x="673" y="558" label="Button"/>
    <mx:TextArea x="244" y="39" width="504" height="452"/>
    <mx:Panel x="756" y="39" width="234" height="272" layout="absolute" title="Моя WEB Камера" cornerRadius="10" themeColor="#494B4C" alpha="1.0" backgroundColor="#92A9B7">
        <mx:VideoDisplay x="0" y="0" width="214" height="164" id="vd"/>
        <mx:Button id="bcam"  x="10" y="181" label="Включить Видео" width="194" height="32"/>
    </mx:Panel>
   
</mx:Application>
345
25 января 2013 года
vadim_k
312 / / 01.08.2006
Привет всем!

Итак, поболтавшись по сети прочитав кучу инфы про Видео чаты принял решение пройти весь путь от начала и до конца всё равно вечерами делать нечего.
Пока поставил себе простенькую задачу создать небольшой простенький чатик с возможностью включать вебки и интегрировать его в свой сайт (аватарки, личные сообщения..)

Шаг первый
Создании простенького FLEX чатика пока без вебок.
Я думаю, серверную часть напишите сами
Она должна выдавать по запросу XML файлик с пользователями онлайн и новыми сообщениями

Код:
<response>
<refrash>10</refrash>
<chatname>vadim_k</chatname>
<online>
  <num>295</num>
  <user>vadim_k</user>
  <avatar>http://..../avatar/1_0m.jpeg?r=777</avatar>
  </online>
<messege>
  <value>
    <nu>130</nu>
    <nm>vadim_k</nm>
    <tx>eter eert re tert re er er er ter </tx>
    <color>0x3300ff</color>
    <data>25.01.2013</data>
    <time>15:07:14</time>
    <avat>http://..../avatar/1_0m.jpeg?r=581</avat>
  </value>
 </messege>
</response>
А вот FLEX исходник простенького чатика, ему предаётся один параметр имя сессии
"FlashVars","sessionid=<?=session_id();?>"
При отправке сообщения к запросу отправляемому на сервер присоединяется переменная /op/ содержащая текст сообщения


Код:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();" layout="absolute" width="1000" height="600" cornerRadius="10" borderColor="#66AFE2" themeColor="#14547C">

<mx:Script>
    <![CDATA[
            import mx.containers.Canvas;
            import mx.controls.Alert;
            import mx.rpc.events.ResultEvent;
            import mx.rpc.events.FaultEvent;
            import mx.utils.ObjectUtil;
            import mx.controls.Label;
            import mx.controls.Image;
            import mx.utils.ArrayUtil;
            import mx.rpc.xml.SimpleXMLDecoder;
            import mx.events.ValidationResultEvent;
 
        public var server_script:String="http://...../video-chat/chat_response.php";
        public var camera:Camera;
        private var service:HTTPService;
        private var t:Timer;
        public var NewArray:Array = new Array();
        public var NewMessegeArray:Array = new Array();
        public var lastmessege:int;
        public var sendparams:Object = new Object();
        public var makemessege: Boolean;
        public var blokmessegearea: Boolean = false;
       
public function initApp():void {
        bcam.addEventListener(MouseEvent.CLICK, InitCamera);
       
        startInt();
       
        }
       
public function startInt():void {
                 t = new Timer(10000);
                 t.addEventListener(TimerEvent.TIMER, TimeReboot);
                 t.start();
                //startButton.enabled = false;
                //stopButton.enabled = true;
}
       
public function TimeReboot(event:Event):void{
            sendparams.s_v=Application.application.parameters.sessionid;
            loadUserAndmessege(server_script,sendparams)
}
       
private function loadUserAndmessege(src:String,params:Object):void {
                httpService.url = src;
                httpService.send(sendparams);
                if(blokmessegearea == true){
                    textmessege.text="";
                    newtextmessege.label="Отправить";
                    blokmessegearea = false;
                }
               
}

private function httpService_fault(evt:FaultEvent):void {
                var title:String = evt.type + " (" + evt.fault.faultCode + ")";
                var text:String = evt.fault.faultString;
                t.stop();
            }

private function httpService_result(evt:ResultEvent):void {
               verifiUserOnline();
               sendparams.op="";
}

private function convertXmlToArray( file:String ):Array {
        var xml:XMLDocument = new XMLDocument( file );
        var decoder:SimpleXMLDecoder = new SimpleXMLDecoder();
        var data:Object = decoder.decodeXML( xml );
        var array:Array = ArrayUtil.toArray( data.response.online );
        return array;
}

private  function getItemIndex(item:int):int {
                var n:int = NewArray.length;
                    for (var i:int = 0; i < n; i++){
                      if (NewArray[i].num == UserOnline.getChildAt(item).name) return i;
                                                    }
              return -1;
}
       
private function verifiUserOnline():void {

       NewArray = convertXmlToArray(httpService.lastResult.toString());
           
       //Alert.show(ObjectUtil.toString(httpService.lastResult));AddUserOnline(n);
       
      for (var n:int = 0; n < NewArray.length; ++n) {            
        if(UserOnline.numChildren == 0 ){ for (var nz:int = 0; nz < NewArray.length; ++nz) {AddUserOnline(nz); } break;}
           else {
             
             //Alert.show("UserOnline.numChildren=" + UserOnline.numChildren + "NewArray.length=" + NewArray.length + "n=" + n);
             
           if(UserOnline.numChildren-1 < n ){   AddUserOnline(n);   }
                                                    else {
            if(UserOnline.getChildAt(n).name == NewArray[n].num){    }
               else {  
                if(getItemIndex(n) == -1){  UserOnline.removeChildAt(n);   }
                                   else {
                                    //Alert.show("1"); 
                                    AddUserOnline(n,n);
                                   
                                   }
               }
                                                         }      
               
           }
       }
       
     if(UserOnline.numChildren > NewArray.length){    for(var ty:int=NewArray.length; ty < UserOnline.numChildren; ++ty){ UserOnline.removeChildAt(ty);   }  }
    //Alert.show(ObjectUtil.toString(httpService.lastResult));
    //
    NewMessegeArray=ArrayUtil.toArray(httpService.lastResult.messege.value)
      for (n = 0; n < NewMessegeArray.length; ++n) {
       
     if(NewMessegeArray[n].nu > 0){
     lastmessege=NewMessegeArray[n].nu;
     sendparams.last_mess=lastmessege;
     //Alert.show(ObjectUtil.toString(httpService.lastResult));
     AddMessegeArea(n);
     }
     
      }


}
private function AddMessegeArea(num:int):void {
    var OnlineBox:Canvas = new Canvas();
                OnlineBox.width= 350;
                OnlineBox.verticalScrollPolicy="off";
                OnlineBox.horizontalScrollPolicy="off";
                OnlineBox.setStyle("borderColor",0xff0f00);
    var OnlineBoxImg:Image = new Image ();    
                OnlineBoxImg.source=NewMessegeArray[num].avat;
                OnlineBoxImg.x=0;
                OnlineBoxImg.y=0;
                OnlineBox.addChild(OnlineBoxImg);
    var OnlineBoxLabel:Label = new Label ();  
                OnlineBoxLabel.text=NewMessegeArray[num].tx;
                OnlineBoxLabel.x=53;
                OnlineBoxLabel.y=5;
                OnlineBoxLabel.setStyle("color",NewMessegeArray[num].color);
                OnlineBox.addChild(OnlineBoxLabel);
               
               
                idmessege.addChild(OnlineBox);
}
private function AddUserOnline(num:int,aftenum:int=-1):void {
            var OnlineBox:Canvas = new Canvas();
                OnlineBox.name=NewArray[num].num;
                OnlineBox.width= 150;
                OnlineBox.height=52;
                OnlineBox.verticalScrollPolicy="off";
                OnlineBox.horizontalScrollPolicy="off";dissolveIn
                OnlineBox.setStyle("borderColor",0xff0000);
                OnlineBox.setStyle("addedEffect", zoomAll);
               
            var OnlineBoxImg:Image = new Image ();    
                OnlineBoxImg.source=NewArray[num].avatar;
                OnlineBoxImg.x=0;
                OnlineBoxImg.y=0;
                OnlineBox.addChild(OnlineBoxImg);
               
            var OnlineBoxLabel:Label = new Label ();  
                OnlineBoxLabel.text=NewArray[num].user;
                OnlineBoxLabel.x=53;
                OnlineBoxLabel.y=5;
                OnlineBox.addChild(OnlineBoxLabel);
               
                if(aftenum == -1){ UserOnline.addChild(OnlineBox); }
                  else{
                     UserOnline.addChildAt(OnlineBox, aftenum);
                  }
               
               
}
       
private function InitCamera(event:Event):void{//sessionid Application.application.parameters.sessionid
        camera=Camera.getCamera ();
        if ( camera != null )
         {
        var widthcam:int = 640;
        var heightcam:int = 480;
        camera.setMode ( widthcam, heightcam, 30 );
        camera.setQuality ( 0, 80 );
        vd.attachCamera(camera);
        bcam.label="Выключить";
        bcam.removeEventListener(MouseEvent.CLICK, InitCamera);
        bcam.addEventListener(MouseEvent.CLICK, StopCamera);
       
         } else  Alert.show("WEB cam bad");
}
       
private function StopCamera(event:Event):void{
            bcam.label="Включить Видео";
            vd.attachCamera(null);
            camera = null;
            bcam.removeEventListener(MouseEvent.CLICK, StopCamera);
            bcam.addEventListener(MouseEvent.CLICK, InitCamera);
}
       
       
private function makesendmessege(event:Event):void{

//Alert.show("makesendmessege");
var result:ValidationResultEvent = stringValidator.validate();

   switch (result.type) {
         case ValidationResultEvent.INVALID:
              Alert.show(result.message, result.type);
              break;
         case ValidationResultEvent.VALID:
             blokmessegearea=true;
             sendparams.op=textmessege.text;
             sendparams.color="0x"+youcolor.selectedColor.toString(16);
             newtextmessege.label="Отправляется";
              break;
    }
}


    ]]>
</mx:Script>

        <mx:Dissolve id="dissolveOut" duration="1000" alphaFrom="1.0" alphaTo="0.0"/>
        <mx:Dissolve id="dissolveIn" duration="1000" alphaFrom="0.0" alphaTo="1.0"/>
        <mx:Zoom id="zoomAll" zoomWidthTo="1" zoomHeightTo="1" zoomWidthFrom="1" zoomHeightFrom="0"  />

<mx:StringValidator id="stringValidator"
            source="{textmessege}"
            property="text"
            minLength="2"
            maxLength="200" />

    <mx:HTTPService id="httpService"
            resultFormat="e4x"
            fault="httpService_fault(event);"
            result="httpService_result(event)"
            method="POST"/>
    <mx:Panel x="756" y="10" width="234" height="272" layout="absolute" title="Моя WEB Камера" cornerRadius="10" themeColor="#494B4C" alpha="1.0" backgroundColor="#92A9B7">
        <mx:VideoDisplay x="0" y="0" width="214" height="164" id="vd"/>
        <mx:Button id="bcam"  x="10" y="181" label="Включить Видео" width="194" height="32"/>
    </mx:Panel>
    <mx:VBox x="10" y="10" height="580" width="226" id="UserOnline">
    </mx:VBox>
    <mx:TextInput x="244" y="499" width="504" height="61" id="textmessege" fontSize="13" fontWeight="bold"/>
    <mx:Button x="619" y="568"  click="makesendmessege(event)" label="Отправить" id="newtextmessege"   />
    <mx:VBox x="244" y="10" height="481" width="504" id="idmessege" backgroundColor="#C4C5E4">
    </mx:VBox>
    <mx:ColorPicker x="244" y="568" width="51"  id="youcolor" change="textmessege.setStyle(&quot;color&quot;,'0x'+youcolor.selectedColor.toString(16));" fontSize="15"/>
   
</mx:Application>
пРОДОЛЖЕНИЕ СЛЕДУЕТ ....
345
27 февраля 2013 года
vadim_k
312 / / 01.08.2006
Видео Чат сделал, подскажите как на этом сайте статью разместить хочу поделиться опытом ??
414
27 февраля 2013 года
CassandraDied
763 / / 24.05.2012
Цитата: vadim_k
Видео Чат сделал, подскажите как на этом сайте статью разместить хочу поделиться опытом ??



Сервер решил дома ставить? Подумал тут, что облака были бы круче. С такими-то возможностями по управлению ресурсами. И, наверное, дешевле.

345
27 февраля 2013 года
vadim_k
312 / / 01.08.2006
У меня был старенький ноутбук Пентиум 4 1Гб ОЗУ поставил на нём Ubuntu 12 и RED5 у провайдера белый IP попросил побаловаться с приятелем друг на друга смотрели не тормозит...
1
28 февраля 2013 года
kot_
7.3K / / 20.01.2000
Цитата: vadim_k
Видео Чат сделал, подскажите как на этом сайте статью разместить хочу поделиться опытом ??


я думаю что вот так Добавить статью

345
21 марта 2013 года
vadim_k
312 / / 01.08.2006
Вот хочу показать первый блин
версия мини RED5 Flex Видео Чата.
Чат работает на версии Red5 1.0 и Java 7.0
Демка здесь red5-flex-videochat

Скачать исходники там же..
1
22 марта 2013 года
kot_
7.3K / / 20.01.2000
пишет не связи свидеосервером
345
22 марта 2013 года
vadim_k
312 / / 01.08.2006
Да вечером на сервер перенёс на локальном всё работало(Win Xp)
на сервере Ubuntu 12 может из за небольшой разницы в версиях Java 1.7 и 1.7.12
не работает сегодня везде однинаковые версии установлю...
345
22 марта 2013 года
vadim_k
312 / / 01.08.2006
Вроде заработало !!!
1
23 марта 2013 года
kot_
7.3K / / 20.01.2000
да. удалось войти в чат - видеокамера не работает
345
23 марта 2013 года
vadim_k
312 / / 01.08.2006
А что пишет
какая операционка
у меня по Win Xp всё работает , под другими нет возможности теститровать,
вечером с приятелем соединюсь у него W7, кстати раньше мы с ним друг на друга смотрели , а в работе с камерой я ничего не менял..
345
01 апреля 2013 года
vadim_k
312 / / 01.08.2006
Перенёс демку
смотреть и скачивать red5.reolan.ru
91K
21 августа 2013 года
Exompies
1 / / 21.08.2013
http://chat.exompies.ru/ ОШИБКА Нет соединения с медиа сервером
сделал как по инструкции
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог