@@ -248,16 +248,49 @@ export class SfuWhipResource implements WhipResource {
248248 originEdgeEndpointDesc . audio . ssrcs = [ parseInt ( audioSsrc ) ] ;
249249 }
250250
251- if ( offerVideo && videoMainSsrc && videoRtxSsrc && videoMediaStream ) {
252- let videoStreamId = offerVideo . ssrcs . at
251+ if ( offerVideo ) {
252+ originEdgeEndpointDesc . video [ "payload-types" ] [ 0 ] . id = offerVideo . rtp [ 0 ] . payload ;
253+ originEdgeEndpointDesc . video [ "payload-types" ] [ 0 ] . name = offerVideo . rtp [ 0 ] . codec ;
254+ if ( offerVideo . rtp [ 1 ] ) {
255+ originEdgeEndpointDesc . video [ "payload-types" ] [ 1 ] . id = offerVideo . rtp [ 1 ] . payload ;
256+ originEdgeEndpointDesc . video [ "payload-types" ] [ 1 ] . parameters = { 'apt' : offerVideo . rtp [ 0 ] . payload . toString ( ) } ;
257+ } else {
258+ originEdgeEndpointDesc . video [ "payload-types" ] = originEdgeEndpointDesc . video [ "payload-types" ] . filter ( pt => pt . name !== 'rtx' ) ;
259+ }
260+ originEdgeEndpointDesc . video [ "rtp-hdrexts" ] = [ ] ;
261+ offerVideo . ext && offerVideo . ext . forEach ( ext => originEdgeEndpointDesc . video [ "rtp-hdrexts" ] . push ( { id : ext . value , uri : ext . uri } ) ) ;
253262
254- originEdgeEndpointDesc . video . streams = [
255- {
256- sources : [ { main : parseInt ( videoMainSsrc ) , feedback : parseInt ( videoRtxSsrc ) } ] ,
257- id : videoMediaStream ,
258- content : 'video'
259- }
260- ] ;
263+ originEdgeEndpointDesc . video [ "payload-types" ] . forEach ( payloadType => {
264+ const rtcpFbs = offerVideo . rtcpFb . filter ( element => element . payload === payloadType . id ) ;
265+ payloadType [ "rtcp-fbs" ] = rtcpFbs . map ( rtcpFb => {
266+ return {
267+ type : rtcpFb . type ,
268+ subtype : rtcpFb . subtype
269+ } ;
270+ } ) ;
271+ } ) ;
272+ }
273+
274+ if ( offerVideo && videoMainSsrc && videoMediaStream ) {
275+ if ( videoRtxSsrc ) {
276+ let videoStreamId = offerVideo . ssrcs . at
277+
278+ originEdgeEndpointDesc . video . streams = [
279+ {
280+ sources : [ { main : parseInt ( videoMainSsrc ) , feedback : parseInt ( videoRtxSsrc ) } ] ,
281+ id : videoMediaStream ,
282+ content : 'video'
283+ }
284+ ] ;
285+ } else {
286+ originEdgeEndpointDesc . video . streams = [
287+ {
288+ sources : [ { main : parseInt ( videoMainSsrc ) } ] ,
289+ id : videoMediaStream ,
290+ content : 'video'
291+ }
292+ ] ;
293+ }
261294 }
262295
263296 console . log ( `Configuring origin edge with\n${ JSON . stringify ( originEdgeEndpointDesc ) } ` ) ;
@@ -477,6 +510,11 @@ export class SfuWhipResource implements WhipResource {
477510 if ( media . type !== 'audio' && media . type !== 'video' ) {
478511 continue ;
479512 }
513+ if ( media . type === 'video' ) {
514+ if ( ! media . rtp . some ( rtp => rtp . codec === 'VP8' ) ) {
515+ this . mediaStreams . video . codec = 'H264' ;
516+ }
517+ }
480518
481519 let mediaStreams = media . type === 'audio' ? audioMediaStreams : videoMediaStreams ;
482520 media . ssrcs . forEach ( ssrc => {
0 commit comments