@@ -578,9 +578,14 @@ var Conference = function (rpcClient, selfRpcId) {
578
578
const addStream = ( id , locality , media , info ) => {
579
579
info . origin = streams [ id ] ? streams [ id ] . info . origin : { isp :"isp" , region :"region" } ;
580
580
if ( info . analytics && subscriptions [ info . analytics ] ) {
581
- const sourceTrack = subscriptions [ info . analytics ] . media . tracks
582
- . find ( t => t . type === 'video' ) ;
583
- const sourceId = streams [ sourceTrack . from ] ? sourceTrack . from : trackOwners [ sourceTrack . from ] ;
581
+ let sourceId ;
582
+ if ( subscriptions [ info . analytics ] . isInConnecting ) {
583
+ sourceId = subscriptions [ info . analytics ] . media . video . from ;
584
+ } else {
585
+ const sourceTrack = subscriptions [ info . analytics ] . media . tracks
586
+ . find ( t => t . type === 'video' ) ;
587
+ sourceId = streams [ sourceTrack . from ] ? sourceTrack . from : trackOwners [ sourceTrack . from ] ;
588
+ }
584
589
if ( streams [ sourceId ] ) {
585
590
info . origin = streams [ sourceId ] . info . origin ;
586
591
} else {
@@ -1121,6 +1126,9 @@ var Conference = function (rpcClient, selfRpcId) {
1121
1126
} ;
1122
1127
1123
1128
const isResolutionAvailable = ( streamVideo , resolution ) => {
1129
+ if ( ! streamVideo . parameters || ! streamVideo . parameters . resolution ) {
1130
+ return true ;
1131
+ }
1124
1132
if ( streamVideo . parameters && streamVideo . parameters . resolution && isResolutionEqual ( streamVideo . parameters . resolution , resolution ) ) {
1125
1133
return true ;
1126
1134
}
@@ -1213,29 +1221,31 @@ var Conference = function (rpcClient, selfRpcId) {
1213
1221
return callback ( 'callback' , 'error' , 'Participant has not joined' ) ;
1214
1222
}
1215
1223
1216
- if ( ( subDesc . media . audio && ! participants [ participantId ] . isSubscribePermitted ( 'audio' ) )
1217
- || ( subDesc . media . video && ! participants [ participantId ] . isSubscribePermitted ( 'video' ) ) ) {
1218
- return callback ( 'callback' , 'error' , 'unauthorized' ) ;
1224
+ let audioTrack = null ;
1225
+ let videoTrack = null ;
1226
+ if ( subDesc . type === 'webrtc' ) {
1227
+ audioTrack = subDesc . media . tracks . find ( t => t . type === 'audio' ) ;
1228
+ videoTrack = subDesc . media . tracks . find ( t => t . type === 'video' ) ;
1229
+ } else {
1230
+ audioTrack = subDesc . media . audio ;
1231
+ videoTrack = subDesc . media . video ;
1219
1232
}
1220
- if ( subDesc . type === 'webrtc' && subDesc . media . tracks ) {
1221
- if ( ( subDesc . media . tracks . find ( t => t . type === 'audio' )
1222
- && ! participants [ participantId ] . isSubscribePermitted ( 'audio' ) )
1223
- || ( subDesc . media . tracks . find ( t => t . type === 'video' )
1224
- && ! participants [ participantId ] . isSubscribePermitted ( 'video' ) ) ) {
1225
- return callback ( 'callback' , 'error' , 'unauthorized' ) ;
1226
- }
1233
+
1234
+ if ( ( audioTrack && ! participants [ participantId ] . isSubscribePermitted ( 'audio' ) )
1235
+ || ( videoTrack && ! participants [ participantId ] . isSubscribePermitted ( 'video' ) ) ) {
1236
+ return callback ( 'callback' , 'error' , 'unauthorized' ) ;
1227
1237
}
1228
1238
1229
1239
if ( subscriptions [ subscriptionId ] ) {
1230
1240
return callback ( 'callback' , 'error' , 'Subscription exists' ) ;
1231
1241
}
1232
1242
1233
1243
var requestError = { message : '' } ;
1234
- if ( subDesc . media . audio && ! validateAudioRequest ( subDesc . type , subDesc . media . audio , requestError ) ) {
1244
+ if ( audioTrack && ! validateAudioRequest ( subDesc . type , audioTrack , requestError ) ) {
1235
1245
return callback ( 'callback' , 'error' , 'Target audio stream does NOT satisfy:' + requestError . message ) ;
1236
1246
}
1237
1247
1238
- if ( subDesc . media . video && ! validateVideoRequest ( subDesc . type , subDesc . media . video , requestError ) ) {
1248
+ if ( videoTrack && ! validateVideoRequest ( subDesc . type , videoTrack , requestError ) ) {
1239
1249
return callback ( 'callback' , 'error' , 'Target video stream does NOT satisfy:' + requestError . message ) ;
1240
1250
}
1241
1251
@@ -1253,9 +1263,10 @@ var Conference = function (rpcClient, selfRpcId) {
1253
1263
const rtcSubInfo = translateRtcSubIfNeeded ( subDesc ) ;
1254
1264
// Set formatPreference
1255
1265
rtcSubInfo . tracks . forEach ( track => {
1256
- const source = streams [ track . from ] . media . tracks . find ( t => t . type === track . type ) ;
1266
+ const streamId = streams [ track . from ] ? track . from : trackOwners [ track . from ] ;
1267
+ const source = getStreamTrack ( track . from , track . type ) ;
1257
1268
const formatPreference = { } ;
1258
- if ( streams [ track . from ] . type === 'forward' ) {
1269
+ if ( streams [ streamId ] . type === 'forward' ) {
1259
1270
formatPreference . preferred = source . format ;
1260
1271
source . optional && source . optional . format && ( formatPreference . optional = source . optional . format ) ;
1261
1272
} else {
0 commit comments