metaRTC7.0 API 编程指南

发布于:2025-06-20 ⋅ 阅读:(18) ⋅ 点赞:(0)

概述

metaRTC7.0从2025年6月16日发布的新版本开始全新的API,metaRTC7.0所有版本已经统一了API,新增libyangwhip7连接sfu/mcu等信令模块。

libyangwhip7

新版本API将信令分离,集成了whip/srs/zlm等sfu/mcu的连接代码实现。开发者可在yangwhip7模块扩展新的sfu/mcu连接代码。

#include <yangrtc/YangWhip.h>

//url http://ip:port/whipurl 
int32_t yang_whip_connectWhipWhepServer(YangPeer* peer,char* url);

//url webrtc://ip:port/app/stream    
//mediaServer:Yang_Server_Srs/Yang_Server_Zlm
int32_t yang_whip_connectSfuServer(YangPeer* peer,char* url,int32_t mediaServer);

纯C Demo

#include <yangrtc/YangWhip.h> 
#include <yangrtc/YangPeerInfo.h> 
#include <yangrtc/YangPeerConnection.h>

int32_t localPort=16000;  
YangAVInfo* avinfo;
YangPeerConnection* conn=(YangPeerConnection*)calloc(sizeof(YangPeerConnection),1);    

//yang_init_peerInfo(&conn->peer.peerInfo);
yang_avinfo_initPeerInfo(&conn->peer.peerInfo,avinfo);
conn->peer.peerInfo.rtc.rtcLocalPort = localPort;
conn->peer.peerInfo.direction = YangRecvonly;
conn->peer.peerInfo.uid = puid;
conn->peer.peerCallback.recvCallback.context=this;
conn->peer.peerCallback.recvCallback.receiveAudio=g_rtcrecv_receiveAudio;
conn->peer.peerCallback.recvCallback.receiveVideo=g_rtcrecv_receiveVideo;
conn->peer.peerCallback.recvCallback.receiveMsg=g_rtcrecv_receiveMsg;

yang_create_peerConnection(conn);
conn->addAudioTrack(&conn->peer,Yang_AED_OPUS);
conn->addVideoTrack(&conn->peer,Yang_VED_H264);
conn->addTransceiver(&conn->peer,YangMediaAudio,YangRecvonly);
conn->addTransceiver(&conn->peer,YangMediaVideo,YangRecvonly);

//sfu   
if(isWhip)
	yang_whip_connectWhipWhepServer(&conn->peer,url);
else
	yang_whip_connectSfuServer(&conn->peer,url,mediaServer);

//p2p
conn->createDataChannel(&conn->peer);
if((err=conn->createOffer(&conn->peer, &localSdp))!=Yang_Ok){
	yang_error("createOffer fail",);
	goto cleanup;
}

if((err=conn->setLocalDescription(&conn->peer, localSdp))!=Yang_Ok){
		yang_error("setLocalDescription fail");
		goto cleanup;
}

......
//get remote peer sdp
if((err=conn->setRemoteDescription(&conn->peer,remoteSdp))!=Yang_Ok){
	yang_error("setRemoteDescription fail!");
	goto cleanup;
}

C++ Demo

#include <yangrtc/YangWhip.h> 
#include <yangrtc/YangPeerInfo.h> 
#include <yangrtc/YangPeerConnection7.h>

int32_t localPort=16000; 
YangAVInfo* avinfo;
YangPeerInfo peerInfo;

//yang_init_peerInfo(&peerInfo);
yang_avinfo_initPeerInfo(&peerInfo,avinfo);
peerInfo.uid=0;
peerInfo.direction=YangSendonly;
peerInfo.rtc.rtcLocalPort = localPort;

//YangCallbackReceive* receive
//YangCallbackIce* ice 
//YangCallbackRtc* rtc
//YangCallbackSslAlert* sslAlert);
YangPeerConnection7* conn=new YangPeerConnection7(&peerInfo,receive,ice, rtc,sslAlert);

conn->addAudioTrack(Yang_AED_OPUS);
conn->addVideoTrack(Yang_VED_H264);
conn->addTransceiver(YangMediaAudio,peerInfo.direction);
conn->addTransceiver(YangMediaVideo,peerInfo.direction);

//sfu
if(isWhip)
	yang_whip_connectWhipWhepServer(&conn->m_peer,url);
else
	yang_whip_connectSfuServer(&conn->m_peer,url,mediaServer);

//p2p
conn->createDataChannel();
if((err=conn->createOffer(&localSdp))!=Yang_Ok){
	yang_error("createOffer fail",);
	goto cleanup;
}

if((err=conn->setLocalDescription(localSdp))!=Yang_Ok){
		yang_error("setLocalDescription fail");
		goto cleanup;
}

......
//get remote peer sdp
if((err=conn->setRemoteDescription(remoteSdp))!=Yang_Ok){
	yang_error("setRemoteDescription fail!");
	goto cleanup;
}
return 0;
}

推流

//YangFrame payload 数据 nb:数据长度
//frametype:YANG_Frametype_I(I帧) YANG_Frametype_P(P帧或B帧)
//I帧 四字节sps长度+sps+四字节pps长度+pps+(00,00,00,01)+I帧 如:00,00,00,0e,67,42,c0,1f,8c,8d,40,50,1e,d0,0f,08,84,6a,00,00,00,04,68,ce,3c,80,00,00,00,01,65,b8,00,04,00,00,13,88,c5
//P帧或B帧 如:00,00,00,01,61,e0,00,40,00,be,41,38,22,93,df
//去掉start code 00,00,00,01,取61,e0,00,40,00,be,41,38,22,93,df

//pure C
conn->on_video(&rtc->peer, videoFrame)://推视频
conn->on_audio(&rtc->peer, audioFrame);//推音频
//C++
conn->on_video(videoFrame)://推视频
conn->on_audio(audioFrame);//推音频

网站公告

今日签到

点亮在社区的每一天
去签到