Safari для Iphone и Ipad самообслуживания заморозится, если установить для звука значение true - PullRequest
0 голосов
/ 16 апреля 2019

Я провел видеочат в приложении, используя webrtc api и jQuery JavaScript, но у меня есть проблема в Safari на iPhone и iPad: само видео останавливается, когда я получаю удаленное видео, это происходит только тогда, когда для звука установлено значение true в моих настройках,

 var constraint = {
        video: {
            minWidth: 270,
            minHeight: 270,
            minFrameRate: 25,
            maxWidth: 270,
            maxHeight: 270,
            maxFrameRate: 25,
            facingMode: 'user'
        },
        audio: false
    }

Может кто-нибудь помочь мне, пожалуйста

1 Ответ

0 голосов
/ 17 апреля 2019

Мне удалось успешно обойтись, я разделяю аудиопоток и видеопоток, клонируя свой глобальный поток, и обрабатываю их по-разному, вот код, помогающий мне сделать это, я надеюсь, что это поможет кому-то.

function makeAudioOnlyStreamFromExistingStream(stream) {
  var audioStream = stream.clone();
  var videoTracks = audioStream.getVideoTracks();
  for (var i = 0, len = videoTracks.length; i < len; i++) {
    audioStream.removeTrack(videoTracks[i]);
  }
  console.log('created audio only stream, original stream tracks: ', stream.getTracks());
  console.log('created audio only stream, new stream tracks: ', audioStream.getTracks());
  return audioStream;
}

function makeVideoOnlyStreamFromExistingStream(stream) {
  var videoStream = stream.clone();
  var audioTracks = videoStream.getAudioTracks();
  for (var i = 0, len = audioTracks.length; i < len; i++) {
    videoStream.removeTrack(audioTracks[i]);
  }
  console.log('created video only stream, original stream tracks: ', stream.getTracks());
  console.log('created video only stream, new stream tracks: ', videoStream.getTracks());
  return videoStream;
}
function handleSuccess(stream) {
  var audioOnlyStream = makeAudioOnlyStreamFromExistingStream(stream);
  var videoOnlyStream = makeVideoOnlyStreamFromExistingStream(stream);
  // Do stuff with all the streams...
}
function handleError(error) {
  console.error('getUserMedia() error: ', error);
}
var constraints = {
  audio: true,
  video: true,
};
navigator.mediaDevices.getUserMedia(constraints).
    then(handleSuccess).catch(handleError);

полный пример здесь

https://webrtchacks.com/guide-to-safari-webrtc/

...