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;
};