Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Пример вебфона с интерфейсом телефона

На скриншоте скриншотах ниже (слева направо)

  • параметры для SIP- соединения введены в login- форме входа

Image Added

  • введено SIP имя вызываемого пользователя вызываемого

Image Added

  • установлен видеозвонок

Image RemovedImage Added

Видео или аудиозвонок инициируется при нажатии на соответствующую кнопку и завершается при нажатии на кнопку Hangup.
Для удержания (hold) звонка используется иконка 'пауза'.
Для регулировки громкости используется ползунок, который появляется при клике на иконке 'динамик' в левом верхнем углу.

...

Для разбора кода возьмем версию файла Phone.js с хешем bb13dd898ed9ef182abcf44dd7fdc159e8d66f4a ecbadc3, которая находится здесь и доступна для скачивания в соответствующей сборке  2.0.5.8.1894212.

В этом скрипте методы Flashphoner API вызываются из соответствующих методов объекта Phone.

Например, метод для установления соединения с сервером createSession() вызывается из метода connect(). код

code

Code Block
languagejs
themeRDark
Phone.prototype.connect = function () {
var me = this;
.....
Flashphoner.createSession(connectionOptions).on(SESSION_STATUS.ESTABLISHED, function(session){
.....

Объект Phone создается и инициализируется после инициализации API. код

code

Code Block
languagejs
themeRDark
var phone = new Phone();

phone.init();

Кроме методов, необходимых для звонков, объект предоставляет методы для изменения контролов элементов интерфейса в зависимости от статуса соединения и звонка.

1. Инициализация API.

Flashphoner.init() код code

Code Block
languagejs
themeRDark
        Flashphoner.init({flashMediaProviderSwfLocation: '../../../../media-provider.swf',
            mediaProvidersReadyCallback: function(mediaProviders) {
                //hide remote video if current media provider is Flash
                if (mediaProviders[0] == "Flash") {
                    $("#remoteVideoWrapper").removeClass().hide();
                    $("#localVideoWrapper").attr('class', 'b-video__video ui-widget-content');
                }
            }});

2. Подключение к серверу.

Flashphoner.createSession() код code

Методу createSession() передается объект с параметрами для подключения

...

ConnectionStatusEvent ESTABLISHED код code

Code Block
languagejs
themeRDark
    Flashphoner.createSession(connectionOptions).on(SESSION_STATUS.ESTABLISHED, function(session){
        me.session = session;
        me.connectionStatusListener(SESSION_STATUS.ESTABLISHED);
    }).on(SESSION_STATUS.REGISTERED, function(session){
        ...
    }).on(SESSION_STATUS.DISCONNECTED, function(){
        ...
    }).on(SESSION_STATUS.FAILED, function(){
        ...
    }).on(SESSION_STATUS.INCOMING_CALL, function(call){
        ...
    });

...

ConnectionStatusEvent REGISTERED код

Code Block
languagejs
themeRDark
    Flashphoner.createSession(connectionOptions).on(SESSION_STATUS.ESTABLISHED, function(session){
        ...
    }).on(SESSION_STATUS.REGISTERED, function(session){
           ...me.registrationStatusListener(SESSION_STATUS.REGISTERED);
     }).on(SESSION_STATUS.DISCONNECTED, function(){
        ...
    }).on(SESSION_STATUS.FAILED, function(){
        ...
    }).on(SESSION_STATUS.INCOMING_CALL, function(call){
        ...
    });

...

ConnectionStatusEvent INCOMING_CALL код code

Code Block
languagejs
themeRDark
    Flashphoner.createSession(connectionOptions).on(SESSION_STATUS.ESTABLISHED, function(session){
        ...
    }).on(SESSION_STATUS.REGISTERED, function(session){
        ...
    }).on(SESSION_STATUS.DISCONNECTED, function(){
        ...
    }).on(SESSION_STATUS.FAILED, function(){
        ...
    }).on(SESSION_STATUS.INCOMING_CALL, function(call){
        call.on(CALL_STATUS.RING, function(){
            ...
        });
        me.onCallListener(call);
    });

6. Исходящий звонок.

session.createCall(), call.call() код code

При создании звонка в метод передаются следующие параметры

...

7. Ответ на входящий звонок.

call.answer() код code

Методу передается объект с опциями для ответа

...

Code Block
languagejs
themeRDark
Phone.prototype.answer = function () {
    trace("Phone - answer " + this.currentCall.id());
    this.flashphonerListener.onAnswer(this.currentCall.id());
    this.currentCall.answer({
        localVideoDisplay: this.localVideo,
        remoteVideoDisplay: this.remoteVideo
    });
};

8. Удержание звонка.

- удержание: сall.hold() код code

Code Block
languagejs
themeRDark
Phone.prototype.hold = function () {
    trace("Phone - hold callId: " + this.currentCall.id());
    this.currentCall.hold();
};

- возобновление: call.unhold() код code

Code Block
languagejs
themeRDark
Phone.prototype.unhold = function () {
    trace("Phone - hold callId: " + this.currentCall.id());
    this.currentCall.unhold();
};

9. Завершение звонка.

сall.hangup() код code

Code Block
languagejs
themeRDark
Phone.prototype.hangup = function () {
    trace("Phone - hangup " + this.currentCall.id() + " status " + this.currentCall.status());
    this.hideFlashAccess();
    if (this.currentCall.status() == CALL_STATUS.PENDING) {
        this.callStatusListener(this.currentCall);
    } else {
        this.currentCall.hangup();
    }
    this.flashphonerListener.onHangup();
};

10. Закрытие соединения.

session.disconnect(). код code

Code Block
languagejs
themeRDark
Phone.prototype.disconnect = function () {
    trace("Phone - disconnect");
    this.session.disconnect();
};