2014-09-04 4 views
3

Ive играл с MediaRecorder, чтобы сохранить MediaStream, который был создан getUserMedia. Я очень доволен результатами, но мне нужно что-то подобное, которое имеет лучшую поддержку кросс-браузера.MediaRecorder Alternatives

Вот некоторые примеры кода для того, как я использую MediaRecorder (просто чтобы дать вам некоторый контекст):

var mediaRec; 
navigator.getUserMedia({ 
    audio:true 
},function(stream){ 
    mediaRec=new MediaRecorder(stream); 
    mediaRec.start(10000); 
    mediaRec.ondataavailable=function(e){ 

    }; 
},function(err){}); 

Кажется, что MediaRecorder only works in the Firefox browser and the Firefox OS.

Однако MediaRecorder is part of the W3C Specification и Google Chrome has stated it intends to support it in a future release, но какие варианты у меня есть?

Я знаю, что такие плагины, как Flash и Silverlight, могут достигать того же, что и MediaRecorder, но мне нужно решение javascript.

Может ли кто-нибудь помочь?

ответ

1

Все остальные доступные опции будут использовать API высокого уровня и реализованы на уровне браузера/JavaScript. Таким образом, никто не будет действительно сопоставим с API MediaRecorder, предоставляемым Firefox, поскольку он интегрирован в браузер и имеет преимущество «нижнего уровня» в реализации браузера.

Один из вариантов Я знаю, что работает точно (хотя использует Web Audio API) является Matt Diamond's Recorderjs.

И пример использования Recorderjs, взятых из github Мэтта.

var audio_context; 
    var recorder; 

    function startUserMedia(stream) { 
    var input = audio_context.createMediaStreamSource(stream); 

    input.connect(audio_context.destination); 

    recorder = new Recorder(input); 
    } 

    function startRecording() { 
    recorder.record(); 
    } 

    function stopRecording(button) { 
    recorder.stop(); 
    createDownloadLink(); 

    recorder.clear(); 
    } 

    function createDownloadLink() { 
    recorder.exportWAV(function(blob) { 
     var url = URL.createObjectURL(blob); 
     var li = document.createElement('li'); 
     var au = document.createElement('audio'); 
     var hf = document.createElement('a'); 

     au.controls = true; 
     au.src = url; 
     hf.href = url; 
     hf.download = new Date().toISOString() + '.wav'; 
     hf.innerHTML = hf.download; 
     li.appendChild(au); 
     li.appendChild(hf); 
     recordingslist.appendChild(li); 
    }); 
    } 

    window.onload = function init() { 
    try { 
     // webkit shim 
     window.AudioContext = window.AudioContext || window.webkitAudioContext; 
     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia; 
     window.URL = window.URL || window.webkitURL; 

     audio_context = new AudioContext; 

    navigator.getUserMedia({audio: true}, startUserMedia, function(e) { 
     console.log('No live audio input: ' + e); 
    });