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