断线重连处理

继承 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)) ;//断线处理回调过程
	



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

致一

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

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

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

打赏作者

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

抵扣说明:

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

余额充值