【zlm】 webrtc源码讲解(二)

目录

webrtc播放

MultiMediaSourceMuxer里的_ring

再读mediasink关键类

什么时候将encode放入track的呢

参考文档


webrtc播放

>	MediaServer.exe!mediakit::WebRtcPlayer::onStartWebRTC() 行 60	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++
 	[外部代码]	

MultiMediaSourceMuxer里的_ring

与我们在zlm里的播放无关

MultiMediaSourceMuxer里的_ring可供api直接调用,或者

 MultiMediaSourceMuxer::startSendRtp也应该是api调用的。

再读mediasink关键类

checkTrackIfReady 比较关键。

因为只有ready了,才会触发到multimediasourecmuxer里的onTrackFrame()

>	MediaServer.exe!mediakit::H264RtpEncoder::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 282	C++
 	MediaServer.exe!mediakit::RtspMuxer::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 137	C++
 	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::H264Track::inputFrame_l(const std::shared_ptr<mediakit::Frame> & frame) 行 260	C++
 	MediaServer.exe!mediakit::H264Track::inputFrame::__l2::<lambda>(const char * ptr, unsigned __int64 len, unsigned __int64 prefix) 行 155	C++
 	[外部代码]	
 	MediaServer.exe!mediakit::splitH264(const char * ptr, unsigned __int64 len, unsigned __int64 prefix, const std::function<void __cdecl(char const *,unsigned __int64,unsigned __int64)> & cb) 行 89	C++
 	MediaServer.exe!mediakit::H264Track::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 153	C++
 	MediaServer.exe!mediakit::MediaSink::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 87	C++
 	MediaServer.exe!mediakit::MediaSink::emitAllTrackReady::__l20::<lambda>(const std::shared_ptr<mediakit::Frame> & frame) 行 187	C++
 	MediaServer.exe!toolkit::List<std::shared_ptr<mediakit::Frame>>::for_each<void <lambda>(const std::shared_ptr<mediakit::Frame> &)>(mediakit::MediaSink::emitAllTrackReady::__l20::void <lambda>(const std::shared_ptr<mediakit::Frame> &) && func) 行 203	C++
 	MediaServer.exe!mediakit::MediaSink::emitAllTrackReady() 行 188	C++
 	MediaServer.exe!mediakit::MediaSink::checkTrackIfReady() 行 132	C++
 	MediaServer.exe!mediakit::MediaSink::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 93	C++
 	MediaServer.exe!mediakit::FrameDispatcher::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 568	C++
 	MediaServer.exe!mediakit::H264Track::inputFrame_l(const std::shared_ptr<mediakit::Frame> & frame) 行 266	C++
 	MediaServer.exe!mediakit::H264Track::inputFrame::__l2::<lambda>(const char * ptr, unsigned __int64 len, unsigned __int64 prefix) 行 155	C++
 	[外部代码]	
 	MediaServer.exe!mediakit::splitH264(const char * ptr, unsigned __int64 len, unsigned __int64 prefix, const std::function<void __cdecl(char const *,unsigned __int64,unsigned __int64)> & cb) 行 89	C++
 	MediaServer.exe!mediakit::H264Track::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 153	C++
 	MediaServer.exe!mediakit::FrameDispatcher::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 568	C++
 	MediaServer.exe!mediakit::H264RtpDecoder::outputFrame(const std::shared_ptr<mediakit::RtpPacket> & rtp, const std::shared_ptr<mediakit::H264FrameHelper<mediakit::FrameImp>> & frame) 行 188	C++
 	MediaServer.exe!mediakit::H264RtpDecoder::singleFrame(const std::shared_ptr<mediakit::RtpPacket> & rtp, const unsigned char * ptr, __int64 size, unsigned __int64 stamp) 行 81	C++
 	MediaServer.exe!mediakit::H264RtpDecoder::unpackStapA(const std::shared_ptr<mediakit::RtpPacket> & rtp, const unsigned char * ptr, __int64 size, unsigned __int64 stamp) 行 96	C++
 	MediaServer.exe!mediakit::H264RtpDecoder::decodeRtp(const std::shared_ptr<mediakit::RtpPacket> & rtp) 行 156	C++
 	MediaServer.exe!mediakit::H264RtpDecoder::inputRtp(const std::shared_ptr<mediakit::RtpPacket> & rtp, bool key_pos) 行 48	C++
 	MediaServer.exe!mediakit::RtspDemuxer::inputRtp(const std::shared_ptr<mediakit::RtpPacket> & rtp) 行 59	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) 行 164	C++
 	MediaServer.exe!toolkit::UdpServer::onRead_l::__l10::<lambda>() 行 191	C++
 	[外部代码]	
 	MediaServer.exe!toolkit::TaskCancelableImp<void __cdecl(void)>::operator()() 行 129	C++
 	MediaServer.exe!toolkit::EventPoller::onPipeEvent::__l2::<lambda>(const std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>> & task) 行 316	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) 行 314	C++
 	MediaServer.exe!toolkit::EventPoller::addEventPipe::__l3::<lambda>(int event) 行 66	C++
 	[外部代码]	
 	MediaServer.exe!toolkit::EventPoller::runLoop(bool blocked, bool ref_self) 行 392	C++
 	[外部代码]	
 	MediaServer.exe!thread_start<unsigned int (__cdecl*)(void *),1>(void * const parameter) 行 97	C++
 	[外部代码]	

什么时候将encode放入track的呢

这里说明了什么时候用到了 getSDP()

>	MediaServer.exe!mediakit::RtspMuxer::addTrack(const std::shared_ptr<mediakit::Track> & track) 行 59	C++
 	MediaServer.exe!mediakit::MultiMediaSourceMuxer::onTrackReady(const std::shared_ptr<mediakit::Track> & track) 行 486	C++
 	MediaServer.exe!mediakit::MediaSink::addTrack::__l2::<lambda>() 行 48	C++
 	[外部代码]	
 	MediaServer.exe!mediakit::MediaSink::checkTrackIfReady() 行 104	C++
 	MediaServer.exe!mediakit::MediaSink::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 93	C++
 	MediaServer.exe!mediakit::FrameDispatcher::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 568	C++
 	MediaServer.exe!mediakit::VP9Track::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 190	C++
 	MediaServer.exe!mediakit::FrameDispatcher::inputFrame(const std::shared_ptr<mediakit::Frame> & frame) 行 568	C++
 	MediaServer.exe!mediakit::Vp9Codec::inputRtp(const std::shared_ptr<mediakit::RtpPacket> & rtp, bool key_pos) 行 44	C++
 	MediaServer.exe!mediakit::RtspDemuxer::inputRtp(const std::shared_ptr<mediakit::RtpPacket> & rtp) 行 59	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) 行 164	C++
 	MediaServer.exe!toolkit::UdpServer::onRead_l::__l10::<lambda>() 行 191	C++
 	[外部代码]	
 	MediaServer.exe!toolkit::TaskCancelableImp<void __cdecl(void)>::operator()() 行 129	C++
 	MediaServer.exe!toolkit::EventPoller::onPipeEvent::__l2::<lambda>(const std::shared_ptr<toolkit::TaskCancelableImp<void __cdecl(void)>> & task) 行 316	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) 行 314	C++
 	MediaServer.exe!toolkit::EventPoller::addEventPipe::__l3::<lambda>(int event) 行 66	C++
 	[外部代码]	
 	MediaServer.exe!toolkit::EventPoller::runLoop(bool blocked, bool ref_self) 行 392	C++
 	[外部代码]	
 	MediaServer.exe!thread_start<unsigned int (__cdecl*)(void *),1>(void * const parameter) 行 97	C++
 	[外部代码]	

参考文档

【zlm】 webrtc源码讲解_zlm webrtc-优快云博客

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dualven_in_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值