2013-08-30 2 views
0

Мне нужно захватить звук микрофона в IE10. До сих пор у меня есть два полу-рабочие растворы:Захват микрофона в IE10

  • GetUserMedia из экспериментальной WebRTC плагин от Microsoft: http://www.html5labs.com/prototypes/media-capture-api-(2nd-updated)/media-capture-api-(2nd-update)/info Проблема с этим состоит в том, что в то время как я могу захватить и воспроизводить аудио в браузере, я не могу отправить аудио к серверу. В частности, не ясно, как извлечь аудиоданные из «Blob» объекта:

    function msStopRecordCallback(blob) { 
         console.log(blob) // outputs {} 
         console.dir(blob) // outputs {} 
    
         playMediaObject.Play(blob); // This works! 
    
    } 
    
  • jRecorder: http://www.sajithmr.me/jrecorder-jquery Проблема с этим состоит в том, что он опирается на Flash, чтобы захватить звук, который что-то я хотелось бы избежать.

Есть ли другие способы захвата аудио в IE10?

+0

Нет; вам нужно использовать плагин, и вы определили два допустимых варианта. – EricLaw

ответ

0

Я понимаю, что мой ответ немного поздно, но ... Вы можете загрузить двоичный объект на сервер следующим образом (Javascript):

function saveBlob(blob) 
{ 
    var uploader = new CustomXMLHttpRequest(); 
    uploader.onpartreceived = function (response) 
    { 
    // TODO: handle the server response here 
    }; 

    var base = window.location.toString(); 
    var uploadService = base.substr(0, base.lastIndexOf("/")) + "/api/upload"; 

    uploader.open("POST", uploadService, true); 

    uploader.responseType = "text"; 

    var form = new FormData(); 
    form.append("fname", blob, "audio.wav"); 

    uploader.send(form); 
} 

На стороне сервера, вы можете рассматривать это как блоб прикрепление файла, например (C#):

public class UploadController : ApiController 
{ 
    public async Task<HttpResponseMessage> PostFile() 
    { 
     // Check if the request contains multipart/form-data. 
     if (!Request.Content.IsMimeMultipartContent()) 
     { 
     throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
     } 

     var root = HttpContext.Current.Server.MapPath("~/App_Data"); 
     var provider = new MultipartFormDataStreamProvider(root); 

     try 
     { 
     // Read the form data and return an async task. 
     await Request.Content.ReadAsMultipartAsync(provider); 

     var fileName = ""; 

     // get the uploaded files. 
     foreach (var data in provider.FileData) 
     { 
      var file = new FileInfo(data.LocalFileName); 

      // TODO: handle received file here 
     } 

     if (string.IsNullOrEmpty(fileName)) 
     { 
      return Request.CreateResponse(HttpStatusCode.UnsupportedMediaType); 
     } 

     return Request.CreateResponse(HttpStatusCode.OK); 
     } 
     catch (System.Exception e) 
     { 
     return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); 
     } 
    } 
} 

Надеюсь, это поможет.

Смежные вопросы