#javascript #jquery #ios #streaming #webrtc
#javascript #jquery #iOS #потоковая передача #webrtc
Вопрос:
Я создал видеочат в приложении, используя 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. Может быть, это поможет: webkit.org/blog/6784/new-video-policies-for-ios Политики iOS WebKit
Ответ №1:
Я смог успешно обойти, я разделяю аудиопоток и видеопоток, клонируя свой глобальный поток, и обрабатываю оба по-разному, вот код, который поможет мне сделать это, я надеюсь, что это кому-то поможет.
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);
полный пример здесь