trigger another keyframe send for audio-only focus. fixes #32

This commit is contained in:
Philipp Hancke 2014-02-13 07:07:24 +01:00
parent 4ef199304d
commit cc6653dc2f
1 changed files with 38 additions and 1 deletions

39
app.js
View File

@ -130,13 +130,14 @@ $(document).bind('mediafailure.jingle', function () {
$(document).bind('remotestreamadded.jingle', function (event, data, sid) {
function waitForRemoteVideo(selector, sid) {
var sess = connection.jingle.sessions[sid];
if (data.stream.id == 'mixedmslabel') return;
videoTracks = data.stream.getVideoTracks();
if (videoTracks.length === 0 || selector[0].currentTime > 0) {
RTC.attachMediaStream(selector, data.stream); // FIXME: why do i have to do this for FF?
$(document).trigger('callactive.jingle', [selector, sid]);
console.log('waitForremotevideo', sess.peerconnection.iceConnectionState, sess.peerconnection.signalingState);
} else {
setTimeout(function () { waitForRemoteVideo(selector, sid); }, 100);
setTimeout(function () { waitForRemoteVideo(selector, sid); }, 250);
}
}
var sess = connection.jingle.sessions[sid];
@ -220,8 +221,44 @@ $(document).bind('remotestreamadded.jingle', function (event, data, sid) {
updateLargeVideo($(this).attr('src'), false, 1);
}
);
// an attempt to work around https://github.com/jitsi/jitmeet/issues/32
if (data.peerjid && sess.peerjid == data.peerjid &&
data.stream.getVideoTracks().length == 0 &&
connection.jingle.localStream.getVideoTracks().length > 0) {
window.setTimeout(function() {
sendKeyframe(sess.peerconnection);
}, 3000);
}
});
// an attempt to work around https://github.com/jitsi/jitmeet/issues/32
function sendKeyframe(pc) {
console.log('sendkeyframe', pc.iceConnectionState);
if (pc.iceConnectionState != 'connected') return; // safe...
pc.setRemoteDescription(
pc.remoteDescription,
function () {
pc.createAnswer(
function (modifiedAnswer) {
pc.setLocalDescription(modifiedAnswer,
function () {
},
function (error) {
console.log('triggerKeyframe setLocalDescription failed', error);
}
);
},
function (error) {
console.log('triggerKeyframe createAnswer failed', error);
}
);
},
function (error) {
console.log('triggerKeyframe setRemoteDescription failed', error);
}
);
}
$(document).bind('callincoming.jingle', function (event, sid) {
var sess = connection.jingle.sessions[sid];
// TODO: check affiliation and/or role