概述
metaRTC5.0版本 API進行了重構,本篇文章將介紹webrtc傳輸調用流程和例子。
metaRTC5.0版本提供了C++和純C兩種接口。
ICE設置
iceCandidateType參數可以在配置文件yang_config.ini中配置,也可以在程序中賦值。
iceCandidateType=0 //0:host 1:stun 2:turn
[rtc]
enableDatachannel=0
iceServerIP=10.42.0.1
iceUsingLocalIp=0
iceLocalIP=192.168.1.102
iceCandidateType=0 //0:hots 1:stun 2:turn
iceStunPort=3478
iceServerIP=10.42.0.171
iceUserName=metartc
icePassword=metartc
int32_t err = Yang_Ok;
char* localSdp=NULL;
char* remoteSdp=NULL;
yangbool enableWhipWhep = yangtrue;
YangRtcDirection direction = YangSendonly;//YangSendrecv,YangSendonly,YangRecvonly
YangPeerConnection *peer = (YangPeerConnection*)yang_calloc(sizeof(YangPeerConnection),1);
yang_create_peerConnection(peer);
peer->addAudioTrack(&peer->peer,Yang_AED_OPUS);
peer->addVideoTrack(&peer->peer,Yang_VED_H264);
peer->addTransceiver(&peer->peer,direction);
//sfu server
if(enableWhipWhep)err = peer->connectWhipWhepServer(&peer->peer,url);
elseerr = peer->connectSfuServer(&peer->peer);
//p2p
peer->createDataChannel(&peer->peer);//add datachannel
if((err=peer->createOffer(&peer->peer, &localSdp))!=Yang_Ok){yang_error("createOffer fail!");goto cleanup;
}
if((err=peer->setLocalDescription(&peer->peer, localSdp))!=Yang_Ok){yang_error("setLocalDescription fail!");goto cleanup;
}
......
//get remote peer sdp
if((err=peer->setRemoteDescription(&peer->peer,remoteSdp))!=Yang_Ok){yang_error("setRemoteDescription fail!");goto cleanup;
}
//deviser
//根據官網的sample寫的demo如下,但它是建立在我們本身就有音視頻的編碼和采集模塊,只作傳輸時使用。
YangContext* m_context=new YangContext();m_context->init();int32_t err = Yang_Ok;yangbool enableWhipWhep = yangtrue;
YangRtcDirection direction = YangSendrecv;//YangSendrecv,YangSendonly,YangRecvonly
YangPeerConnection * peer = NULL;
peer = (YangPeerConnection*)yang_calloc(sizeof(YangPeerConnection),1);
//將參數傳入 memcpy(&peer->peer.streamconfig.rtcCallback,&m_context->rtcCallback,sizeof(YangRtcCallback)); peer->peer.avinfo=&m_context->avinfo; strcpy(peer->peer.avinfo->rtc.iceLocalIP, "192.168.100.240");strcpy(peer->peer.avinfo->rtc.rtcServerIP, "192.168.100.240");yang_create_peerConnection(peer);peer->init(&peer->peer);peer->addAudioTrack(&peer->peer, Yang_AED_OPUS);peer->addVideoTrack(&peer->peer, Yang_VED_H264);peer->addTransceiver(&peer->peer, YangRtcDirection::YangSendonly);// err = peer->connectSfuServer(&peer->peer);char *localSdp = (char *)calloc(12 * 1000, 1);peer->createOffer(&peer->peer, &localSdp);cout << "localSdp : " << localSdp << endl;peer->connectWhipWhepServer(&peer->peer,"http://192.168.100.240:1985/rtc/v1/whip/?app=live&stream=livestream");while (1){sleep(9);}return 0;
//以上是偽代碼
//deviser
libmetartccore2工程為C版webrtc實現
libmetartc2為C++版采集編解碼等實現
純C接口(pure C API)YangPeerConnection
頭文件:include/yangrtc/YangPeerConnection.h
C++接口(C++ API)YangPeerConnection2
頭文件:include/yangrtc/YangPeerConnection2.h
MetaRTC5.0 API
https://github.com/metartc/metaRTC/wiki/metaRTC5.0-API
Sample
https://github.com/metartc/metaRTC/wiki/metaRTC5.0-API-Sample
MetaRTC7 API
https://github.com/metartc/metaRTC/wiki/metaRTC7–API
7的Sample在首頁
https://github.com/metartc/metaRTC
MetaRTC 連接信息回調函數
https://blog.csdn.net/m0_56595685/article/details/130165785
瑞芯微IPC
https://blog.csdn.net/m0_56595685/article/details/130910602?spm=1001.2014.3001.5502
講解meta rtc push stream開源項目之一
https://zhuanlan.zhihu.com/p/512222819
gb2312
瑞芯微3588 V:接口采集 A:alsa
博通 V:v4l2 A:alsa
采集是v4l2,編碼調用接口
支持:GB2811
1.瀏覽metartc官網WIKI,確認是否支持32位
2.配置metartc7/5環境,編譯metapush7和metaplay7,并測試推拉流
3.編譯demo調用metartc7 api,排查錯誤
4.看metartcplay7的代碼結構,數據傳遞等
下方是筆者微信,備注webrtc愛好者