metartc5_jz源码阅读-yang_ipc_rtcrecv_addPeer

//上一篇文章中读到p2p->receive方法最终会调到这个方法中,设置PeerConnection的sdp,并生成answer。
int32_t yang_ipc_rtcrecv_addPeer(YangIpcRtcSession* session,char* sdp,char* answer,char* remoteIp,int32_t localPort,int* phasplay){
	int32_t ret = 0;
	//创建PeerConnection结构体
	YangPeerConnection* sh=(YangPeerConnection*)calloc(sizeof(YangPeerConnection),1);

	//重置流配置
	memset(&sh->peer.streamconfig,0,sizeof(sh->peer.streamconfig));
	//设置userid
	sh->peer.streamconfig.uid=session->uidSeq++;
	//设置本地端口号
	sh->peer.streamconfig.localPort=localPort;
	//设置为Server
	sh->peer.streamconfig.isServer=1;
	//设置流类型为push和play都支持。
	sh->peer.streamconfig.streamOptType=Yang_Stream_Both;
	//设置客户端ip地址。
	strcpy(sh->peer.streamconfig.remoteIp,remoteIp);

	//设置ssl上下文和回调方法
	sh->peer.streamconfig.sslCallback.context=session;
	sh->peer.streamconfig.sslCallback.sslAlert=g_ipc_rtcrecv_sslAlert;

	//设置接收流回调的上下文和接收音频、视频、消息的回调。
	sh->peer.streamconfig.recvCallback.context=session;
	sh->peer.streamconfig.recvCallback.receiveAudio=g_ipc_rtcrecv_receiveAudio;
	sh->peer.streamconfig.recvCallback.receiveVideo=g_ipc_rtcrecv_receiveVideo;
	sh->peer.streamconfig.recvCallback.receiveMsg=g_ipc_rtcrecv_receiveMsg;

	//将session的rtcCallback拷贝到PeerConnection的流配置中。
	memcpy(&sh->peer.streamconfig.rtcCallback,&session->rtcCallback,sizeof(YangRtcCallback));
	//将avinfo从session拷贝到PeerConnection中。
	sh->peer.avinfo=session->avinfo;

	//创建PeerConnection
	yang_create_peerConnection(sh);

	//初始化peer。
	sh->init(&sh->peer);

	//如果peer已经连接成功,直接返回OK
	if (sh->isConnected(&sh->peer))		return Yang_Ok;
	
	//设置远端sdp
	ret = sh->setRemoteDescription(&sh->peer,sdp);

	//如果本端为sdp发起方,此时收到对端sdp后则sdp交互结束,返回ret
	if (ret)		return ret;

	//如果本端为sdp接收方,则需要获取answer后传回对端,此方法获取本地answer sdp
	ret = sh->createHttpAnswer(&sh->peer,answer);

	//将peerConnection插入到pushs的数组向量中。
	pthread_mutex_lock(&session->mutex);
	session->pushs.insert(&session->pushs.vec,sh);
	pthread_mutex_unlock(&session->mutex);

	//重置videoBuffer的index
	if(session->pushs.vec.vsize==1){
		yang_reindex2(session->in_videoBuffer);
	}
	
	//如果流类型为Both的话,设置phasplay为1
	*phasplay=sh->peer.streamconfig.streamOptType==Yang_Stream_Both?1:0;

	return Yang_Ok;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王方帅

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

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

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

打赏作者

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

抵扣说明:

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

余额充值