目录
transport-cc goog-remb (webrtc中的两种码率算法)
Mediasource之主要解复合MultiMediaSourceMuxer
前端WEB

服务器收到请求
POST /index/api/webrtc?app=live&stream=test&type=play HTTP/1.1
HttpSession::onRecvHeader
HttpSession::Handle_Req_POST
HttpSession::Handle_Req_POST
if (totalContentLen > 0 && (size_t)totalContentLen < maxReqSize )
_contentCallBack = [this,parserCopy](const char *data,size_t len) {
//恢复http头
_parser = parserCopy;
//设置content
_parser.setContent(string(data,len));
//触发http事件,emitHttpEvent内部会选择是否关闭连接
emitHttpEvent(true);
//清空数据,节省内存
_parser.Clear();
//content已经接收完毕
return false;
};
HttpSession::onRecvContent(const char *data,size_t len)
if (_contentCallBack)
_contentCallBack(data,len);
HttpSession::emitHttpEvent
// 广播HTTP事件
NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastHttpRequest,_parser,invoker,
consumed,static_cast<SockInfo &>(*this));
服务端的处理


// 主函数中调用web接口安装函数
installWebApi
addHttpListener();
api_regist("/index/api/webrtc",[](API_ARGS_STRING_ASYNC){
auto type = allArgs["type"];
auto offer = allArgs.getArgs();
WebRtcPluginManager::Instance().getAnswerSdp(*(static_cast<Session *>(&sender)), type,
WebRtcArgsImp(allArgs, sender.getIdentifier()),
[invoker, val, offer, headerOut](const WebRtcInterface &exchanger) mutable {
headerOut["Content-Type"] = HttpFileManager::getContentType(".json");
headerOut["Access-Control-Allow-Origin"] = "*";
val["sdp"] = const_cast<WebRtcInterface &>(exchanger).getAnswerSdp(offer);
val["id"] = exchanger.getIdentifier();
val["type"] = "answer";
invoker(200, headerOut, val.toStyledString());
});
});
addHttpListener
//注册监听kBroadcastHttpRequest事件
NoticeCenter::Instance().addListener(&web_api_tag, Broadcast::kBroadcastHttpRequest,
[](BroadcastHttpRequestArgs) {
auto it = s_map_api.find(parser.Url());
it->second(parser, invoker, sender);
}
根据url找到对应的事件回调,最终会调用WebRtcPluginManager::Instance().getAnswerSdp。
WebRtcPluginManager::getAnswerSdp
auto it = _map_creator.find(type);
it->second(sender, args, cb);
// 静态注册插件
WebRtcPluginManager::Instance().registerPlugin("play", play_plugin);
void play_plugin(Session &sender, const WebRtcArgs &args, const WebRtcPluginManager::onCreateRtc &cb)
// 使用rtsp媒体源,两者均是传输的rtp流
info._schema = RTSP_SCHEMA;
MediaSource::findAsync(info, session_ptr, [=](const MediaSource::Ptr &src_in) mutable {
auto src = dynamic_pointer_cast<RtspMediaSource>(src_in);
// 还原成rtc,目的是为了hook时识别哪种播放协议
info._schema = RTC_SCHEMA;
auto rtc = WebRtcPlayer::create(EventPollerPool::Instance().getPoller(), src, info, preferred_tcp);
cb(*rtc); // 发送answer SDP给web端
});

播放

拉流

stun , dtls 先握手把对称密钥通过非对称加密方式 传输 过去后,之后的数据都通过这个对称密钥进行加密。 srtp 加密 rtp . .
Web端首先根据协商的IP和端口,服务端webrtc的端口是8000,发送STUN命令再次获取STUN地址。
首次连接,服务端会创建对应的session。
WebRtcSession::WebRtcSession(const Socket::Ptr &sock) : Session(sock)
socklen_t addr_len = sizeof(_peer_addr);
getpeername(sock->rawFD(), (struct sockaddr *)&_peer_addr, &addr_len);
WebRtcSession::onRecv_l(const char *data, size_t len)
// 首次进入,根据username获取之前创建的transport.
auto user_name = getUserName(data, len); // 此处的username就是之前设置的transport标识
auto transport = WebRtcTransportManager::Instance().getItem(user_name);
transport->setSession(shared_from_this());
_transport = std::move(transport);
_transport->inputSockData((char *)data, len, (struct sockaddr *)&_peer_addr);
WebRtcTransport::inputSockData
// 处理STUN消息
if (RTC::StunPacket::IsStun((const uint8_t *)buf, len))
std::unique_ptr<RTC::StunPacket> packet(RTC::StunPacket::Parse((const uint8_t *)buf, len));
_ice_server->ProcessStunPacket(packet.get(), tuple);
return;
// 处理
if (is_dtls(buf))
_dtls_transport->ProcessDtlsData((uint8_t *)buf, len);
return;
// 由于是拉流,不存在rtp数据,但是有rtcp数据
if (is_rtcp(buf))
if (_srtp_session_recv->DecryptSrtcp((uint8_t *)buf, &len))
onRtcp(buf, len);
DTLS交互完成后,接下来启动媒体传输
WebRtcTransport::OnDtlsTransportConnected
onStartWebRTC();
WebRtcPlayer::onStartWebRTC
WebRtcTransportImp::onStartWebRTC();
_reader = _play_src->getRing()->attach(getPoller(), true);
weak_ptr<WebRtcPlayer> weak_self = static_pointer_cast<WebRtcPlayer>(shared_from_this());
weak_ptr<Session> weak_session = getSession();
_reader->setReadCB([weak_self](const RtspMediaSource::RingDataType &pkt) {
size_t i = 0;
pkt->for_each([&](const RtpPacket::Ptr &rtp) {
strong_self->onSendRtp(rtp, ++i == pkt->size());
});
});
transport-cc goog-remb (webrtc中的两种码率算法)
"Transport-CC" 是 WebRTC(Web实时通信)中的一种传输拥塞控制机制,用于管理实时媒体(音频和视频)的传输,以适应网络状况,确保通信的连续性。它有助于根据网络条件调整媒体的比特率,以确保在可用带宽的情况下提供流畅且不中断的通信体验。它用于避免过载网络,以提供最佳可能的质量。
"Goog-REMB"(Google Receiver Estimated Maximum Bitrate)是由Google开发的一种扩展,用于实时传输控制协议(RTCP)。它在WebRTC中用于估算接收方对特定媒体流能够处理的最大比特率。然后,这些信息会传达给发送方,使其能够调整正在传输的媒体的比特率,以匹配接收方的容量,从而提高通信的整体质量。
这些术语与WebRTC的技术相关,用于优化互联网上的实时通信的质量和性能
push play的关键回调

play与上面类似
下面是rtspmediasourceImp的继承关系

日志记录
push
request:
POST /index/api/webrtc?app=2fbe2a926db241b483ab4ea79950fb0c&stream=dxw3Stream&type=push
# header:
Accept-Encoding : gzip
Connection : Keep-Alive
Content-Length : 3843
Content-Type : application/json;charset=utf-8
contentType : application/json;charset=UTF-8
Host : 10.60.100.196:6080
User-Agent : okhttp/4.10.0
# content:
v=0
o=- 8012211977922866648 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=msid-semantic: WMS
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:w968
a=ice-pwd:JlvPX+PRmgl9rqj80WFp/SMs
a=ice-options:trickle renomination
a=fingerprint:sha-256 B9:B2:FF:EB:8E:68:30:F8:4F:4C:3B:0A:15:9B:29:98:FE:A5:04:E7:DD:9F:D3:AE:AA:A4:6B:74:40:04:FB:59
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:- 85bd69e4-7383-49ff-a10e-817be8850943
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:2056661234 cname:kIdPjq4CEzIEdhBD
a=ssrc:2056661234 msid:- 85bd69e4-7383-49ff-a10e-817be8850943
a=ssrc:2056661234 mslabel:-
a=ssrc:2056661234 label:85bd69e4-7383-49ff-a10e-817be8850943
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 127 124 125
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:w968
a=ice-pwd:JlvPX+PRmgl9rqj80WFp/SMs
a=ice-options:trickle renomination
a=fingerprint:sha-256 B9:B2:FF:EB:8E:68:30:F8:4F:4C:3B:0A:15:9B:29:98:FE:A5:04:E7:DD:9F:D3:AE:AA:A4:6B:74:40:04:FB:59
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
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:- c0476ef1-6022-4371-adc6-dba849de428a
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 H264/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:127 red/90000
a=rtpmap:124 rtx/90000
a=fmtp:124 apt=127
a=rtpmap:125 ulpfec/90000
a=ssrc-group:FID 3955139128 3307115671
a=ssrc:3955139128 cname:kIdPjq4CEzIEdhBD
a=ssrc:3955139128 msid:- c0476ef1-6022-4371-adc6-dba849de428a
a=ssrc:3955139128 mslabel:-
a=ssrc:3955139128 label:c0476ef1-6022-4371-adc6-dba849de428a
a=ssrc:3307115671 cname:kIdPjq4CEzIEdhBD
a=ssrc:3307115671 msid:- c0476ef1-6022-4371-adc6-dba849de428a
a=ssrc:3307115671 mslabel:-
a=ssrc:3307115671 label:c0476ef1-6022-4371-adc6-dba849de428a
# response:
{
"code" : 0,
"id" : "wKgSAx9AH0A=_44",
"sdp" : "v=0\r\no=- 8012211977922866648 2 IN IP4 10.60.100.196\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1\r\na=msid-semantic: WMS\r\na=ice-lite\r\nm=audio 8000 UDP/TLS/RTP/SAVPF 0\r\nc=IN IP4 10.60.100.196\r\na=rtcp:8000 IN IP4 10.60.100.196\r\na=ice-ufrag:wKgSAx9AH0A=_44\r\na=ice-pwd:Yn7cp275AyIjOGhJc2wBWC8E\r\na=ice-options:trickle\r\na=fingerprint:sha-256 5D:43:0F:2C:BD:82:BB:C5:B4:77:42:D3:8C:2B:D5:1A:32:59:39:1D:78:7A:BB:88:E2:EF:2A:60:37:AD:6E:A3\r\na=setup:passive\r\na=mid:0\r\na=ice-lite\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:0 PCMU/8000/1\r\na=candidate:udpcandidate 1 udp 110 10.60.100.196 8000 typ host\r\na=candidate:tcpcandidate 1 tcp 105 10.60.100.196 8000 typ host tcptype passive\r\nm=video 8000 UDP/TLS/RTP/SAVPF 100 101\r\nc=IN IP4 10.60.100.196\r\na=rtcp:8000 IN IP4 10.60.100.196\r\na=ice-ufrag:wKgSAx9AH0A=_44\r\na=ice-pwd:Yn7cp275AyIjOGhJc2wBWC8E\r\na=ice-options:trickle\r\na=fingerprint:sha-256 5D:43:0F:2C:BD:82:BB:C5:B4:77:42:D3:8C:2B:D5:1A:32:59:39:1D:78:7A:BB:88:E2:EF:2A:60:37:AD:6E:A3\r\na=setup:passive\r\na=mid:1\r\na=ice-lite\r\na=extmap:14 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:100 H264/90000\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=rtcp-fb:100 transport-cc\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=candidate:udpcandidate 1 udp 110 10.60.100.196 8000 typ host\r\na=candidate:tcpcandidate 1 tcp 105 10.60.100.196 8000 typ host tcptype passive\r\n",
"type" : "answer"
}
2024-03-21 16:02:24.338 W [MediaServer.exe] [23784-event poller 11] EventPoller.cpp:209 async_l | take time: 16ms, thread may be overloaded
2024-03-21 16:02:24.354 W [MediaServer.exe] [23784-event poller 3] EventPoller.cpp:209 async_l | take time: 16ms, thread may be overloaded
2024-03-21 16:02:24.364 W [MediaServer.exe] [23784-event poller 3] WebHook.cpp:194 operator () | hook https://10.60.100.196:18080/index/hook/on_stream_not_found 16ms,failed[auth failed]: code:404 msg:"\u8d44\u6e90\u672a\u627e\u5230":{
"app" : "2fbe2a926db241b483ab4ea79950fb0c",
"hook_index" : 2020,
"id" : "221-704",
"ip" : "10.60.100.196",
"mediaServerId" : "wvpmediaserver001",
"params" : "app=2fbe2a926db241b483ab4ea79950fb0c&stream=dxw3Stream&type=play&session=221-704",
"port" : 61102,
"schema" : "rtsp",
"stream" : "dxw3Stream",
"vhost" : "__defaultVhost__"
}
2024-03-21 16:02:24.367 I [MediaServer.exe] [23784-event poller 11] WebRtcSession.cpp:85 onRecv_l | 222-1452(10.62.14.104:45023)
2024-03-21 16:02:24.367 D [MediaServer.exe] [23784-event poller 11] IceServer.cpp:340 HandleTuple | transition from state 'new' to 'connected'
2024-03-21 16:02:24.367 I [MediaServer.exe] [23784-event poller 11] WebRtcTransport.cpp:170 OnIceServerSelectedTuple | wKgSAx9AH0A=_44 select tuple udp 10.62.14.104:45023
2024-03-21 16:02:24.367 I [MediaServer.exe] [23784-event poller 11] WebRtcTransport.cpp:176 OnIceServerConnected | wKgSAx9AH0A=_44
2024-03-21 16:02:24.378 E [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:744 ProcessDtlsData | cannot process data while not running
2024-03-21 16:02:24.411 D [MediaServer.exe] [23784-event poller 11] IceServer.cpp:429 HandleTuple | transition from state 'connected' to 'completed'
2024-03-21 16:02:24.411 I [MediaServer.exe] [23784-event poller 11] WebRtcTransport.cpp:180 OnIceServerCompleted | wKgSAx9AH0A=_44
2024-03-21 16:02:24.411 I [MediaServer.exe] [23784-event poller 11] WebRtcTransport.cpp:232 OnDtlsTransportConnecting | wKgSAx9AH0A=_44
2024-03-21 16:02:24.411 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:699 Run | running [role:server]
2024-03-21 16:02:24.411 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1411 OnSslInfo | DTLS handshake start
2024-03-21 16:02:24.411 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'before SSL initialization']
2024-03-21 16:02:24.411 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1407 OnSslInfo | role: server, waiting:'before SSL initialization']
2024-03-21 16:02:24.426 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'before SSL initialization']
2024-03-21 16:02:24.426 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read client hello']
2024-03-21 16:02:24.426 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write server hello']
2024-03-21 16:02:24.427 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write certificate']
2024-03-21 16:02:24.428 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write key exchange']
2024-03-21 16:02:24.428 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write certificate request']
2024-03-21 16:02:24.428 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write server done']
2024-03-21 16:02:24.428 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1407 OnSslInfo | role: server, waiting:'SSLv3/TLS write server done']
2024-03-21 16:02:24.428 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:977 SendPendingOutgoingDtlsData | 2111 bytes of DTLS data ready to sent to the peer
2024-03-21 16:02:24.428 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1015 SetTimeout | DTLS timer set in 100ms
2024-03-21 16:02:24.434 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write server done']
2024-03-21 16:02:24.435 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read client certificate']
2024-03-21 16:02:24.435 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read client key exchange']
2024-03-21 16:02:24.435 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read certificate verify']
2024-03-21 16:02:24.435 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read change cipher spec']
2024-03-21 16:02:24.435 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read finished']
2024-03-21 16:02:24.435 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write change cipher spec']
2024-03-21 16:02:24.435 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write finished']
2024-03-21 16:02:24.435 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1415 OnSslInfo | DTLS handshake done
2024-03-21 16:02:24.435 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:977 SendPendingOutgoingDtlsData | 67 bytes of DTLS data ready to sent to the peer
2024-03-21 16:02:24.436 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1166 CheckRemoteFingerprint | valid remote fingerprint
2024-03-21 16:02:24.436 D [MediaServer.exe] [23784-event poller 11] DtlsTransport.cpp:1340 GetNegotiatedSrtpCryptoSuite | chosen SRTP crypto suite: SRTP_AES128_CM_SHA1_80
2024-03-21 16:02:24.436 I [MediaServer.exe] [23784-event poller 11] WebRtcTransport.cpp:197 OnDtlsTransportConnected | wKgSAx9AH0A=_44
2024-03-21 16:02:24.694 I [MediaServer.exe] [23784-event poller 11] WebRtcTransport.cpp:1012 createRtpChannel | create rtp receiver of ssrc:2056661234, rid:, codec:PCMU
2024-03-21 16:02:24.695 I [MediaServer.exe] [23784-event poller 11] MediaSource.cpp:517 emitEvent | 媒体注册:rtsp://__defaultVhost__/2fbe2a926db241b483ab4ea79950fb0c/dxw3Stream
2024-03-21 16:02:24.695 D [MediaServer.exe] [23784-event poller 3] MediaSource.cpp:456 operator () | 收到媒体注册事件,回复播放器:rtsp://__defaultVhost__/2fbe2a926db241b483ab4ea79950fb0c/dxw3Stream
2024-03-21 16:02:24.696 I [MediaServer.exe] [23784-event poller 3] WebRtcTransport.cpp:539 WebRtcTransportImp | wKgSAx9AH0A=_45
2024-03-21 16:02:24.704 D [MediaServer.exe] [23784-event poller 3] WebApi.cpp:261 http api debug |
# request:
play:
POST /index/api/webrtc?app=2fbe2a926db241b483ab4ea79950fb0c&stream=dxw3Stream&type=play
# header:
Accept : application/json, text/plain, */*
Accept-Encoding : gzip, deflate, br
Accept-Language : zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,en-GB;q=0.6
Connection : keep-alive
Content-Length : 6474
Content-Type : text/plain;charset=UTF-8
Host : 10.60.100.196:10443
Origin : https://10.60.100.196:18080
sec-ch-ua : "Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"
sec-ch-ua-mobile : ?0
sec-ch-ua-platform : "Windows"
Sec-Fetch-Dest : empty
Sec-Fetch-Mode : cors
Sec-Fetch-Site : same-site
User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0
# content:
v=0
o=- 2603351187133562715 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 35 36 37 38 102 103 104 105 106 107 108 109 127 125 39 40 41 42 43 44 45 46 47 48 112 113 114 115 116 117 118 49
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:gqVD
a=ice-pwd:iY37aLVC9/+wM0qGasxp108p
a=ice-options:trickle
a=fingerprint:sha-256 AF:9B:DE:28:34:80:D3:82:E9:53:CA:FF:F2:12:D6:B1:A4:31:38:27:82:07:70:C1:E0:DC:66:0B:62:41:42:2D
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 urn:3gpp:video-orientation
a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 profile-id=0
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 VP9/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 profile-id=2
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:35 VP9/90000
a=rtcp-fb:35 goog-remb
a=rtcp-fb:35 transport-cc
a=rtcp-fb:35 ccm fir
a=rtcp-fb:35 nack
a=rtcp-fb:35 nack pli
a=fmtp:35 profile-id=1
a=rtpmap:36 rtx/90000
a=fmtp:36 apt=35
a=rtpmap:37 VP9/90000
a=rtcp-fb:37 goog-remb
a=rtcp-fb:37 transport-cc
a=rtcp-fb:37 ccm fir
a=rtcp-fb:37 nack
a=rtcp-fb:37 nack pli
a=fmtp:37 profile-id=3
a=rtpmap:38 rtx/90000
a=fmtp:38 apt=37
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:103 rtx/90000
a=fmtp:103 apt=102
a=rtpmap:104 H264/90000
a=rtcp-fb:104 goog-remb
a=rtcp-fb:104 transport-cc
a=rtcp-fb:104 ccm fir
a=rtcp-fb:104 nack
a=rtcp-fb:104 nack pli
a=fmtp:104 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
a=rtpmap:105 rtx/90000
a=fmtp:105 apt=104
a=rtpmap:106 H264/90000
a=rtcp-fb:106 goog-remb
a=rtcp-fb:106 transport-cc
a=rtcp-fb:106 ccm fir
a=rtcp-fb:106 nack
a=rtcp-fb:106 nack pli
a=fmtp:106 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=106
a=rtpmap:108 H264/90000
a=rtcp-fb:108 goog-remb
a=rtcp-fb:108 transport-cc
a=rtcp-fb:108 ccm fir
a=rtcp-fb:108 nack
a=rtcp-fb:108 nack pli
a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f
a=rtpmap:125 rtx/90000
a=fmtp:125 apt=127
a=rtpmap:39 H264/90000
a=rtcp-fb:39 goog-remb
a=rtcp-fb:39 transport-cc
a=rtcp-fb:39 ccm fir
a=rtcp-fb:39 nack
a=rtcp-fb:39 nack pli
a=fmtp:39 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=4d001f
a=rtpmap:40 rtx/90000
a=fmtp:40 apt=39
a=rtpmap:41 H264/90000
a=rtcp-fb:41 goog-remb
a=rtcp-fb:41 transport-cc
a=rtcp-fb:41 ccm fir
a=rtcp-fb:41 nack
a=rtcp-fb:41 nack pli
a=fmtp:41 level-asymmetry-allowed=1;pack
# response:
{
"code" : 0,
"id" : "wKgSAx9AH0A=_45",
"sdp" : "v=0\r\no=- 2603351187133562715 2 IN IP4 10.60.100.196\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1\r\na=msid-semantic: WMS\r\na=ice-lite\r\nm=video 8000 UDP/TLS/RTP/SAVPF 106 107\r\nc=IN IP4 10.60.100.196\r\na=rtcp:8000 IN IP4 10.60.100.196\r\na=ice-ufrag:wKgSAx9AH0A=_45\r\na=ice-pwd:lRD99Pf1Co1vushq2tzTDWX4\r\na=ice-options:trickle\r\na=fingerprint:sha-256 5D:43:0F:2C:BD:82:BB:C5:B4:77:42:D3:8C:2B:D5:1A:32:59:39:1D:78:7A:BB:88:E2:EF:2A:60:37:AD:6E:A3\r\na=setup:passive\r\na=mid:0\r\na=ice-lite\r\na=extmap:1 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\na=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=sendonly\r\na=rtcp-mux\r\na=rtpmap:106 H264/90000\r\na=rtcp-fb:106 ccm fir\r\na=rtcp-fb:106 goog-remb\r\na=rtcp-fb:106 nack\r\na=rtcp-fb:106 nack pli\r\na=rtcp-fb:106 transport-cc\r\na=fmtp:106 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:107 rtx/90000\r\na=fmtp:107 apt=106\r\na=msid:zlmediakit-mslabel zlmediakit-label\r\na=ssrc:1 cname:zlmediakit-rtp\r\na=ssrc:1 msid:zlmediakit-mslabel zlmediakit-label\r\na=ssrc:1 mslabel:zlmediakit-mslabel\r\na=ssrc:1 label:zlmediakit-label\r\na=ssrc:3 cname:zlmediakit-rtp\r\na=ssrc:3 msid:zlmediakit-mslabel zlmediakit-label\r\na=ssrc:3 mslabel:zlmediakit-mslabel\r\na=ssrc:3 label:zlmediakit-label\r\na=ssrc-group:FID 1 3\r\na=candidate:udpcandidate 1 udp 110 10.60.100.196 8000 typ host\r\na=candidate:tcpcandidate 1 tcp 105 10.60.100.196 8000 typ host tcptype passive\r\nm=audio 8000 UDP/TLS/RTP/SAVPF 0\r\nc=IN IP4 10.60.100.196\r\na=rtcp:8000 IN IP4 10.60.100.196\r\na=ice-ufrag:wKgSAx9AH0A=_45\r\na=ice-pwd:lRD99Pf1Co1vushq2tzTDWX4\r\na=ice-options:trickle\r\na=fingerprint:sha-256 5D:43:0F:2C:BD:82:BB:C5:B4:77:42:D3:8C:2B:D5:1A:32:59:39:1D:78:7A:BB:88:E2:EF:2A:60:37:AD:6E:A3\r\na=setup:passive\r\na=mid:1\r\na=ice-lite\r\na=extmap:14 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=sendonly\r\na=rtcp-mux\r\na=rtpmap:0 PCMU/8000/1\r\na=msid:zlmediakit-mslabel zlmediakit-label\r\na=ssrc:2 cname:zlmediakit-rtp\r\na=ssrc:2 msid:zlmediakit-mslabel zlmediakit-label\r\na=ssrc:2 mslabel:zlmediakit-mslabel\r\na=ssrc:2 label:zlmediakit-label\r\na=candidate:udpcandidate 1 udp 110 10.60.100.196 8000 typ host\r\na=candidate:tcpcandidate 1 tcp 105 10.60.100.196 8000 typ host tcptype passive\r\n",
"type" : "answer"
}
2024-03-21 16:02:24.709 W [MediaServer.exe] [23784-event poller 11] WebRtcSession.cpp:104 onError | 224-1436(10.60.100.196:61106) 1(end of file)
2024-03-21 16:02:24.709 W [MediaServer.exe] [23784-event poller 11] WebRtcSession.cpp:104 onError | 225-1368(10.60.100.196:61107) 1(end of file)
2024-03-21 16:02:24.710 W [MediaServer.exe] [23784-event poller 11] WebRtcSession.cpp:104 onError | 227-1500(10.60.100.196:61109) 1(end of file)
2024-03-21 16:02:24.773 I [MediaServer.exe] [23784-event poller 3] WebRtcSession.cpp:85 onRecv_l | 228-1500(10.60.100.196:51044)
2024-03-21 16:02:24.773 D [MediaServer.exe] [23784-event poller 3] IceServer.cpp:340 HandleTuple | transition from state 'new' to 'connected'
2024-03-21 16:02:24.774 I [MediaServer.exe] [23784-event poller 3] WebRtcTransport.cpp:170 OnIceServerSelectedTuple | wKgSAx9AH0A=_45 select tuple udp 10.60.100.196:51044
2024-03-21 16:02:24.774 I [MediaServer.exe] [23784-event poller 3] WebRtcTransport.cpp:176 OnIceServerConnected | wKgSAx9AH0A=_45
2024-03-21 16:02:24.774 E [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:744 ProcessDtlsData | cannot process data while not running
2024-03-21 16:02:24.835 D [MediaServer.exe] [23784-event poller 3] IceServer.cpp:429 HandleTuple | transition from state 'connected' to 'completed'
2024-03-21 16:02:24.835 I [MediaServer.exe] [23784-event poller 3] WebRtcTransport.cpp:180 OnIceServerCompleted | wKgSAx9AH0A=_45
2024-03-21 16:02:24.835 I [MediaServer.exe] [23784-event poller 3] WebRtcTransport.cpp:232 OnDtlsTransportConnecting | wKgSAx9AH0A=_45
2024-03-21 16:02:24.835 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:699 Run | running [role:server]
2024-03-21 16:02:24.835 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1411 OnSslInfo | DTLS handshake start
2024-03-21 16:02:24.835 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'before SSL initialization']
2024-03-21 16:02:24.835 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1407 OnSslInfo | role: server, waiting:'before SSL initialization']
2024-03-21 16:02:24.835 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'before SSL initialization']
2024-03-21 16:02:24.835 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read client hello']
2024-03-21 16:02:24.835 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write server hello']
2024-03-21 16:02:24.835 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write certificate']
2024-03-21 16:02:24.836 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write key exchange']
2024-03-21 16:02:24.836 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write certificate request']
2024-03-21 16:02:24.836 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write server done']
2024-03-21 16:02:24.836 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1407 OnSslInfo | role: server, waiting:'SSLv3/TLS write server done']
2024-03-21 16:02:24.836 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:977 SendPendingOutgoingDtlsData | 2111 bytes of DTLS data ready to sent to the peer
2024-03-21 16:02:24.836 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1015 SetTimeout | DTLS timer set in 100ms
2024-03-21 16:02:24.836 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write server done']
2024-03-21 16:02:24.836 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read client certificate']
2024-03-21 16:02:24.836 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read client key exchange']
2024-03-21 16:02:24.837 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read certificate verify']
2024-03-21 16:02:24.837 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read change cipher spec']
2024-03-21 16:02:24.837 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read finished']
2024-03-21 16:02:24.837 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write change cipher spec']
2024-03-21 16:02:24.837 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write finished']
2024-03-21 16:02:24.837 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1415 OnSslInfo | DTLS handshake done
2024-03-21 16:02:24.837 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:977 SendPendingOutgoingDtlsData | 67 bytes of DTLS data ready to sent to the peer
2024-03-21 16:02:24.837 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1166 CheckRemoteFingerprint | valid remote fingerprint
2024-03-21 16:02:24.837 D [MediaServer.exe] [23784-event poller 3] DtlsTransport.cpp:1340 GetNegotiatedSrtpCryptoSuite | chosen SRTP crypto suite: SRTP_AEAD_AES_256_GCM
2024-03-21 16:02:24.837 I [MediaServer.exe] [23784-event poller 3] WebRtcTransport.cpp:197 OnDtlsTransportConnected | wKgSAx9AH0A=_45
2024-03-21 16:02:24.890 W [MediaServer.exe] [23784-event poller 11] WebRtcTransport.cpp:903 onRtcp | 未识别的sr rtcp包:version:2
padding:0
report_count:0
pt:200(RTCP_SR)
size:28
--------
ssrc:3955139128
ntpmsw:3919996944
ntplsw:3506656113
ntp time:2024-03-21 16:02:24.816
rtpts:4187904151
packet_count:0
octet_count:0
2024-03-21 16:02:24.898 I [MediaServer.exe] [23784-event poller 11] WebRtcTransport.cpp:1012 createRtpChannel | create rtp receiver of ssrc:3955139128, rid:, codec:H264
2024-03-21 16:02:24.898 D [MediaServer.exe] [23784-event poller 11] MediaSink.cpp:162 emitAllTrackReady | All track ready use 452ms
2024-03-21 16:02:24.899 I [MediaServer.exe] [23784-event poller 11] MediaSource.cpp:517 emitEvent | 媒体注册:fmp4://__defaultVhost__/2fbe2a926db241b483ab4ea79950fb0c/dxw3Stream
2024-03-21 16:02:24.900 I [MediaServer.exe] [23784-event poller 11] MultiMediaSourceMuxer.cpp:551 onAllTrackReady | stream: rtc://10.60.100.196:6080/2fbe2a926db241b483ab4ea79950fb0c/dxw3Stream?app=2fbe2a926db241b483ab4ea79950fb0c&stream=dxw3Stream&type=push&session=219-1380 , codec info: PCMU[8000/1/16] H264[480/640/0]
2024-03-21 16:02:24.900 I [MediaServer.exe] [23784-event poller 11] MediaSource.cpp:517 emitEvent | 媒体注册:rtmp://__defaultVhost__/2fbe2a926db241b483ab4ea79950fb0c/dxw3Stream
2024-03-21 16:02:24.901 I [MediaServer.exe] [23784-event poller 11] MediaSource.cpp:517 emitEvent | 媒体注册:ts://__defaultVhost__/2fbe2a926db241b483ab4ea79950fb0c/dxw3Stream
2024-03-21 16:02:24.964 I [MediaServer.exe] [23784-event poller 3] WebRtcSession.cpp:85 onRecv_l | 229-1392(169.167.123.119:51045)
2024-03-21 16:02:25.039 I [MediaServer.exe] [23784-event poller 3] WebRtcSession.cpp:85 onRecv_l | 230-1472(192.168.18.3:51046)
2024-03-21 16:02:26.962 W [MediaServer.exe] [23784-event poller 11] EventPoller.cpp:209 async_l | take time: 16ms, thread may be overloaded
2024-03-21 16:02:27.835 W [MediaServer.exe] [23784-event poller 10] EventPoller.cpp:209 async_l | take time: 16ms, thread may be overloaded
2024-03-21 16:02:28.406 I [MediaServer.exe] [23784-event poller 11] MediaSource.cpp:517 emitEvent | 媒体注册:hls://__defaultVhost__/2fbe2a926db241b483ab4ea79950fb0c/dxw3Stream
2024-03-21 16:02:29.939 W [MediaServer.exe] [23784-event poller 10] EventPoller.cpp:209 async_l | take time: 16ms, thread may be overloaded
2024-03-21 16:02:30.811 W [MediaServer.exe] [23784-event poller 10] EventPoller.cpp:209 async_l | take time: 16ms, thread may be overloaded
2024-03-21 16:02:32.827 W [MediaServer.exe] [23784-event poller 11] EventPoller.cpp:209 async_l | take time: 16ms, thread may be overloaded
2024-03-21 16:02:34.390 W [MediaServer.exe] [23784-event poller 6] WebRtcSession.cpp:104 onError | 223-1420(10.62.14.104:49543) 1(end of file)
2024-03-21 16:02:34.945 W [MediaServer.exe] [23784-event poller 11] WebRtcSession.cpp:104 onError | 226-1496(10.60.100.196:61108) 1(end of file)
2024-03-21 16:02:35.864 W [MediaServer.exe] [23784-event poller 10] EventPoller.cpp:209 async_l | take time: 16ms, thread may be overloaded
主要核心主体的创建
RtspMediaSourceImp的创建
入口处的CB,即是对http的回复


影响到何时生成recorder的代码
下面的invoker为上图中传过来的invoker. 其中最难的就是其中的obj,就是on_publish执行回来的result里的值 。



研发的环境不对,如下

生产环境 2.8是对的,如下

Mediasource之主要解复合MultiMediaSourceMuxer


下面的初始化直接决定着,什么时候生成recorder,是一拉流就有。比如上面record-push-live设置为true时,那么每段放视频,都会进行录制;反之,就直接取决于配置文件是的enable_mp4=false

Mediasource之主要复合

录相
当上述开关正确设置上,就可以达到当打开开关时,才进行录制

trackready

解复用与写_ring

准备阶段
> MediaServer.exe!mediakit::Factory::getRtpDecoderByCodecId(mediakit::CodecId codec) 行 81 C++
MediaServer.exe!mediakit::RtspDemuxer::makeAudioTrack(const std::shared_ptr<mediakit::SdpTrack> & audio) 行 95 C++
MediaServer.exe!mediakit::RtspDemuxer::loadSdp(const mediakit::SdpParser & attr) 行 41 C++
MediaServer.exe!mediakit::RtspDemuxer::loadSdp(const std::string & sdp) 行 23 C++
MediaServer.exe!mediakit::RtspMediaSourceImp::setSdp(const std::string & strSdp) 行 89 C++
MediaServer.exe!mediakit::WebRtcPusher::onStartWebRTC() 行 117 C++
MediaServer.exe!mediakit::WebRtcTransport::OnDtlsTransportConnected(const RTC::DtlsTransport * dtlsTransport, RTC::SrtpSession::CryptoSuite srtpCryptoSuite, unsigned char * srtpLocalKey, unsigned __int64 srtpLocalKeyLen, unsigned char * srtpRemoteKey, unsigned __int64 srtpRemoteKeyLen, std::string & remoteCert) 行 207 C++
MediaServer.exe!RTC::DtlsTransport::ExtractSrtpKeys(RTC::SrtpSession::CryptoSuite srtpCryptoSuite) 行 1314 C++
MediaServer.exe!RTC::DtlsTransport::ProcessHandshake() 行 1070 C++
MediaServer.exe!RTC::DtlsTransport::CheckStatus(int returnCode) 行 925 C++
MediaServer.exe!RTC::DtlsTransport::ProcessDtlsData(const unsigned char * data, unsigned __int64 len) 行 768 C++
MediaServer.exe!mediakit::WebRtcTransport::inputSockData(char * buf, int len, toolkit::Session * tuple) 行 448 C++
MediaServer.exe!mediakit::WebRtcSession::onRecv_l(const char * data, unsigned __int64 len) 行 90 C++
MediaServer.exe!mediakit::WebRtcSession::onRecv(const std::shared_ptr<toolkit::Buffer> & buffer) 行 98 C++
MediaServer.exe!toolkit::emitSessionRecv(const std::shared_ptr<toolkit::SessionHelper> & helper, const std::shared_ptr<toolkit::Buffer> & buf) 行 156 C++
MediaServer.exe!toolkit::UdpServer::onRead_l::__l10::<lambda>() 行 179 C++
[外部代码]
MediaServer.exe!toolkit::TaskCancelableImp<void __cdecl(void)>::operator()() 行 111 C++
MediaServer.exe!toolkit::EventPoller::onPipeEvent::__l2::<lambda>(const std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>> & task) 行 307 C++
MediaServer.exe!toolkit::List<std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>>>::for_each<void <lambda>(const std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>> &)>(toolkit::EventPoller::onPipeEvent::__l2::void <lambda>(const std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>> &) && func) 行 203 C++
MediaServer.exe!toolkit::EventPoller::onPipeEvent(bool flush) 行 305 C++
MediaServer.exe!toolkit::EventPoller::addEventPipe::__l3::<lambda>(int event) 行 64 C++
[外部代码]
MediaServer.exe!toolkit::EventPoller::runLoop(bool blocked, bool ref_self) 行 381 C++
[外部代码]
MediaServer.exe!thread_start<unsigned int (__cdecl*)(void *),1>(void * const parameter) 行 97 C++
[外部代码]
decoder解出的数据丢给tracker,tracker会让demuxer里的sinker来代理处理(如下面第二图)
打断点,走的是下面 ,没有看到 wait_track_ready 为true


开始写数据阶段

解释下上面的,倒数第五行有commonrtpDecoder:inputRtp,是g711进行getrtpdecoder时引入的;video时应该直接进行 了H264RtpDecoder::inputRtp

MediaServer.exe!mediakit::PacketCache<mediakit::TSPacket,mediakit::FlushPolicy,toolkit::List<std::shared_ptr<mediakit::TSPacket>>>::flush() 行 60 C++
MediaServer.exe!mediakit::PacketCache<mediakit::TSPacket,mediakit::FlushPolicy,toolkit::List<std::shared_ptr<mediakit::TSPacket>>>::inputPacket(unsigned __int64 stamp, bool is_video, std::shared_ptr<mediakit::TSPacket> pkt, bool key_pos) 行 52 C++
MediaServer.exe!mediakit::TSMediaSource::onWrite(std::shared_ptr<mediakit::TSPacket> packet, bool key) 行 78 C++
MediaServer.exe!mediakit::TSMediaSourceMuxer::onWrite(std::shared_ptr<toolkit::Buffer> buffer, unsigned __int64 timestamp, bool key_pos) 行 77 C++
MediaServer.exe!mediakit::MpegMuxer::flushCache() 行 137 C++
MediaServer.exe!mediakit::MpegMuxer::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 85 C++
MediaServer.exe!mediakit::TSMediaSourceMuxer::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 60 C++
MediaServer.exe!mediakit::MultiMediaSourceMuxer::onTrackFrame_l(const std::shared_ptr<mediakit::Frame> & frame_in) 行 619 C++
MediaServer.exe!mediakit::MultiMediaSourceMuxer::onTrackFrame(const std::shared_ptr<mediakit::Frame> & frame_in) 行 606 C++
MediaServer.exe!mediakit::MediaSink::addTrack::__l2::<lambda>(const std::shared_ptr<mediakit::Frame> & frame) 行 52 C++
[外部代码]
MediaServer.exe!mediakit::FrameWriterInterfaceHelper::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 318 C++
MediaServer.exe!mediakit::FrameDispatcher::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 568 C++
MediaServer.exe!mediakit::MediaSink::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 87 C++
MediaServer.exe!mediakit::FrameDispatcher::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 568 C++
MediaServer.exe!mediakit::FrameDispatcher::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 568 C++
MediaServer.exe!mediakit::CommonRtpDecoder::inputRtp(const std::shared_ptr<mediakit::RtpPacket> & rtp, bool __formal) 行 40 C++
> MediaServer.exe!mediakit::RtspDemuxer::inputRtp(const std::shared_ptr<mediakit::RtpPacket> & rtp) 行 66 C++
MediaServer.exe!mediakit::RtspMediaSourceImp::onWrite(std::shared_ptr<mediakit::RtpPacket> rtp, bool key_pos) 行 100 C++
MediaServer.exe!mediakit::WebRtcPusher::onRecvRtp(mediakit::MediaTrack & track, const std::string & rid, std::shared_ptr<mediakit::RtpPacket> rtp) 行 89 C++
MediaServer.exe!mediakit::WebRtcTransportImp::onSortedRtp(mediakit::MediaTrack & track, const std::string & rid, std::shared_ptr<mediakit::RtpPacket> rtp) 行 1123 C++
MediaServer.exe!mediakit::WebRtcTransportImp::createRtpChannel::__l2::<lambda>(std::shared_ptr<mediakit::RtpPacket> rtp) 行 1003 C++
[外部代码]
MediaServer.exe!mediakit::RtpTrackImp::onRtpSorted(std::shared_ptr<mediakit::RtpPacket> rtp) 行 133 C++
MediaServer.exe!mediakit::RtpTrack::{ctor}::__l2::<lambda>(unsigned short seq, std::shared_ptr<mediakit::RtpPacket> packet) 行 18 C++
[外部代码]
MediaServer.exe!mediakit::PacketSortor<std::shared_ptr<mediakit::RtpPacket>,unsigned short>::output(unsigned short seq, std::shared_ptr<mediakit::RtpPacket> packet) 行 174 C++
MediaServer.exe!mediakit::PacketSortor<std::shared_ptr<mediakit::RtpPacket>,unsigned short>::sortPacket(unsigned short seq, std::shared_ptr<mediakit::RtpPacket> packet) 行 66 C++
MediaServer.exe!mediakit::RtpTrack::inputRtp(mediakit::TrackType type, int sample_rate, unsigned char * ptr, unsigned __int64 len) 行 107 C++
MediaServer.exe!mediakit::RtpChannel::inputRtp(mediakit::TrackType type, int sample_rate, unsigned char * ptr, unsigned __int64 len, bool is_rtx) 行 808 C++
MediaServer.exe!mediakit::WrappedRtpTrack::inputRtp(const char * buf, unsigned __int64 len, unsigned __int64 stamp_ms, mediakit::RtpHeader * rtp) 行 1057 C++
MediaServer.exe!mediakit::WebRtcTransportImp::onRtp(const char * buf, unsigned __int64 len, unsigned __int64 stamp_ms) 行 1029 C++
MediaServer.exe!mediakit::WebRtcTransport::inputSockData(char * buf, int len, toolkit::Session * tuple) 行 457 C++
MediaServer.exe!mediakit::WebRtcSession::onRecv_l(const char * data, unsigned __int64 len) 行 90 C++
MediaServer.exe!mediakit::WebRtcSession::onRecvHeader(const char * data, unsigned __int64 len) 行 133 C++
MediaServer.exe!mediakit::HttpRequestSplitter::input(const char * data, unsigned __int64 len) 行 65 C++
MediaServer.exe!mediakit::WebRtcSession::onRecv(const std::shared_ptr<toolkit::Buffer> & buffer) 行 95 C++
MediaServer.exe!toolkit::TcpServer::onAcceptConnection::__l2::<lambda>(const std::shared_ptr<toolkit::Buffer> & buf, sockaddr * __formal, int __formal) 行 132 C++
[外部代码]
MediaServer.exe!toolkit::Socket::onRead(const std::shared_ptr<toolkit::SockNum> & sock, const std::shared_ptr<toolkit::BufferRaw> & buffer) 行 319 C++
MediaServer.exe!toolkit::Socket::attachEvent::__l2::<lambda>(int event) 行 259 C++
[外部代码]
MediaServer.exe!toolkit::EventPoller::runLoop(bool blocked, bool ref_self) 行 331 C++
[外部代码]
MediaServer.exe!thread_start<unsigned int (__cdecl*)(void *),1>(void * const parameter) 行 97 C++
[外部代码]

对于如果写数据,如果通过delegate进入到MultiMediaSourceMuxer 进入转发到各解码器,是如上的图。
关于设置delegate:


流程再截图
(3)

> MediaServer.exe!mediakit::RtspDemuxer::inputRtp(const std::shared_ptr<mediakit::RtpPacket> & rtp) 行 65 C++
MediaServer.exe!mediakit::RtspMediaSourceImp::onWrite(std::shared_ptr<mediakit::RtpPacket> rtp, bool key_pos) 行 100 C++
MediaServer.exe!mediakit::WebRtcPusher::onRecvRtp(mediakit::MediaTrack & track, const std::string & rid, std::shared_ptr<mediakit::RtpPacket> rtp) 行 89 C++
MediaServer.exe!mediakit::WebRtcTransportImp::onSortedRtp(mediakit::MediaTrack & track, const std::string & rid, std::shared_ptr<mediakit::RtpPacket> rtp) 行 1126 C++
MediaServer.exe!mediakit::WebRtcTransportImp::createRtpChannel::__l2::<lambda>(std::shared_ptr<mediakit::RtpPacket> rtp) 行 1006 C++
[外部代码]
MediaServer.exe!mediakit::RtpTrackImp::onRtpSorted(std::shared_ptr<mediakit::RtpPacket> rtp) 行 133 C++
MediaServer.exe!mediakit::RtpTrack::{ctor}::__l2::<lambda>(unsigned short seq, std::shared_ptr<mediakit::RtpPacket> packet) 行 18 C++
[外部代码]
MediaServer.exe!mediakit::PacketSortor<std::shared_ptr<mediakit::RtpPacket>,unsigned short>::output(unsigned short seq, std::shared_ptr<mediakit::RtpPacket> packet) 行 174 C++
MediaServer.exe!mediakit::PacketSortor<std::shared_ptr<mediakit::RtpPacket>,unsigned short>::sortPacket(unsigned short seq, std::shared_ptr<mediakit::RtpPacket> packet) 行 66 C++
MediaServer.exe!mediakit::RtpTrack::inputRtp(mediakit::TrackType type, int sample_rate, unsigned char * ptr, unsigned __int64 len) 行 107 C++
MediaServer.exe!mediakit::RtpChannel::inputRtp(mediakit::TrackType type, int sample_rate, unsigned char * ptr, unsigned __int64 len, bool is_rtx) 行 811 C++
MediaServer.exe!mediakit::WrappedRtpTrack::inputRtp(const char * buf, unsigned __int64 len, unsigned __int64 stamp_ms, mediakit::RtpHeader * rtp) 行 1060 C++
MediaServer.exe!mediakit::WebRtcTransportImp::onRtp(const char * buf, unsigned __int64 len, unsigned __int64 stamp_ms) 行 1032 C++
MediaServer.exe!mediakit::WebRtcTransport::inputSockData(char * buf, int len, toolkit::Session * tuple) 行 458 C++
MediaServer.exe!mediakit::WebRtcSession::onRecv_l(const char * data, unsigned __int64 len) 行 90 C++
MediaServer.exe!mediakit::WebRtcSession::onRecv(const std::shared_ptr<toolkit::Buffer> & buffer) 行 98 C++
MediaServer.exe!toolkit::emitSessionRecv(const std::shared_ptr<toolkit::SessionHelper> & helper, const std::shared_ptr<toolkit::Buffer> & buf) 行 156 C++
MediaServer.exe!toolkit::UdpServer::onRead_l::__l10::<lambda>() 行 179 C++
[外部代码]
MediaServer.exe!toolkit::TaskCancelableImp<void __cdecl(void)>::operator()() 行 111 C++
MediaServer.exe!toolkit::EventPoller::onPipeEvent::__l2::<lambda>(const std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>> & task) 行 307 C++
MediaServer.exe!toolkit::List<std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>>>::for_each<void <lambda>(const std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>> &)>(toolkit::EventPoller::onPipeEvent::__l2::void <lambda>(const std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>> &) && func) 行 203 C++
MediaServer.exe!toolkit::EventPoller::onPipeEvent(bool flush) 行 305 C++
MediaServer.exe!toolkit::EventPoller::addEventPipe::__l3::<lambda>(int event) 行 64 C++
[外部代码]
MediaServer.exe!toolkit::EventPoller::runLoop(bool blocked, bool ref_self) 行 381 C++
[外部代码]
MediaServer.exe!thread_start<unsigned int (__cdecl*)(void *),1>(void * const parameter) 行 97 C++
[外部代码]
音频:

直接转发


(2)


最开始一段
(1)

> MediaServer.exe!mediakit::push_plugin::__l2::<lambda>(const std::string & err, const mediakit::ProtocolOption & option) 行 1354 C++
[外部代码]
MediaServer.exe!installWebHook::__l2::void <lambda>(const mediakit::MediaOriginType &, const mediakit::MediaInfo &, const std::function<void __cdecl(std::string const &,mediakit::ProtocolOption const &)> &, toolkit::SockInfo &)::__l2::<lambda>(const Json::Value & obj, const std::string & err) 行 356 C++
[外部代码]
MediaServer.exe!do_http_hook::__l2::void <lambda>(const toolkit::SockException &, const mediakit::Parser &)::__l2::<lambda>(const Json::Value & obj, const std::string & err, bool should_retry) 行 213 C++
[外部代码]
MediaServer.exe!parse_http_response(const toolkit::SockException & ex, const mediakit::Parser & res, const std::function<void __cdecl(Json::Value const &,std::string const &,bool)> & fun) 行 134 C++
MediaServer.exe!do_http_hook::__l2::<lambda>(const toolkit::SockException & ex, const mediakit::Parser & res) 行 191 C++
[外部代码]
MediaServer.exe!mediakit::HttpRequester::onResponseCompleted(const toolkit::SockException & ex) 行 43 C++
MediaServer.exe!mediakit::HttpClient::onResponseCompleted_l(const toolkit::SockException & ex) 行 354 C++
MediaServer.exe!mediakit::HttpClient::onRecvHeader::__l14::<lambda>(const char * data, unsigned __int64 len) 行 238 C++
[外部代码]
MediaServer.exe!mediakit::HttpChunkedSplitter::onRecvChunk(const char * data, unsigned __int64 len) 行 39 C++
MediaServer.exe!mediakit::HttpChunkedSplitter::onRecvContent(const char * data, unsigned __int64 len) 行 31 C++
MediaServer.exe!mediakit::HttpRequestSplitter::input(const char * data, unsigned __int64 len) 行 97 C++
MediaServer.exe!mediakit::HttpClient::onRecvContent(const char * data, unsigned __int64 len) 行 272 C++
MediaServer.exe!mediakit::HttpRequestSplitter::input(const char * data, unsigned __int64 len) 行 116 C++
MediaServer.exe!mediakit::HttpClient::onRecv(const std::shared_ptr<toolkit::Buffer> & pBuf) 行 194 C++
MediaServer.exe!toolkit::TcpClientWithSSL<mediakit::HttpClient>::public_onRecv(const std::shared_ptr<toolkit::Buffer> & buf) 行 129 C++
MediaServer.exe!toolkit::TcpClientWithSSL<mediakit::HttpClient>::onConnect::__l5::<lambda>(const std::shared_ptr<toolkit::Buffer> & buf) 行 152 C++
[外部代码]
MediaServer.exe!toolkit::SSL_Box::flushReadBio() 行 451 C++
MediaServer.exe!toolkit::SSL_Box::flush() 行 473 C++
MediaServer.exe!toolkit::SSL_Box::onRecv(const std::shared_ptr<toolkit::Buffer> & buffer) 行 357 C++
MediaServer.exe!toolkit::TcpClientWithSSL<mediakit::HttpClient>::onRecv(const std::shared_ptr<toolkit::Buffer> & buf) 行 109 C++
MediaServer.exe!toolkit::TcpClient::onSockConnect::__l2::<lambda>(const std::shared_ptr<toolkit::Buffer> & pBuf, sockaddr * __formal, int __formal) 行 122 C++
[外部代码]
MediaServer.exe!toolkit::Socket::setOnRead::__l5::<lambda>(std::shared_ptr<toolkit::Buffer> * buf, sockaddr_storage * addr, unsigned __int64 count) 行 88 C++
[外部代码]
MediaServer.exe!toolkit::Socket::onRead(const std::shared_ptr<toolkit::SockNum> & sock, const std::shared_ptr<toolkit::SocketRecvBuffer> & buffer) 行 323 C++
MediaServer.exe!toolkit::Socket::attachEvent::__l2::<lambda>(int event) 行 275 C++
[外部代码]
MediaServer.exe!toolkit::EventPoller::runLoop(bool blocked, bool ref_self) 行 381 C++
[外部代码]
MediaServer.exe!thread_start<unsigned int (__cdecl*)(void *),1>(void * const parameter) 行 97 C++
[外部代码]
inputFrame
directProxy=0
> MediaServer.exe!mediakit::RtspMediaSourceMuxer::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 72 C++
MediaServer.exe!mediakit::MultiMediaSourceMuxer::onTrackFrame_l(const std::shared_ptr<mediakit::Frame> & frame_in) 行 623 C++
MediaServer.exe!mediakit::MultiMediaSourceMuxer::onTrackFrame(const std::shared_ptr<mediakit::Frame> & frame_in) 行 613 C++
MediaServer.exe!mediakit::MediaSink::addTrack::__l2::<lambda>(const std::shared_ptr<mediakit::Frame> & frame) 行 52 C++
[外部代码]
MediaServer.exe!mediakit::FrameWriterInterfaceHelper::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 318 C++
MediaServer.exe!mediakit::FrameDispatcher::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 568 C++
MediaServer.exe!mediakit::MediaSink::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 87 C++
MediaServer.exe!mediakit::FrameDispatcher::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 568 C++
MediaServer.exe!mediakit::FrameDispatcher::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 568 C++
MediaServer.exe!mediakit::CommonRtpDecoder::inputRtp(const std::shared_ptr<mediakit::RtpPacket> & rtp, bool __formal) 行 40 C++
MediaServer.exe!mediakit::RtspDemuxer::inputRtp(const std::shared_ptr<mediakit::RtpPacket> & rtp) 行 66 C++
MediaServer.exe!mediakit::RtspMediaSourceImp::onWrite(std::shared_ptr<mediakit::RtpPacket> rtp, bool key_pos) 行 100 C++
MediaServer.exe!mediakit::WebRtcPusher::onRecvRtp(mediakit::MediaTrack & track, const std::string & rid, std::shared_ptr<mediakit::RtpPacket> rtp) 行 89 C++
MediaServer.exe!mediakit::WebRtcTransportImp::onSortedRtp(mediakit::MediaTrack & track, const std::string & rid, std::shared_ptr<mediakit::RtpPacket> rtp) 行 1126 C++
MediaServer.exe!mediakit::WebRtcTransportImp::createRtpChannel::__l2::<lambda>(std::shared_ptr<mediakit::RtpPacket> rtp) 行 1006 C++
[外部代码]
MediaServer.exe!mediakit::RtpTrackImp::onRtpSorted(std::shared_ptr<mediakit::RtpPacket> rtp) 行 133 C++
MediaServer.exe!mediakit::RtpTrack::{ctor}::__l2::<lambda>(unsigned short seq, std::shared_ptr<mediakit::RtpPacket> packet) 行 18 C++
[外部代码]
MediaServer.exe!mediakit::PacketSortor<std::shared_ptr<mediakit::RtpPacket>,unsigned short>::output(unsigned short seq, std::shared_ptr<mediakit::RtpPacket> packet) 行 174 C++
MediaServer.exe!mediakit::PacketSortor<std::shared_ptr<mediakit::RtpPacket>,unsigned short>::sortPacket(unsigned short seq, std::shared_ptr<mediakit::RtpPacket> packet) 行 66 C++
MediaServer.exe!mediakit::RtpTrack::inputRtp(mediakit::TrackType type, int sample_rate, unsigned char * ptr, unsigned __int64 len) 行 107 C++
MediaServer.exe!mediakit::RtpChannel::inputRtp(mediakit::TrackType type, int sample_rate, unsigned char * ptr, unsigned __int64 len, bool is_rtx) 行 811 C++
MediaServer.exe!mediakit::WrappedRtpTrack::inputRtp(const char * buf, unsigned __int64 len, unsigned __int64 stamp_ms, mediakit::RtpHeader * rtp) 行 1060 C++
MediaServer.exe!mediakit::WebRtcTransportImp::onRtp(const char * buf, unsigned __int64 len, unsigned __int64 stamp_ms) 行 1032 C++
MediaServer.exe!mediakit::WebRtcTransport::inputSockData(char * buf, int len, toolkit::Session * tuple) 行 458 C++
MediaServer.exe!mediakit::WebRtcSession::onRecv_l(const char * data, unsigned __int64 len) 行 90 C++
MediaServer.exe!mediakit::WebRtcSession::onRecv(const std::shared_ptr<toolkit::Buffer> & buffer) 行 98 C++
MediaServer.exe!toolkit::emitSessionRecv(const std::shared_ptr<toolkit::SessionHelper> & helper, const std::shared_ptr<toolkit::Buffer> & buf) 行 156 C++
MediaServer.exe!toolkit::UdpServer::onRead_l::__l10::<lambda>() 行 179 C++
[外部代码]
MediaServer.exe!toolkit::TaskCancelableImp<void __cdecl(void)>::operator()() 行 111 C++
MediaServer.exe!toolkit::EventPoller::onPipeEvent::__l2::<lambda>(const std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>> & task) 行 307 C++
MediaServer.exe!toolkit::List<std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>>>::for_each<void <lambda>(const std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>> &)>(toolkit::EventPoller::onPipeEvent::__l2::void <lambda>(const std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>> &) && func) 行 203 C++
MediaServer.exe!toolkit::EventPoller::onPipeEvent(bool flush) 行 305 C++
MediaServer.exe!toolkit::EventPoller::addEventPipe::__l3::<lambda>(int event) 行 64 C++
[外部代码]
MediaServer.exe!toolkit::EventPoller::runLoop(bool blocked, bool ref_self) 行 381 C++
[外部代码]
MediaServer.exe!thread_start<unsigned int (__cdecl*)(void *),1>(void * const parameter) 行 97 C++
[外部代码]
H264RtpDecoder::inputRtp
decodeRtp
H264RtpDecoder::decodeRtp return singleFrame(rtp, frame, payload_size, stamp);
H264RtpDecoder::singleFrame -> outputFrame
H264RtpDecoder::outputFrame -> RtpCodec::inputFrame(

FrameDispatcher: inputFrame

是因为,这个时候加 addtrack时,MultiMediaSourceMuxer :mediasink ,所以这块就直接使用的mediasink 的addtrack,而在 mediasink里给track加 delegate的时候,也是在这个mediasink:addtrack, 其实,这个时候,要把MultiMediaSourceMuxer 看成一个mediasink

> MediaServer.exe!mediakit::MediaSink::addTrack(const std::shared_ptr<mediakit::Track> & track_in) 行 22 C++
MediaServer.exe!mediakit::RtspMediaSourceImp::addTrack(const std::shared_ptr<mediakit::Track> & track) 行 64 C++
MediaServer.exe!mediakit::Demuxer::addTrack(const std::shared_ptr<mediakit::Track> & track) 行 346 C++
MediaServer.exe!mediakit::RtspDemuxer::makeAudioTrack(const std::shared_ptr<mediakit::SdpTrack> & audio) 行 103 C++
MediaServer.exe!mediakit::RtspDemuxer::loadSdp(const mediakit::SdpParser & attr) 行 41 C++
MediaServer.exe!mediakit::RtspDemuxer::loadSdp(const std::string & sdp) 行 23 C++
MediaServer.exe!mediakit::RtspMediaSourceImp::setSdp(const std::string & strSdp) 行 89 C++
MediaServer.exe!mediakit::WebRtcPusher::onStartWebRTC() 行 117 C++
MediaServer.exe!mediakit::WebRtcTransport::OnDtlsTransportConnected(const RTC::DtlsTransport * dtlsTransport, RTC::SrtpSession::CryptoSuite srtpCryptoSuite, unsigned char * srtpLocalKey, unsigned __int64 srtpLocalKeyLen, unsigned char * srtpRemoteKey, unsigned __int64 srtpRemoteKeyLen, std::string & remoteCert) 行 207 C++
MediaServer.exe!RTC::DtlsTransport::ExtractSrtpKeys(RTC::SrtpSession::CryptoSuite srtpCryptoSuite) 行 1314 C++
MediaServer.exe!RTC::DtlsTransport::ProcessHandshake() 行 1070 C++
MediaServer.exe!RTC::DtlsTransport::CheckStatus(int returnCode) 行 925 C++
MediaServer.exe!RTC::DtlsTransport::ProcessDtlsData(const unsigned char * data, unsigned __int64 len) 行 768 C++
MediaServer.exe!mediakit::WebRtcTransport::inputSockData(char * buf, int len, toolkit::Session * tuple) 行 448 C++
MediaServer.exe!mediakit::WebRtcSession::onRecv_l(const char * data, unsigned __int64 len) 行 90 C++
MediaServer.exe!mediakit::WebRtcSession::onRecv(const std::shared_ptr<toolkit::Buffer> & buffer) 行 98 C++
MediaServer.exe!toolkit::emitSessionRecv(const std::shared_ptr<toolkit::SessionHelper> & helper, const std::shared_ptr<toolkit::Buffer> & buf) 行 156 C++
MediaServer.exe!toolkit::UdpServer::onRead_l::__l10::<lambda>() 行 179 C++
[外部代码]
MediaServer.exe!toolkit::TaskCancelableImp<void __cdecl(void)>::operator()() 行 111 C++
MediaServer.exe!toolkit::EventPoller::onPipeEvent::__l2::<lambda>(const std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>> & task) 行 307 C++
MediaServer.exe!toolkit::List<std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>>>::for_each<void <lambda>(const std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>> &)>(toolkit::EventPoller::onPipeEvent::__l2::void <lambda>(const std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>> &) && func) 行 203 C++
MediaServer.exe!toolkit::EventPoller::onPipeEvent(bool flush) 行 305 C++
MediaServer.exe!toolkit::EventPoller::addEventPipe::__l3::<lambda>(int event) 行 64 C++
[外部代码]
MediaServer.exe!toolkit::EventPoller::runLoop(bool blocked, bool ref_self) 行 381 C++
[外部代码]
MediaServer.exe!thread_start<unsigned int (__cdecl*)(void *),1>(void * const parameter) 行 97 C++
[外部代码]

关键 mediasink里给track加 delegate的时候
rtspMuxer.cpp里 addtrack
完成了encoder的获取,及往里面塞_ring的过程

demuxer -》makevideotrack ->Demuxer::addTrack->_listener->addTrack->RtspMediaSourceImp:addTrack()->_muxer->addtrack -> MultiMediaSourceMuxer->MediaSink::addTrack->_track_ready_callback[index] = [this, track]() { onTrackReady(track); };

然后进入 RtspMuxer::addTrack ,就看到

这里在 初始化的时候 ,RtspMediaSourceMuxer把 它的ring 委托给了 ms,这样就解释了,封装后,取的ms里的_ring,实际上取的就是 muxer里的ring 了!

参考文章
【zlm】 webrtc源码讲解(二)_webrtc 源码-优快云博客
WebRTC: Real-Time Communication in Browsers (w3.org)
网络抖动Jitter详解-简易百科 (isolves.com)
| Socket的详细介绍 | Socket的详细介绍-优快云博客 | |||||||||
| EventPoller | 《ZLToolKit源码学习笔记》(12)事件轮询模块之整体框架概述_eventpoller.h-优快云博客 | |||||||||
| zlmediakit启动 | ZLMediaKit源码分析(一)服务启动_zlmediakit源码解析-优快云博客 | |||||||||
| webrtc的源码解读,几个连接步骤 | WebRTC源码解读一_peerconnection.observer-优快云博客 | |||||||||
| ZLMediaKit 服务器源码解读---RTSP推流拉流 | ZLMediaKit 服务器源码解读---RTSP推流拉流_zlmediakit rtsp-优快云博客 | |||||||||
| h264的硬件解码 | Android音视频【三】硬解码播放H264_android_顾修忠-即构开发者社区 (youkuaiyun.com) | |||||||||
| 夏楚讲源码 | 【zlm】zlm源码讲解-优快云博客 | |||||||||
| ZLMediaKit 服务器源码解读---广播、通知中心 | ZLMediaKit 服务器源码解读---广播、通知中心(NoticeCenter)_zlmediakit 广播-优快云博客 |
https://blog.youkuaiyun.com/dualvencsdn/article/details/144542074


1860

被折叠的 条评论
为什么被折叠?



