[libmediasoupclient] video ok but no audio in communication

hi all,
i write a small client demo with libmediasoupclient using vs2017 on win10, using the server of mediasoup-demo https://github.com/versatica/mediasoup-demo, just change the https server to http server.
Thanks to your help so much, i finally make it to see each other (video ok) in communication, unfortunatelly no voice.
i refer to https://github.com/versatica/mediasoup-broadcaster-demo , create my video track and audio track as below.

  • first create factory
    networkThread   = rtc::Thread::Create().release();
	signalingThread = rtc::Thread::Create().release();
	workerThread    = rtc::Thread::Create().release();
	
	networkThread->SetName("network_thread", nullptr);
	signalingThread->SetName("signaling_thread", nullptr);
	workerThread->SetName("worker_thread", nullptr);

	factory = webrtc::CreatePeerConnectionFactory(
		networkThread,
		workerThread,
		signalingThread,
		nullptr,
		webrtc::CreateBuiltinAudioEncoderFactory(),
		webrtc::CreateBuiltinAudioDecoderFactory(),
		webrtc::CreateBuiltinVideoEncoderFactory(),
		webrtc::CreateBuiltinVideoDecoderFactory(),
		nullptr /*audio_mixer*/,
		nullptr /*audio_processing*/);

as video is ok , i just paste audio track

rtc::scoped_refptr<webrtc::AudioTrackInterface> createAudioTrack(/*const std::string& label*/)
{
	if (!factory)
		createFactory();
	
	cricket::AudioOptions options;
	options.auto_gain_control = true;
	//options.highpass_filter = false;
	options.echo_cancellation = true;
	options.noise_suppression = true;

	rtc::scoped_refptr<webrtc::AudioSourceInterface> source = factory->CreateAudioSource(options);

	return factory->CreateAudioTrack("audio_track", source);
}

then produce
use this to check

_mediasoupDevice->CanProduce(“audio”)

it’s ok then call createAudioTrack() and produce audio

    Json codecOptions =
	{
		{ "opusStereo", true },
		{ "opusDtx",    true }
	};
	auto* audioProducerListener = new MyProducerListener();
	mediasoupclient::Producer *_micProducer = _sendTransport->Produce(
		audioProducerListener,
		audio_track,
		nullptr,
		&codecOptions);

sendTransport OnConnect ok, and OnProduce fires, server construct a producer for audio and return it’s id, everything seems ok. even Windows notifies my demo is using my microphone…this is trace of client:

[TRACE] Transport::mediasoupclient::SendTransport::Produce()
[TRACE] ortc::mediasoupclient::ortc::validateProducerCodecOptions()
[TRACE] Handler::mediasoupclient::SendHandler::Send()
[DEBUG] Handler::mediasoupclient::SendHandler::Send() | [kind:audio, track->id():audio_track]
[TRACE] Sdp::RemoteSdp::mediasoupclient::Sdp::RemoteSdp::GetNextMediaSectionIdx()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::AddTransceiver()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnRenegotiationNeeded()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::CreateOffer()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::CreateSessionDescriptionObserver::GetFuture()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::CreateSessionDescriptionObserver::OnSuccess()
[TRACE] Handler::mediasoupclient::Handler::SetupTransport()
[TRACE] Sdp::Utils::mediasoupclient::Sdp::Utils::extractDtlsParameters()
[TRACE] Sdp::RemoteSdp::mediasoupclient::Sdp::RemoteSdp::UpdateDtlsRole()
[TRACE] Transport::mediasoupclient::Transport::OnConnect()
enter MySendTransportListener::OnConnect()
[TRACE] Transport::mediasoupclient::Transport::GetId()
"requestBy() [method:connectWebRtcTransport, id:4]"
[DEBUG] Handler::mediasoupclient::SendHandler::Send() | calling pc->SetLocalDescription():
v=0
o=- 7782735175858330809 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0
a=msid-semantic: WMS 0
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:VcOi
a=ice-pwd:vBdq9gA0bglg/gr0D2LHXY7D
a=ice-options:trickle
a=fingerprint:sha-256 A6:91:A0:FE:30:12:AD:3A:C4:48:AE:5F:2A:59:6C:39:CB:C9:FA:C9:52:66:C8:1C:78:BD:78:70:CE:25:A3:D4
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendonly
a=msid:0 audio_track
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:102 ILBC/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:112 telephone-event/32000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
a=ssrc:2548515804 cname:2nMdXbhuOdFHfk0O
a=ssrc:2548515804 msid:0 audio_track
a=ssrc:2548515804 mslabel:0
a=ssrc:2548515804 label:audio_track

<Send> [EchoClient] {"data":{"dtlsParameters":{"fingerprints":[{"algorithm":"sha-256","value":"A6:91:A0:FE:30:12:AD:3A:C4:48:AE:5F:2A:59:6C:39:CB:C9:FA:C9:52:66:C8:1C:78:BD:78:70:CE:25:A3:D4"}],"role":"server"},"transportId":"c6e36077-acca-463a-9faf-495d369d2a2d"},"id":4,"method":"connectWebRtcTransport","request":true}
[TRACE] PeerConnection::mediasoupclient::PeerConnection::SetLocalDescription()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::SetSessionDescriptionObserver::GetFuture()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnSignalingChange()
[DEBUG] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnSignalingChange() | [newState:have-local-offer]
[TRACE] PeerConnection::mediasoupclient::PeerConnection::SetSessionDescriptionObserver::OnSuccess()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnIceGatheringChange()
[DEBUG] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnIceGatheringChange() | [newState:gathering]
[TRACE] PeerConnection::mediasoupclient::PeerConnection::GetLocalDescription()
[TRACE] Sdp::Utils::mediasoupclient::Sdp::Utils::getCname()
[TRACE] Sdp::RemoteSdp::mediasoupclient::Sdp::RemoteSdp::Send()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnIceCandidate()
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::MediaSection::MediaSection()
[DEBUG] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnIceCandidate() | [candidate:candidate:2131708102 1 udp 2122260223 192.168.0.100 63876 typ host generation 0 ufrag VcOi network-id 3]
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::MediaSection::SetIceParameters()
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::AnswerMediaSection::AnswerMediaSection()
[TRACE] Sdp::RemoteSdp::mediasoupclient::Sdp::RemoteSdp::AddMediaSection()
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::MediaSection::GetMid()
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::MediaSection::GetMid()
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::MediaSection::GetObject()
[TRACE] Sdp::RemoteSdp::mediasoupclient::Sdp::RemoteSdp::RegenerateBundleMids()
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::MediaSection::IsClosed()
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::MediaSection::GetMid()
[TRACE] Sdp::RemoteSdp::mediasoupclient::Sdp::RemoteSdp::GetSdp()
[DEBUG] Handler::mediasoupclient::SendHandler::Send() | calling pc->SetRemoteDescription():
v=0
o=libmediasoupclient 10000 1 IN IP4 0.0.0.0
s=-
t=0 0
a=ice-lite
a=fingerprint:sha-512 56:A5:EE:DB:CF:7F:B2:78:8E:6B:AC:43:39:17:7C:08:D1:48:BF:5F:48:BD:B5:59:D6:CC:02:3C:34:83:9A:A0:F3:06:29:A7:25:CD:79:48:C3:F1:36:52:04:35:86:AC:EF:D6:F3:EA:6A:91:69:D4:87:E9:BE:E2:10:AC:9E:CB
a=msid-semantic: WMS *
a=group:BUNDLE 0
m=audio 7 UDP/TLS/RTP/SAVPF 111
c=IN IP4 127.0.0.1
a=rtpmap:111 opus/48000/2
a=fmtp:111 stereo=1;usedtx=1
a=rtcp-fb:111 transport-cc
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=setup:active
a=mid:0
a=recvonly
a=ice-ufrag:ug5f1v6zw58s075w
a=ice-pwd:7l2si4bgxqd9lcqlc27tj5wxub6iatv6
a=candidate:udpcandidate 1 udp 1076302079 47.101.42.141 46608 typ host
a=end-of-candidates
a=ice-options:renomination
a=rtcp-mux
a=rtcp-rsize

[TRACE] PeerConnection::mediasoupclient::PeerConnection::SetRemoteDescription()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::SetSessionDescriptionObserver::GetFuture()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnSignalingChange()
[DEBUG] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnSignalingChange() | [newState:stable]
[TRACE] Handler::mediasoupclient::Handler::OnIceConnectionChange()
[TRACE] Transport::mediasoupclient::Transport::OnConnectionStateChange()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::SetSessionDescriptionObserver::OnSuccess()
[TRACE] ortc::mediasoupclient::ortc::validateRtpParameters()
[TRACE] ortc::mediasoupclient::ortc::validateRtpCodecParameters()
[TRACE] ortc::mediasoupclient::ortc::validateRtcpFeedback()
[TRACE] ortc::mediasoupclient::ortc::validateRtpHeaderExtensionParameters()
[TRACE] ortc::mediasoupclient::ortc::validateRtpHeaderExtensionParameters()
[TRACE] ortc::mediasoupclient::ortc::validateRtpHeaderExtensionParameters()
[TRACE] ortc::mediasoupclient::ortc::validateRtpHeaderExtensionParameters()
[TRACE] ortc::mediasoupclient::ortc::validateRtpEncodingParameters()
[TRACE] ortc::mediasoupclient::ortc::validateRtcpParameters()
enter MySendTransportListener::OnProduce()
[TRACE] Transport::mediasoupclient::Transport::GetId()
"requestBy() [method:produce, id:5]"
<Send> [EchoClient] {"data":{"appData":{},"kind":"audio","rtpParameters":{"codecs":[{"channels":2,"clockRate":48000,"mimeType":"audio/opus","parameters":{"minptime":10,"sprop-stereo":1,"usedtx":1,"useinbandfec":1},"payloadType":111,"rtcpFeedback":[{"parameter":"","type":"transport-cc"}]}],"encodings":[{"dtx":false,"ssrc":2548515804}],"headerExtensions":[{"encrypt":false,"id":4,"parameters":{},"uri":"urn:ietf:params:rtp-hdrext:sdes:mid"},{"encrypt":false,"id":2,"parameters":{},"uri":"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"},{"encrypt":false,"id":3,"parameters":{},"uri":"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"},{"encrypt":false,"id":1,"parameters":{},"uri":"urn:ietf:params:rtp-hdrext:ssrc-audio-level"}],"mid":"0","rtcp":{"cname":"","reducedSize":true}},"transportId":"c6e36077-acca-463a-9faf-495d369d2a2d"},"id":5,"method":"produce","request":true}
[TRACE] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnIceGatheringChange()
[DEBUG] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnIceGatheringChange() | [newState:complete]
[EchoClient::onTextMessageReceived()] reqId = 5 produce data :
 {"id":"50303383-3bc6-4322-a14a-866ab11c9615"}
[TRACE] Producer::mediasoupclient::Producer::Producer()
[TRACE] Producer::mediasoupclient::Producer::GetId()
_micProducer Ready

But when i stat audio producer,

cmd> sp 50303383-3bc6-4322-a14a-866ab11c9615  mediasoup:Producer getStats() +5m
  mediasoup:Channel request() [method:producer.getStats, id:16] +57s

  mediasoup:Channel request succeeded [method:producer.getStats, id:16] +1ms
producer.getStats():
[]

is this strange? (cos when i state a video producer, i get a lot of message)
i try to dump the audio producer

cmd> dp 50303383-3bc6-4322-a14a-866ab11c9615  mediasoup:Producer dump() +40s
  mediasoup:Channel request() [method:producer.dump, id:17] +40s

  mediasoup:Channel request succeeded [method:producer.dump, id:17] +1ms
producer.dump():
{
  "id": "50303383-3bc6-4322-a14a-866ab11c9615",
  "kind": "audio",
  "paused": false,
  "rtpMapping": {
    "codecs": [
      {
        "mappedPayloadType": 100,
        "payloadType": 111
      }
    ],
    "encodings": [
      {
        "mappedSsrc": 668661120,
        "rid": null,
        "ssrc": 2548515804
      }
    ]
  },
  "rtpParameters": {
    "codecs": [
      {
        "channels": 2,
        "clockRate": 48000,
        "mimeType": "audio/opus",
        "parameters": {
          "minptime": 10,
          "sprop-stereo": 1,
          "usedtx": 1,
          "useinbandfec": 1
        },
        "payloadType": 111,
        "rtcpFeedback": [
          {
            "type": "transport-cc"
          }
        ]
      }
    ],
    "encodings": [
      {
        "codecPayloadType": 111,
        "ssrc": 2548515804
      }
    ],
    "headerExtensions": [
      {
        "encrypt": false,
        "id": 4,
        "parameters": {},
        "uri": "urn:ietf:params:rtp-hdrext:sdes:mid"
      },
      {
        "encrypt": false,
        "id": 2,
        "parameters": {},
        "uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"
      },
      {
        "encrypt": false,
        "id": 3,
        "parameters": {},
        "uri": "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"
      },
      {
        "encrypt": false,
        "id": 1,
        "parameters": {},
        "uri": "urn:ietf:params:rtp-hdrext:ssrc-audio-level"
      }
    ],
    "mid": "0",
    "rtcp": {
      "cname": "8124465b",
      "reducedSize": true
    }
  },
  "rtpStreams": [],
  "traceEventTypes": "",
  "type": "simple"
}

when i consume, the request “newConsumer” with kind "kAudioKind"come indeed,
and i just consume, body is the message of the “newConsumer” request by server

auto* consumerListener = new MyConsumerListener(this);
		Json rtpParameters = body["data"]["rtpParameters"];
		mediasoupclient::Consumer *consumer = _recvTransport->Consume(
			consumerListener,
			body["data"]["id"],
			body["data"]["producerId"],
			body["data"]["kind"],
			&rtpParameters
		);
//and answer the server with id
responseNewConsumer(body["id"]);

here is the trace

"handleRequset [method:newConsumer]"
[TRACE] Transport::mediasoupclient::RecvTransport::Consume()
[TRACE] ortc::mediasoupclient::ortc::canReceive()
[TRACE] ortc::mediasoupclient::ortc::validateRtpParameters()
[TRACE] ortc::mediasoupclient::ortc::validateRtpCodecParameters()
[TRACE] ortc::mediasoupclient::ortc::validateRtpHeaderExtensionParameters()
[TRACE] ortc::mediasoupclient::ortc::validateRtpHeaderExtensionParameters()
[TRACE] ortc::mediasoupclient::ortc::validateRtpHeaderExtensionParameters()
[TRACE] ortc::mediasoupclient::ortc::validateRtpEncodingParameters()
[TRACE] ortc::mediasoupclient::ortc::validateRtcpParameters()
[TRACE] Handler::mediasoupclient::RecvHandler::Receive()
[DEBUG] Handler::mediasoupclient::RecvHandler::Receive() | [id:2e01fcec-13e5-41b5-a474-86f96451fd07, kind:audio]
[TRACE] Sdp::RemoteSdp::mediasoupclient::Sdp::RemoteSdp::Receive()
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::MediaSection::MediaSection()
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::MediaSection::SetIceParameters()
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::OfferMediaSection::OfferMediaSection()
[TRACE] Sdp::RemoteSdp::mediasoupclient::Sdp::RemoteSdp::AddMediaSection()
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::MediaSection::GetMid()
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::MediaSection::GetObject()
[TRACE] Sdp::RemoteSdp::mediasoupclient::Sdp::RemoteSdp::RegenerateBundleMids()
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::MediaSection::IsClosed()
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::MediaSection::GetMid()
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::MediaSection::IsClosed()
[TRACE] Sdp::MediaSection::mediasoupclient::Sdp::MediaSection::GetMid()
[TRACE] Sdp::RemoteSdp::mediasoupclient::Sdp::RemoteSdp::GetSdp()
[DEBUG] Handler::mediasoupclient::RecvHandler::Receive() | calling pc->setRemoteDescription():
v=0
o=libmediasoupclient 10000 2 IN IP4 0.0.0.0
s=-
t=0 0
a=ice-lite
a=fingerprint:sha-512 56:A5:EE:DB:CF:7F:B2:78:8E:6B:AC:43:39:17:7C:08:D1:48:BF:5F:48:BD:B5:59:D6:CC:02:3C:34:83:9A:A0:F3:06:29:A7:25:CD:79:48:C3:F1:36:52:04:35:86:AC:EF:D6:F3:EA:6A:91:69:D4:87:E9:BE:E2:10:AC:9E:CB
a=msid-semantic: WMS *
a=group:BUNDLE 0 1
m=audio 7 UDP/TLS/RTP/SAVPF 100
c=IN IP4 127.0.0.1
a=rtpmap:100 opus/48000/2
a=fmtp:100 minptime=10;sprop-stereo=1;usedtx=1;useinbandfec=1
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:4 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:10 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=setup:actpass
a=mid:0
a=sendonly
a=ice-ufrag:y4apajkjbrmcjakd
a=ice-pwd:n97e7o5448b5gzhesqc7otyhlt8yloy7
a=candidate:udpcandidate 1 udp 1076302079 47.101.42.141 44113 typ host
a=end-of-candidates
a=ice-options:renomination
a=ssrc:318123059 cname:850be139
a=ssrc:318123059 msid:850be139 af985bff-cd29-47ce-858b-d64a46066d2a
a=rtcp-mux
a=rtcp-rsize
m=audio 7 UDP/TLS/RTP/SAVPF 100
c=IN IP4 127.0.0.1
a=rtpmap:100 opus/48000/2
a=fmtp:100 minptime=10;sprop-stereo=1;usedtx=1;useinbandfec=1
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:4 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:10 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=setup:actpass
a=mid:1
a=sendonly
a=ice-ufrag:y4apajkjbrmcjakd
a=ice-pwd:n97e7o5448b5gzhesqc7otyhlt8yloy7
a=candidate:udpcandidate 1 udp 1076302079 47.101.42.141 44113 typ host
a=end-of-candidates
a=ice-options:renomination
a=ssrc:211500355 cname:b23b5835
a=ssrc:211500355 msid:b23b5835 2e01fcec-13e5-41b5-a474-86f96451fd07
a=rtcp-mux
a=rtcp-rsize

[TRACE] PeerConnection::mediasoupclient::PeerConnection::SetRemoteDescription()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::SetSessionDescriptionObserver::GetFuture()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnSignalingChange()
[DEBUG] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnSignalingChange() | [newState:have-remote-offer]
[TRACE] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnTrack()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnAddTrack()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnAddStream()
[TRACE] Handler::mediasoupclient::Handler::OnIceConnectionChange()
[TRACE] Transport::mediasoupclient::Transport::OnConnectionStateChange()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnIceGatheringChange()
[DEBUG] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnIceGatheringChange() | [newState:gathering]
[TRACE] PeerConnection::mediasoupclient::PeerConnection::SetSessionDescriptionObserver::OnSuccess()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::CreateAnswer()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::CreateSessionDescriptionObserver::GetFuture()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::CreateSessionDescriptionObserver::OnSuccess()
[TRACE] Sdp::Utils::mediasoupclient::Sdp::Utils::applyCodecParameters()
[DEBUG] Handler::mediasoupclient::RecvHandler::Receive() | calling pc->SetLocalDescription():
v=0
o=- 1840767655638967227 3 IN IP4 127.0.0.1
s=-
t=0 0
a=msid-semantic:  WMS
a=group:BUNDLE 0 1
m=audio 49607 UDP/TLS/RTP/SAVPF 100
c=IN IP4 192.168.0.100
a=rtpmap:100 opus/48000/2
a=fmtp:100 minptime=10;useinbandfec=1
a=rtcp:9 IN IP4 0.0.0.0
a=extmap:10 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:4 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
a=setup:active
a=mid:0
a=recvonly
a=ice-ufrag:lo4E
a=ice-pwd:N8H54cAsScnLz0esIrSFdYLY
a=fingerprint:sha-256 1D:DD:1E:40:DB:29:2C:08:CF:E6:AE:A4:CA:59:75:E2:AB:2D:0B:0D:E3:A4:9A:3F:83:3A:AC:70:98:ED:4E:F0
a=candidate:2131708102 1 udp 2122260223 192.168.0.100 49607 typ host generation 0 network-id 3
a=ice-options:trickle
a=rtcp-mux
m=audio 9 UDP/TLS/RTP/SAVPF 100
c=IN IP4 0.0.0.0
a=rtpmap:100 opus/48000/2
a=fmtp:100 minptime=10;useinbandfec=1
a=rtcp:9 IN IP4 0.0.0.0
a=extmap:10 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:4 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
a=setup:active
a=mid:1
a=recvonly
a=ice-ufrag:lo4E
a=ice-pwd:N8H54cAsScnLz0esIrSFdYLY
a=fingerprint:sha-256 1D:DD:1E:40:DB:29:2C:08:CF:E6:AE:A4:CA:59:75:E2:AB:2D:0B:0D:E3:A4:9A:3F:83:3A:AC:70:98:ED:4E:F0
a=ice-options:trickle
a=rtcp-mux

[TRACE] PeerConnection::mediasoupclient::PeerConnection::SetLocalDescription()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::SetSessionDescriptionObserver::GetFuture()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnSignalingChange()
[DEBUG] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnSignalingChange() | [newState:stable]
[TRACE] Handler::mediasoupclient::Handler::OnIceConnectionChange()
[TRACE] Transport::mediasoupclient::Transport::OnConnectionStateChange()
[TRACE] Handler::mediasoupclient::Handler::OnIceConnectionChange()
[TRACE] Transport::mediasoupclient::Transport::OnConnectionStateChange()
[TRACE] Handler::mediasoupclient::Handler::OnIceConnectionChange()
[TRACE] Transport::mediasoupclient::Transport::OnConnectionStateChange()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnIceGatheringChange()
[DEBUG] PeerConnection::mediasoupclient::PeerConnection::PrivateListener::OnIceGatheringChange() | [newState:complete]
[TRACE] PeerConnection::mediasoupclient::PeerConnection::SetSessionDescriptionObserver::OnSuccess()
[TRACE] PeerConnection::mediasoupclient::PeerConnection::GetTransceivers()
[TRACE] Consumer::mediasoupclient::Consumer::Consumer()
[TRACE] Consumer::mediasoupclient::Consumer::GetId()
[TRACE] Consumer::mediasoupclient::Consumer::GetId()
[TRACE] Consumer::mediasoupclient::Consumer::GetKind()
[TRACE] Consumer::mediasoupclient::Consumer::GetKind()
[TRACE] Consumer::mediasoupclient::Consumer::GetTrack()
[TRACE] Consumer::mediasoupclient::Consumer::GetTrack()
"responseBy() [id:817747]"
<Send> [EchoClient] {"data":null,"id":817747,"ok":true,"response":true}

but no voice, just video shows
Is there anything i do wrong? :sweat_smile:
Any help would be greatly appreciated ! :grinning:

Hi,

I don’t know the nature of your audio track.

You could enable the libwebrtc logs as in here for help:

Though i haven’t figured it out yet, thanks to your help so much, u are such a nice person. :grinning:

sorry to disturb you again, i need to confirm one thing, after i enable mic, and make producer for the track, then stats the producer in server as below

cmd> sp 50303383-3bc6-4322-a14a-866ab11c9615  mediasoup:Producer getStats() +5m
  mediasoup:Channel request() [method:producer.getStats, id:16] +57s

  mediasoup:Channel request succeeded [method:producer.getStats, id:16] +1ms
producer.getStats():
[]

does the log mean i have not sent the audio to server successfully (whether because of the track or the ice+dtls, or anything else) ?

It means that no RTP regarding to the negotiated parameters has arrived the producer in the server.

Or maybe that rtpParameters do not correspond to what the sender sends, so no RTP stream is created in server side, so stats are empty.

Enable rtp logs in mediasoup server and see.

hi,I solved the problem, i see this in the webrtc log of client.

(audio_device_core_win.cc:2378): Playout must be started before recording when using the built-in AEC
(audio_device_impl.cc:825): output: -1

and I disable the built-in aec

cricket::AudioOptions options;
options.echo_cancellation = false;

but the noise is so crazy, how can i do? based on webrtc m79 on windows

Hello.

I am also trying to make app using vs2017 on win10.
from https://github.com/versatica/mediasoup-broadcaster-demo
then I failed to compile it .
Could u publish your builded source? or Could i buy your source code?
Please send me your reply.

plz send me your contact info.

hi, i 'm sorry,the code belongs to a party, i can not sell or publish, but maybe i can discuss with you

Were you ever able to figure out a solution to enabling echo cancellation? I’ve run into this same bug, and I assume it’s caused by starting the producer in a paused state, but I can’t see a way to easily resolve this one.

Max

For anyone who finds this thread later, I figured it out. The solution is to make sure the PeerConnectionFactory you create for creating the audio source / track is passed to your send transport via the Options parameter on device.CreateSendTransport().

The long answer is that when you create a PeerConnectionFactory, it creates an AudioDeviceModule to manage recording and playback. If that PCF/ADM is attached to a real peer connection playback is started immediately (whether there are consumers or not) and AEC works as expected when you create a producer. However, because the libmediasoupclient broadcaster demo never passes its PCF to CreateSendTransport, a separate PCF is created for the actual PeerConnection and so the one used to create the microphone device sits idle.

编译不是很复杂的,你哪里没有编译过?