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;
}

相关推荐

  1. metartc5_jz阅读-yang_ipc_rtcrecv_addPeer

    2024-01-01 04:40:02       38 阅读
  2. metartc5_jz阅读-udp->receive

    2024-01-01 04:40:02       35 阅读
  3. metartc5_jz阅读-yang_push_h264_package_stap_a

    2024-01-01 04:40:02       53 阅读
  4. metartc5_jz阅读-yang_rtcpush_on_rtcp_ps_feedback

    2024-01-01 04:40:02       41 阅读
  5. FutureTask阅读

    2024-01-01 04:40:02       38 阅读
  6. 阅读】evmⅡ

    2024-01-01 04:40:02       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-01 04:40:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-01 04:40:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-01 04:40:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-01 04:40:02       18 阅读

热门阅读

  1. 预训练模型下载和使用

    2024-01-01 04:40:02       40 阅读
  2. 若依报500异常,只有前端没有后端

    2024-01-01 04:40:02       35 阅读
  3. Object-c初步学习 三

    2024-01-01 04:40:02       33 阅读
  4. Prometheus监控Linux

    2024-01-01 04:40:02       39 阅读
  5. vue3 key Attribute 的变化

    2024-01-01 04:40:02       40 阅读
  6. C++导论

    2024-01-01 04:40:02       31 阅读
  7. Django REST framework -10-自定义认证类

    2024-01-01 04:40:02       34 阅读
  8. 【WPF.NET开发】将路由事件标记为已处理和类处理

    2024-01-01 04:40:02       34 阅读
  9. 9、python-闭包

    2024-01-01 04:40:02       42 阅读
  10. 【PostgreSQL如何查看page、index的详细信息】

    2024-01-01 04:40:02       41 阅读
  11. 深入理解SqlSugar ORM框架的使用与实战

    2024-01-01 04:40:02       31 阅读
  12. 【Delphi 基础知识 8】常用的运算符

    2024-01-01 04:40:02       39 阅读
  13. 长度最小的子数组

    2024-01-01 04:40:02       37 阅读
  14. 数据库查询优化

    2024-01-01 04:40:02       39 阅读
  15. PostgreSQL | 概念 | 什么是OLTP&OLAP?

    2024-01-01 04:40:02       39 阅读
  16. 组合设计模式

    2024-01-01 04:40:02       33 阅读