看头文件和示例代码简直太慢了,看了半天可能都捋不清头绪,于是,花了一天功夫画了一张设备端调用的流程图,轻松理解整套调用流程:

WebRTC调用过程

这个对比EasyRTC.h头文件看,要轻松多了~

#if defined(_MSC_VER)
#pragma pack()
#endif

typedef void *PRIVSIGNALINGCLIENT_HANDLE;
typedef VOID (*RtcOnFrame)(UINT64, PFrame);
typedef VOID (*RtcOnBandwidthEstimation)(UINT64, DOUBLE);
typedef VOID (*RtcOnSenderBandwidthEstimation)(UINT64, UINT32, UINT32, UINT32, UINT32, UINT64);
typedef VOID (*RtcOnPictureLoss)(UINT64);
typedef VOID (*RtcOnConnectionStateChange)(UINT64, RTC_PEER_CONNECTION_STATE);
typedef VOID (*RtcOnMessage)(UINT64, PRtcDataChannel, BOOL, PBYTE, UINT32);
typedef VOID (*RtcOnOpen)(UINT64, PRtcDataChannel);
typedef VOID (*RtcOnDataChannel)(UINT64, PRtcDataChannel);

typedef VOID (*RtcOnIceCandidate)(UINT64, PCHAR);

typedef int (*SIGNALINGCLIENT_MESSAGERECEIVED_CALLBACK)(unsigned char *message, int length, uint64_t customData);
typedef int (*SIGNALINGCLIENT_STATECHANGED_CALLBACK)(SIGNALING_CLIENT_STATE2 state, uint64_t customData);

typedef int (*PRIVSIGNALINGSERVER_MESSAGERECEIVED_CALLBACK)(unsigned char *message, int length, uint64_t customData);
typedef int (*PRIVSIGNALINGCLIENT_MESSAGERECEIVED_CALLBACK)(unsigned char *message, int length, uint64_t customData);

RTC_C_EXPORT STATUS EasyRTC_initWebRtc(VOID);
RTC_C_EXPORT STATUS EasyRTC_deinitWebRtc(VOID);

RTC_C_EXPORT STATUS EasyRTC_createRtcCertificate(PRtcCertificate *ppRtcCertificate);
RTC_C_EXPORT STATUS EasyRTC_freeRtcCertificate(PRtcCertificate pRtcCertificate);

RTC_C_EXPORT int EasyRTC_startSignalingClient(SIGNALINGCLIENT_MESSAGERECEIVED_CALLBACK SignalingClientMessageReceivedCallback, SIGNALINGCLIENT_STATECHANGED_CALLBACK SignalingClientStateChangedCallback, uint64_t customData);
RTC_C_EXPORT int EasyRTC_loginUser(char *myid, char *mysn, char *mykey, char *extradata0, int extradatalen0, char *extradata1, int extradatalen1);
RTC_C_EXPORT int EasyRTC_connectUser(char *hisid, char *hiskey, char *extradata0, int extradatalen0, char *extradata1, int extradatalen1);
RTC_C_EXPORT int EasyRTC_stopSignalingClient();

RTC_C_EXPORT int EasyRTC_startPrivSignalingServer(int myport, char *myid, char *mykey, char *extradata0, int extradatalen0, PRIVSIGNALINGSERVER_MESSAGERECEIVED_CALLBACK PrivSignalingServerMessageReceivedCallback, uint64_t customData);
RTC_C_EXPORT int EasyRTC_stopPrivSignalingServer();

RTC_C_EXPORT PRIVSIGNALINGCLIENT_HANDLE EasyRTC_connectPrivSignalingServer(char *hisip, int hisport, PRIVSIGNALINGCLIENT_MESSAGERECEIVED_CALLBACK SignalingClientMessageReceivedCallback, uint64_t customData);
RTC_C_EXPORT int EasyRTC_isConnectedPrivSignalingServer(PRIVSIGNALINGCLIENT_HANDLE privClientHandle);
RTC_C_EXPORT int EasyRTC_connectPrivUser(PRIVSIGNALINGCLIENT_HANDLE privClientHandle, char *hisid, char *hiskey, char *extradata0, int extradatalen0);
RTC_C_EXPORT int EasyRTC_disconnectPrivSignalingServer(PRIVSIGNALINGCLIENT_HANDLE privClientHandle);

RTC_C_EXPORT STATUS EasyRTC_createPeerConnection(PRtcConfiguration pRtcConfiguration, PRtcPeerConnection *ppRtcPeerConnection, uint32_t *uuids, int32_t sockfd);
RTC_C_EXPORT STATUS EasyRTC_peerConnectionOnSenderBandwidthEstimation(PRtcPeerConnection pRtcPeerConnection, UINT64 customData, RtcOnSenderBandwidthEstimation rtcOnSenderBandwidthEstimation);
RTC_C_EXPORT STATUS EasyRTC_peerConnectionOnDataChannel(PRtcPeerConnection pRtcPeerConnection, UINT64 customData, RtcOnDataChannel rtcOnDataChannel);
RTC_C_EXPORT STATUS EasyRTC_peerConnectionOnConnectionStateChange(PRtcPeerConnection pRtcPeerConnection, UINT64 customData, RtcOnConnectionStateChange rtcOnConnectionStateChange);
RTC_C_EXPORT STATUS EasyRTC_addTransceiver(PRtcPeerConnection pRtcPeerConnection, PRtcMediaStreamTrack pRtcMediaStreamTrack, PRtcRtpTransceiverInit pRtcRtpTransceiverInit, PRtcRtpTransceiver *ppRtcRtpTransceiver);
RTC_C_EXPORT STATUS EasyRTC_transceiverOnFrame(PRtcRtpTransceiver pRtcRtpTransceiver, UINT64 customData, RtcOnFrame rtcOnFrame);
RTC_C_EXPORT STATUS EasyRTC_transceiverOnBandwidthEstimation(PRtcRtpTransceiver pRtcRtpTransceiver, UINT64 customData, RtcOnBandwidthEstimation rtcOnBandwidthEstimation);
RTC_C_EXPORT STATUS EasyRTC_transceiverOnPictureLoss(PRtcRtpTransceiver pRtcRtpTransceiver, UINT64 customData, RtcOnPictureLoss rtcOnPictureLoss);
RTC_C_EXPORT STATUS EasyRTC_freeTransceiver(PRtcRtpTransceiver *pRtcRtpTransceiver);
RTC_C_EXPORT STATUS EasyRTC_createDataChannel(PRtcPeerConnection pRtcPeerConnection, PCHAR pDataChannelName, PRtcDataChannelInit pRtcDataChannelInit, PRtcDataChannel *ppRtcDataChannel);
RTC_C_EXPORT STATUS EasyRTC_dataChannelOnMessage(PRtcDataChannel pRtcDataChannel, UINT64 customData, RtcOnMessage rtcOnMessage);
RTC_C_EXPORT STATUS EasyRTC_dataChannelOnOpen(PRtcDataChannel pRtcDataChannel, UINT64 customData, RtcOnOpen rtcOnOpen);
RTC_C_EXPORT STATUS EasyRTC_dataChannelSend(PRtcDataChannel pRtcDataChannel, BOOL isBinary, PBYTE pMessage, UINT32 pMessageLen);
RTC_C_EXPORT STATUS EasyRTC_createOfferAndSubmit(PRtcPeerConnection pRtcPeerConnection);
RTC_C_EXPORT STATUS EasyRTC_createAnswerAndSubmit(PRtcPeerConnection pRtcPeerConnection, PBYTE offersdp);
RTC_C_EXPORT STATUS EasyRTC_writeFrame(PRtcRtpTransceiver pRtcRtpTransceiver, PFrame pFrame);

RTC_C_EXPORT STATUS EasyRTC_getIceCandidatePairStats(PRtcPeerConnection pRtcPeerConnection, PRtcIceCandidatePairStats pRtcIceCandidatePairStats);
RTC_C_EXPORT STATUS EasyRTC_getIceCandidateStats(PRtcPeerConnection pRtcPeerConnection, BOOL isRemote, PRtcIceCandidateStats pRtcIceCandidateStats);
RTC_C_EXPORT STATUS EasyRTC_getIceServerStats(PRtcPeerConnection pRtcPeerConnection, PRtcIceServerStats pRtcIceServerStats);
RTC_C_EXPORT STATUS EasyRTC_getTransportStats(PRtcPeerConnection pRtcPeerConnection, PRtcTransportStats pRtcTransportStats);
RTC_C_EXPORT STATUS EasyRTC_getRtpRemoteInboundStats(PRtcPeerConnection pRtcPeerConnection, PRtcRtpTransceiver pRtcRtpTransceiver, PRtcRemoteInboundRtpStreamStats pRtcRemoteInboundRtpStreamStats);
RTC_C_EXPORT STATUS EasyRTC_getRtpOutboundStats(PRtcPeerConnection pRtcPeerConnection, PRtcRtpTransceiver pRtcRtpTransceiver, PRtcOutboundRtpStreamStats pRtcOutboundRtpStreamStats);
RTC_C_EXPORT STATUS EasyRTC_getRtpInboundStats(PRtcPeerConnection pRtcPeerConnection, PRtcRtpTransceiver pRtcRtpTransceiver, PRtcInboundRtpStreamStats pRtcInboundRtpStreamStats);
RTC_C_EXPORT STATUS EasyRTC_getDataChannelStats(PRtcPeerConnection pRtcPeerConnection, PRtcDataChannelStats pRtcDataChannelStats);
RTC_C_EXPORT STATUS EasyRTC_rtcPeerConnectionGetMetrics(PRtcPeerConnection pRtcPeerConnection, PRtcRtpTransceiver pRtcRtpTransceiver, PRtcStats pRtcStats);

RTC_C_EXPORT STATUS EasyRTC_closePeerConnection(PRtcPeerConnection pRtcPeerConnection);
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐