why videoproducer always useNack:false

mediasoup:3.5.15
mediasoup-client:3.6.7
codec:vp8
simulcast:yes
question: videoConsumer useNack:true, but videoProducer always useNack:false ; error throw by mediasoup, is anything wrong?

2020-09-24T09:41:09.332Z mediasoup:ERROR:Channel [pid:4747 webrtc::GoogCcNetworkController::OnRemoteBitrateReport() | Received REMB for packet feedback only GoogCC
producer.dump():
{
  "id": "9106a98b-c9fd-4a20-bf3d-ec4fe096bdba",
  "kind": "video",
  "paused": false,
  "rtpMapping": {
    "codecs": [
      {
        "mappedPayloadType": 101,
        "payloadType": 101
      }
    ],
    "encodings": [
      {
        "mappedSsrc": 562263627,
        "rid": null,
        "ssrc": 812637478
      },
      {
        "mappedSsrc": 562263628,
        "rid": null,
        "ssrc": 812637479
      },
      {
        "mappedSsrc": 562263629,
        "rid": null,
        "ssrc": 812637480
      }
    ]
  },
  "rtpParameters": {
    "codecs": [
      {
        "clockRate": 90000,
        "mimeType": "video/VP8",
        "parameters": {},
        "payloadType": 101,
        "rtcpFeedback": [
          {
            "parameter": "pli",
            "type": "nack"
          },
          {
            "parameter": "fir",
            "type": "ccm"
          }
        ]
      }
    ],
    "encodings": [
      {
        "codecPayloadType": 101,
        "ksvc": false,
        "scalabilityMode": "S1T3",
        "spatialLayers": 1,
        "ssrc": 812637478,
        "temporalLayers": 3
      },
      {
        "codecPayloadType": 101,
        "ksvc": false,
        "scalabilityMode": "S1T3",
        "spatialLayers": 1,
        "ssrc": 812637479,
        "temporalLayers": 3
      },
      {
        "codecPayloadType": 101,
        "ksvc": false,
        "scalabilityMode": "S1T3",
        "spatialLayers": 1,
        "ssrc": 812637480,
        "temporalLayers": 3
      }
    ],
    "headerExtensions": [
      {
        "encrypt": false,
        "id": 6,
        "parameters": {},
        "uri": "http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07"
      },
      {
        "encrypt": false,
        "id": 7,
        "parameters": {},
        "uri": "urn:ietf:params:rtp-hdrext:framemarking"
      },
      {
        "encrypt": false,
        "id": 11,
        "parameters": {},
        "uri": "urn:3gpp:video-orientation"
      },
      {
        "encrypt": false,
        "id": 12,
        "parameters": {},
        "uri": "urn:ietf:params:rtp-hdrext:toffset"
      }
    ],
    "rtcp": {
      "cname": "jcr6VMzn1AVb4Dp8",
      "reducedSize": true
    }
  },
  "rtpStreams": [
    {
      "params": {
        "clockRate": 90000,
        "cname": "jcr6VMzn1AVb4Dp8",
        "mimeType": "video/VP8",
        "payloadType": 101,
        "spatialLayers": 1,
        "ssrc": 812637478,
        "temporalLayers": 3,
        "useDtx": false,
        "useFir": true,
        "useInBandFec": false,
        "useNack": false,
        "usePli": true
      },
      "score": 10
    },
    {
      "params": {
        "clockRate": 90000,
        "cname": "jcr6VMzn1AVb4Dp8",
        "mimeType": "video/VP8",
        "payloadType": 101,
        "spatialLayers": 1,
        "ssrc": 812637479,
        "temporalLayers": 3,
        "useDtx": false,
        "useFir": true,
        "useInBandFec": false,
        "useNack": false,
        "usePli": true
      },
      "score": 10
    }
  ],
  "traceEventTypes": "",
  "type": "simulcast"
}

The codec rtcpFeedback does not announce support for generic “nack”, which is represented by:

{
  "type": "nack"
}

Note there is no parameter property.

The client endpoint is not offering it. Which client endpoint are you using?

mediasoup-client:Chrome74

the code to create producer:

	this._webcamProducer = await this._sendTransport.produce(
					{
						track,
						encodings:[ { scaleResolutionDownBy: 4 },{ scaleResolutionDownBy: 2 },{ scaleResolutionDownBy: 1 }],
						codecOptions :
						{
							videoGoogleStartBitrate : 1000
						},
						codec:{
                                 clockRate: 90000,
                                 kind: "video",
                                 mimeType: "video/VP8",
                                 parameters: {},
                                 preferredPayloadType: 101,
                                 rtcpFeedback:[
                                     {type: "goog-remb", parameter: ""},
                                     {type: "transport-cc", parameter: ""},
                                     {type: "ccm", parameter: "fir"},
                                     {type: "nack", parameter: ""},
                                     {type: "nack", parameter: "pli"}}
                                 ]}
                       });

the config of server:

		routerOptions :
		{
			mediaCodecs :
			[
				{
					kind      : 'audio',
					mimeType  : 'audio/opus',
					clockRate : 48000,
					channels  : 2
				},
				{
					kind       : 'video',
					mimeType   : 'video/VP8',
					clockRate  : 90000,
					parameters :
					{
						'x-google-start-bitrate' : 1000
					}
				},
				{
					kind       : 'video',
					mimeType   : 'video/VP9',
					clockRate  : 90000,
					parameters :
					{
						'profile-id'             : 2,
						'x-google-start-bitrate' : 1000
					}
				},
				{
					kind       : 'video',
					mimeType   : 'video/h264',
					clockRate  : 90000,
					parameters :
					{
						'packetization-mode'      : 1,
						'profile-level-id'        : '64001f',
						'level-asymmetry-allowed' : 1,
						'x-google-start-bitrate'  : 500
					}
				}
			]
		}

Also verify the RtpParameters you are providing to transport.produce() in server side.

in server-side

const producer = await transport.produce(
	{
		kind:'video'
		rtpParameters:{
                         codecs: [
                                    {
                                      mimeType: 'video/VP8',
                                      payloadType: 96,
                                      clockRate: 90000,
                                      parameters: {},
                                      rtcpFeedback: [
                                              { type: 'goog-remb', parameter: '' },
                                              { type: 'transport-cc', parameter: '' },
                                              { type: 'ccm', parameter: 'fir' },
                                              { type: 'nack', parameter: '' },
                                              { type: 'nack', parameter: 'pli' }
                                            ]
                                      },
                                      {
                                            mimeType: 'video/rtx',
                                            payloadType: 97,
                                            clockRate: 90000,
                                            parameters: { apt: 96 },
                                            rtcpFeedback: []
                                     }
                                 ],
                         headerExtensions: [
                             {
                               uri: 'urn:ietf:params:rtp-hdrext:sdes:mid',
                               id: 4,
                               encrypt: false,
                               parameters: {}
                             },
                             {
                               uri: 'urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id',
                               id: 5,
                               encrypt: false,
                               parameters: {}
                             },
                             {
                               uri: 'urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id',
                               id: 6,
                               encrypt: false,
                               parameters: {}
                             },
                             {
                               uri: 'http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time',
                               id: 2,
                               encrypt: false,
                               parameters: {}
                             },
                             {
                               uri: 'http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01',
                               id: 3,
                               encrypt: false,
                               parameters: {}
                             },
                            {
                               uri: 'urn:3gpp:video-orientation',
                               id: 13,
                               encrypt: false,
                               parameters: {}
                             },
                             {
                               uri: 'urn:ietf:params:rtp-hdrext:toffset',
                               id: 14,
                               encrypt: false,
                               parameters: {}
                             }
                           ],
                           encodings: [
                             {
                               active: true,
                               scaleResolutionDownBy: 4,
                               rid: 'r0',
                               scalabilityMode: 'S1T3',
                               dtx: false
                             },
                             {
                               active: true,
                               scaleResolutionDownBy: 2,
                               rid: 'r1',
                               scalabilityMode: 'S1T3',
                               dtx: false
                             },
                             {
                               active: true,
                               scaleResolutionDownBy: 1,
                               rid: 'r2',
                               scalabilityMode: 'S1T3',
                               dtx: false
                             }
                           ],
                           rtcp: { cname: '', reducedSize: true },
                           mid: '1'
                         }
					
		});

producer.dump() showed that the given rtcpFeedback lacked the generic Nack method. That must come from not having provided it to transport.produce().

Please make sure you are providing transport.produce() with such rtcpFeedback. We don’t remove any rtcpFeedback from the given ones.