У меня проблема из-за кода, который я использовал для запроса аудио / видео, он работает в Chrome, Mozilla Firefox, но в IE11 он не работает.
Я уже читал это:
https://github.com/addyosmani/getUserMedia.js
и применил большинство изменений, чтобы заставить его работать в IE11, однако я не получаю результатов, что не так в моем коде, который не позволяет мне получить видео в этом браузере.
function initiateMedia(obj){
constraint = "";
if (obj.video= = "true" && obj.audio= = "true"){
constraint = {
audio:true,
video:{
width:{max:380},
height:{max:260}
}
}
//Set Video Element
$("#mediacontainer").html('<video id = "io-videocam" muted = "muted"></video>');
mediactrl = document.querySelector('video');
mediaType = "video/webm";
return "Audio and Video input found! You can now start recording!";
}else if (obj.video= = "null" && obj.audio= = "true"){ //audio input only
constraint = {audio:true, video: false}
//Set Audio Element
$("#mediacontainer").html('<audio id = "io-audio" controls muted = "muted"></audio>');
mediactrl = document.querySelector('audio');
mediaType = "audio/mpeg";
return ("Audio input found! You can now start recording!");
}else if (obj.video= = "null" && obj.audio= = "null"){ //no audio or video input
console.info("No Audio or Video input found");
return false;
}
}
function listUserMedia(){
if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
console.info("enumerateDevices() not supported.");
return;
}
var media = navigator.mediaDevices.enumerateDevices();
media.then(function(devices) {
var useVideo=null;
var useAudio=null;
devices.forEach(function(device) {
//console.info(device.kind + ": " + device.label + " id = " + device.deviceId);
if (device.kind= = "audioinput"){
useAudio = "true";
}
if (device.kind= = "videoinput"){
useVideo = "true";
}
});
if (typeof(Storage) !== "undefined") {
sessionStorage.setItem('useAudio', useAudio);
sessionStorage.setItem('useVideo', useVideo);
} else {
console.info("Unable to set SessionStorage");
}
});
media.catch(function(err) {
console.info(err.name + ": " + err.message);
});
if (typeof(Storage) !== "undefined") {
return {"audio":sessionStorage.getItem('useAudio'),"video":sessionStorage.getItem('useVideo')};
} else {
console.info("Unable to get SessionStorage");
}
return null;
}
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
function requestMedia(string){
if (typeof MediaRecorder === 'undefined' || !navigator.getUserMedia){
alert('MediaRecorder/getUserMedia no supported on your browser, kindly use Firefox 36+');
}else{
//initiateMedia(listUserMedia());
//navigator.getUserMedia(constraint, startRecording, errorCallback);
var media = navigator.mediaDevices.getUserMedia(constraint);
media.then(function(mediaStream){
stream=mediaStream;
var url = window.URL || window.webkitURL;
if (mediaType!=null){
if (mediaType= = "video/webm"){
mediactrl.src = url ? url.createObjectURL(stream) : stream;
mediactrl.onloadedmetadata = function(e) {
mediactrl.play();
};
}else{
mediactrl.src = url ? url.createObjectURL(stream) : stream;
mediactrl.onloadedmetadata = function(e) {
mediactrl.play();
}
}
$("#requestmedia").addClass("btndisabled faded-effect");
$("#videocontrol").removeClass("btndisabled").prop("disabled",false);
$("#mediaerror").html(string).css({"display":"block","color":"#003666"});
}
});
media.catch(function(err){
errorCallback(err);
});
}
}
function startRecording(stream){
/*
if (typeof MediaRecorder.isTypeSupported == 'function'){
if (MediaRecorder.isTypeSupported('video/webm;codecs=vp9')) {
var options = {mimeType: 'video/webm;codecs=vp9'};
} else if (MediaRecorder.isTypeSupported('video/webm;codecs=vp8')) {
var options = {mimeType: 'video/webm;codecs=vp8'};
}
mediaRecorder = new MediaRecorder(stream, options);
}else{
mediaRecorder = new MediaRecorder(stream); //Default codec for browser
}
*/
mediaRecorder = new MediaRecorder(stream);
mediaRecorder.start(10);
mediaRecorder.ondataavailable = function(e){
chunks.push(e.data);
};
mediaRecorder.onerror = function(e){
console.info("Error: "+e)
};
mediaRecorder.onstop = function(){
var blob = new Blob(chunks, {type: mediaType});
chunks = [];
var mediaURL = (window.webkitURL || window.URL).createObjectURL(blob);
sendFileToServer(blob);
//console.info(mediaURL);
};
}
function errorCallback(error){
console.info('navigator.getUserMedia error: ', error);
}
function releaseDevice(){
if (stream && stream.stop){
//stream.stop();
if (mediaType= = "video/webm"){
stream.getVideoTracks()[0].stop();
stream.getAudioTracks()[0].stop();
}else{
stream.getAudioTracks()[0].stop();
}
}
stream=null;
}
Проверьте ссылку, которую я поместил, это обходной путь
Да, вероятно, их .swf - это обходной путь в качестве запасного варианта. Вы пробовали это в своем коде?
Да, но я не могу это реализовать: \ Вот почему я спрашиваю



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)

