WebSDK предложение!

pride

Member
Предлагаю в WEBsdk сделать возможность при инициализации (flashphoner-core.js: init()), пользователю выбирать провайдер, через который работать, дабы в своих скриптах управлять очередностью и приоритетами их подключения.
Например, я реализовал это так (Прошу не пинать, это черновик):
Code:
var init = function(options) {
    var waitingTemasys = false;
    var audioContext = false;
        options = options ? options : {};
        options.provider = options.provider ? options.provider : 'default';
        loggerConf = options.logger || loggerConf;
        // init logger
        logger.init(loggerConf.severity, loggerConf.push);
    // Selected provider
    var getMediaProvider = function(provider){
        switch (provider) {
            // WebRTC provider
            case 'WebRTC':
                var webRtcProvider = require("./webrtc-media-provider");
                if (webRtcProvider && webRtcProvider.hasOwnProperty('available') && webRtcProvider.available()) {
                    MediaProvider.WebRTC = webRtcProvider;
                    var webRtcConf = {
                        constraints: options.constraints || getDefaultMediaConstraints(),
                        extensionId: options.screenSharingExtensionId,
                        audioContext: audioContext,
                        logger: logger
                    };
                    webRtcProvider.configure(webRtcConf);
                } else {
                    webRtcProvider = require("./temasys-media-provider");
                    if (webRtcProvider && webRtcProvider.hasOwnProperty('available') && AdapterJS) {
                        waitingTemasys = true;
                        AdapterJS.webRTCReady(function (isUsingPlugin) {
                            isUsingTemasysPlugin = isUsingPlugin;
                            if (isUsingPlugin || webRtcProvider.available()) {
                                MediaProvider.WebRTC = webRtcProvider;
                                var webRtcConf = {
                                    constraints: options.constraints || getDefaultMediaConstraints(),
                                    extensionId: options.screenSharingExtensionId,
                                    logger: logger
                                };
                                webRtcProvider.configure(webRtcConf);

                                // Just reorder media provider list
                                var _MediaProvider = {};
                                _MediaProvider.WebRTC = MediaProvider.WebRTC;
                                for (var p in MediaProvider) {
                                    _MediaProvider[p] = MediaProvider[p];
                                }
                                MediaProvider = _MediaProvider;
                            }
                            if (options.mediaProvidersReadyCallback) {
                                options.mediaProvidersReadyCallback(Object.keys(MediaProvider));
                            }
                        });
                    }
                }
            break;
            // Websocket provider
            case 'WS':
                var websocketProvider = require("./websocket-media-provider");
                if (websocketProvider && websocketProvider.hasOwnProperty('available') && websocketProvider.available(audioContext)) {
                    MediaProvider.WSPlayer = websocketProvider;
                    var wsConf = {
                        receiverLocation: options.receiverLocation,
                        decoderLocation: options.decoderLocation,
                        audioContext: audioContext,
                        logger: logger
                    };
                    websocketProvider.configure(wsConf);
                }
            break;
            // Flash provider
            case 'Flash':
                var flashProvider = require("./flash-media-provider");
                if (flashProvider && flashProvider.hasOwnProperty('available') && flashProvider.available() && !MediaProvider.WebRTC) {
                    MediaProvider.Flash = flashProvider;
                    var flashConf = {
                        constraints: options.constraints || getDefaultMediaConstraints(),
                        flashMediaProviderSwfLocation: options.flashMediaProviderSwfLocation,
                        logger: logger
                    };
                    flashProvider.configure(flashConf);
                }
            break;
        }
    };
    if (!initialized) {
        try{audioContext = new (window.AudioContext || window.webkitAudioContext)();}catch(e){console.warn("Failed to create audio..");}
        // Selected provider
        switch (options.provider) {
            // WebRTC provider
            case 'WebRTC':
                getMediaProvider('WebRTC');
            break;
            // Websocket provider
            case 'WS':
                getMediaProvider('WS');
            break;
            // Flash provider
            case 'Flash':
                getMediaProvider('Flash');
            break;
            default:
                getMediaProvider('WebRTC');
                getMediaProvider('Flash');
                getMediaProvider('WS');
            break;
        }
        if (getMediaProviders().length > 0) {
            if (!waitingTemasys && options.mediaProvidersReadyCallback) {
                options.mediaProvidersReadyCallback(Object.keys(MediaProvider));
            }
            initialized = true;
            return true;
        }
    }else{
        console.warn("The instance is already initialized...");
    }
    initialized = false;
    return false;
};
 

pride

Member
Таким образом при инициализации WebSDK, есть возможность сделать следующее:
Code:
if(Flashphoner.init({'provider' : 'WebRTC'})){
   console.log('Загрузил WebRTC');
}else if(Flashphoner.init({'provider' : 'WS'})){
    console.log('WebRTC Не работает грузим Websocket');
}else{
   console.log('Ничего не работает, а флеш нас не интересует)');
}
Если не передать в options.provider в инит произойдет обычная инициализация.

PS: НА данный момент если вы выпустите новую версию SDK, нам снова придется вносить свои изменения, без них нам не как.
Благодарю за внимание)
 

Max

Administrator
Staff member
Есть возможность указать приоритетный провайдер:
Code:
Flashphoner.init({preferredMediaProvider:"WebRTC"});
Есть возможность получить список медиа провайдеров уже после инициализации:
Code:
Flashphoner.getMediaProviders();
Есть возможность исключить Flash совсем, если он не нужен:
Code:
flashphoner-no-flash.js
Это сборка API без Flash.

Есть возможность собрать только требуемых провайдеров:
https://github.com/flashphoner/flashphoner_client/blob/wcs_api-2.0/Gruntfile.js#L73

В вашем случае можно использовать flashphoner-no-flash.js и выставить preferredMediaProvider в WebRTC.
После инициализации можно вызвать Flashphoner.getMediaProviders(); и проверить какие провайдеры были действительно подгружены.
 
Top