function GetRecorderType(mediaStream, config) {
    var recorder;

    // StereoAudioRecorder can work with all three: Edge, Firefox and Chrome
    // todo: detect if it is Edge, then auto use: StereoAudioRecorder
    if (isChrome || isEdge || isOpera) {
        // Media Stream Recording API has not been implemented in chrome yet;
        // That's why using WebAudio API to record stereo audio in WAV format
        recorder = StereoAudioRecorder;
    }

    if (typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder.prototype && !isChrome) {
        recorder = MediaStreamRecorder;
    }

    // video recorder (in WebM format)
    if (config.type === 'video' && (isChrome || isOpera)) {
        recorder = WhammyRecorder;

        if (typeof WebAssemblyRecorder !== 'undefined' && typeof ReadableStream !== 'undefined') {
            recorder = WebAssemblyRecorder;
        }
    }

    // video recorder (in Gif format)
    if (config.type === 'gif') {
        recorder = GifRecorder;
    }

    // html2canvas recording!
    if (config.type === 'canvas') {
        recorder = CanvasRecorder;
    }

    if (isMediaRecorderCompatible() && recorder !== CanvasRecorder && recorder !== GifRecorder && typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder.prototype) {
        if (getTracks(mediaStream, 'video').length || getTracks(mediaStream, 'audio').length) {
            // audio-only recording
            if (config.type === 'audio') {
                if (typeof MediaRecorder.isTypeSupported === 'function' && MediaRecorder.isTypeSupported('audio/webm')) {
                    recorder = MediaStreamRecorder;
                }
                // else recorder = StereoAudioRecorder;
            } else {
                // video or screen tracks
                if (typeof MediaRecorder.isTypeSupported === 'function' && MediaRecorder.isTypeSupported('video/webm')) {
                    recorder = MediaStreamRecorder;
                }
            }
        }
    }

    if (mediaStream instanceof Array && mediaStream.length) {
        recorder = MultiStreamRecorder;
    }

    if (config.recorderType) {
        recorder = config.recorderType;
    }

    if (!config.disableLogs && !!recorder && !!recorder.name) {
        console.log('Using recorderType:', recorder.name || recorder.constructor.name);
    }

    if (!recorder && isSafari) {
        recorder = MediaStreamRecorder;
    }

    return recorder;
}
function GetRecorderType(mediaStream, config) {
    var recorder;

    // StereoAudioRecorder can work with all three: Edge, Firefox and Chrome
    // todo: detect if it is Edge, then auto use: StereoAudioRecorder
    if (isChrome || isEdge || isOpera) {
        // Media Stream Recording API has not been implemented in chrome yet;
        // That's why using WebAudio API to record stereo audio in WAV format
        recorder = StereoAudioRecorder;
    }

    if (typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder.prototype && !isChrome) {
        recorder = MediaStreamRecorder;
    }

    // video recorder (in WebM format)
    if (config.type === 'video' && (isChrome || isOpera)) {
        recorder = WhammyRecorder;

        if (typeof WebAssemblyRecorder !== 'undefined' && typeof ReadableStream !== 'undefined') {
            recorder = WebAssemblyRecorder;
        }
    }

    // video recorder (in Gif format)
    if (config.type === 'gif') {
        recorder = GifRecorder;
    }

    // html2canvas recording!
    if (config.type === 'canvas') {
        recorder = CanvasRecorder;
    }

    if (isMediaRecorderCompatible() && recorder !== CanvasRecorder && recorder !== GifRecorder && typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder.prototype) {
        if (getTracks(mediaStream, 'video').length || getTracks(mediaStream, 'audio').length) {
            // audio-only recording
            if (config.type === 'audio') {
                if (typeof MediaRecorder.isTypeSupported === 'function' && MediaRecorder.isTypeSupported('audio/webm')) {
                    recorder = MediaStreamRecorder;
                }
                // else recorder = StereoAudioRecorder;
            } else {
                // video or screen tracks
                if (typeof MediaRecorder.isTypeSupported === 'function' && MediaRecorder.isTypeSupported('video/webm')) {
                    recorder = MediaStreamRecorder;
                }
            }
        }
    }

    if (mediaStream instanceof Array && mediaStream.length) {
        recorder = MultiStreamRecorder;
    }

    if (config.recorderType) {
        recorder = config.recorderType;
    }

    if (!config.disableLogs && !!recorder && !!recorder.name) {
        console.log('Using recorderType:', recorder.name || recorder.constructor.name);
    }

    if (!recorder && isSafari) {
        recorder = MediaStreamRecorder;
    }

    return recorder;
}
function GetRecorderType ( mediaStream , config ) { var recorder ; // StereoAudioRecorder can work with all three: Edge, Firefox and Chrome // todo: detect if it is Edge, then auto use: StereoAudioRecorder if ( isChrome || isEdge || isOpera ) { // Media Stream Recording API has not been implemented in chrome yet; // That's why using WebAudio API to record stereo audio in WAV format recorder = StereoAudioRecorder ; } if ( typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder . prototype && ! isChrome ) { recorder = MediaStreamRecorder ; } // video recorder (in WebM format) if ( config . type === 'video' && ( isChrome || isOpera ) ) { recorder = WhammyRecorder ; if ( typeof WebAssemblyRecorder !== 'undefined' && typeof ReadableStream !== 'undefined' ) { recorder = WebAssemblyRecorder ; } } // video recorder (in Gif format) if ( config . type === 'gif' ) { recorder = GifRecorder ; } // html2canvas recording! if ( config . type === 'canvas' ) { recorder = CanvasRecorder ; } if ( isMediaRecorderCompatible ( ) && recorder !== CanvasRecorder && recorder !== GifRecorder && typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder . prototype ) { if ( getTracks ( mediaStream , 'video' ) . length || getTracks ( mediaStream , 'audio' ) . length ) { // audio-only recording if ( config . type === 'audio' ) { if ( typeof MediaRecorder . isTypeSupported === 'function' && MediaRecorder . isTypeSupported ( 'audio/webm' ) ) { recorder = MediaStreamRecorder ; } // else recorder = StereoAudioRecorder; } else { // video or screen tracks if ( typeof MediaRecorder . isTypeSupported === 'function' && MediaRecorder . isTypeSupported ( 'video/webm' ) ) { recorder = MediaStreamRecorder ; } } } } if ( mediaStream instanceof Array && mediaStream . length ) { recorder = MultiStreamRecorder ; } if ( config . recorderType ) { recorder = config . recorderType ; } if ( ! config . disableLogs && ! ! recorder && ! ! recorder . name ) { console . log ( 'Using recorderType:' , recorder . name || recorder . constructor . name ) ; } if ( ! recorder && isSafari ) { recorder = MediaStreamRecorder ; } return recorder ; }
__________________ GetRecorderType.js 
{@link GetRecorderType} is an inner/private helper for {@link RecordRTC}.
@summary It returns best recorder-type available for your browser.
@license {@link https://github.com/muaz-khan/RecordRTC#license|MIT}
@author {@link http://www.MuazKhan.com|Muaz Khan}
@typedef GetRecorderType
@class
@example
var RecorderType = GetRecorderType(options);
var recorder = new RecorderType(options);
@see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}
@param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.
@param {object} config - {type:"video", disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, video: HTMLVideoElement, etc.}
__________________ GetRecorderType . js {
Get recorder type