斷線重連處理
阿新 • • 發佈:2019-01-30
繼承 RtpFeedback
#ifndef CHANNEL_RTPFEEDBACKIMPL_H #define CHANNEL_RTPFEEDBACKIMPL_H #include "rtp_rtcp_defines.h" #include "xx\defines.h" using namespace webrtc ; class RtpFeedbackImpl : public RtpFeedback { public: RtpFeedbackImpl (NET_ADAPTER_TYPE net_adapter_type) ; ~RtpFeedbackImpl () ; //only this func is used to deal with dead or alive status void OnPeriodicDeadOrAlive(const WebRtc_Word32 id, const RTPAliveType alive) ; public: //imp RtpFeedback WebRtc_Word32 OnInitializeDecoder( const WebRtc_Word32 id, const WebRtc_Word8 payloadType, const char payloadName[RTP_PAYLOAD_NAME_SIZE], const int frequency, const WebRtc_UWord8 channels, const WebRtc_UWord32 rate) { return 0 ; } void OnPacketTimeout(const WebRtc_Word32 id) {} ; void OnReceivedPacket(const WebRtc_Word32 id, const RtpRtcpPacketType packetType) {} ; void OnIncomingSSRCChanged( const WebRtc_Word32 id, const WebRtc_UWord32 SSRC) {} ; void OnIncomingCSRCChanged( const WebRtc_Word32 id, const WebRtc_UWord32 CSRC, const bool added) {} ; private : NET_ADAPTER_TYPE m_net_adapter_type ; }; #endif
#include "stdafx.h" #include "RtpFeedbackImpl.h" #include "xx\INetAdapterManager.h" #include <iostream> #include <inaddr.h> RtpFeedbackImpl::RtpFeedbackImpl (NET_ADAPTER_TYPE net_adapter_type) : m_net_adapter_type (net_adapter_type) { } RtpFeedbackImpl::~RtpFeedbackImpl (void) { } void RtpFeedbackImpl::OnPeriodicDeadOrAlive(const WebRtc_Word32 id, const RTPAliveType alive) { if (alive == kRtpDead) //斷線重連 (重建Socket) { sockaddr_in svraddr ; //重新進行connect } else { //.. } }
//使用
增加斷線重連機制需要對RtpRtcp呼叫以下方法
m_pRtpRtcp->SetPeriodicDeadOrAliveStatus (true, N) ; //開啟斷線檢測,週期N秒
m_pRtpRtcp->RegisterIncomingRTPCallback (new RtpFeedbackImpl(type)) ;
CPTSChatAVChannelBase::Initialize(strAddr, uPort, uRoomID,uUserID); if(m_pRtpRtcp) RtpRtcp::DestroyRtpRtcp(m_pRtpRtcp); m_pRtpRtcp = RtpRtcp::CreateRtpRtcp(0,true); m_pRtpRtcp->InitReceiver(); m_pRtpRtcp->InitSender(); m_pRtpRtcp->RegisterRtcpObservers(0,&m_BwObserver,0); m_pRtpRtcp->RegisterSendTransport(&m_Transport); m_pRtpRtcp->RegisterSendRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset,kRtpExtensionTransmissionTimeOffsetId); m_pRtpRtcp->RegisterSendRtpHeaderExtension(kRtpExtensionEphSidCmd,kRtpExtensionEphSidCmdId); m_pRtpRtcp->RegisterSendRtpHeaderExtension(kRtpExtensionEphRoomidVer,kRtpExtensionEphRoomidVerId); m_pRtpRtcp->RegisterSendRtpHeaderExtension(kRtpExtensionEphCheckCode,kRtpExtensionEphCheckCodeId); m_pRtpRtcp->RegisterSendRtpHeaderExtension(kRtpExtensionEphSrcKey,kRtpExtensionEphSrcKeyId); m_pRtpRtcp->RegisterSendRtpHeaderExtension(kRtpExtensionEphFrameidOffset,kRtpExtensionEphFrameidOffsetId); m_pRtpRtcp->RegisterSendRtpHeaderExtension(kRtpExtensionEphPacketidTotalsize,kRtpExtensionEphPacketidTotalsizeId); m_pRtpRtcp->RegisterReceiveRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset,kRtpExtensionTransmissionTimeOffsetId); m_pRtpRtcp->RegisterReceiveRtpHeaderExtension(kRtpExtensionEphSidCmd,kRtpExtensionEphSidCmdId); m_pRtpRtcp->RegisterReceiveRtpHeaderExtension(kRtpExtensionEphRoomidVer,kRtpExtensionEphRoomidVerId); m_pRtpRtcp->RegisterReceiveRtpHeaderExtension(kRtpExtensionEphCheckCode,kRtpExtensionEphCheckCodeId); m_pRtpRtcp->RegisterReceiveRtpHeaderExtension(kRtpExtensionEphSrcKey,kRtpExtensionEphSrcKeyId); m_pRtpRtcp->RegisterReceiveRtpHeaderExtension(kRtpExtensionEphFrameidOffset,kRtpExtensionEphFrameidOffsetId); m_pRtpRtcp->RegisterReceiveRtpHeaderExtension(kRtpExtensionEphPacketidTotalsize,kRtpExtensionEphPacketidTotalsizeId); m_pRtpRtcp->SetCSRCStatus(false); m_pRtpRtcp->SetSendingStatus(false); m_pRtpRtcp->SetRTCPStatus(kRtcpCompound); m_pRtpRtcp->SetNACKStatus(kNackRtcp); m_pRtpRtcp->SetTransmissionSmoothingStatus(true); m_pRtpRtcp->SetTargetSendBitrate(600000);//for test m_pRtpRtcp->SetStorePacketsStatus(true,CACHE_PACKET_COUNT); m_pRtpRtcp->SetSSRC(uUserID); m_pRtpRtcp->SetStartTimestamp(0); m_pRtpRtcp->SetPeriodicDeadOrAliveStatus (true, OFFLINE_RECONNECT_INTERVAL) ; //開啟斷線檢測,週期(OFFLINE_RECONNECT_INTERVAL)秒 m_pRtpRtcp->RegisterIncomingRTPCallback (new RtpFeedbackImpl(ADAPTER_TYPE_AUDIO)) ;//斷線處理回撥過程