WebRTC-導(dǎo)出純C函數(shù)到so動態(tài)庫

引言

基于WebRTC進行二次開發(fā)音羞,難免會需要對源碼進行修改、增加文件万哪,然后生成動態(tài)庫供上層調(diào)用。但由于WebRTC是用ninja編譯的抡秆,還是有些配置需要修改的奕巍,否則我們只能干瞪眼看著SDK調(diào)用放調(diào)用不到自己寫的類和方法。

下面我就總結(jié)下我增加純C函數(shù)供JNI層調(diào)用的過程儒士。(新建的文件的止、目錄根據(jù)自己需求來哈,流程是一致的)

Demo詳細(xì)步驟

新增代碼文件

1着撩、src/api/crypto/目錄新增頭文件packet_observer.h诅福,導(dǎo)出接口中的函數(shù)一定要為純虛函數(shù)匾委。

#ifndef PACKET_OBSERVER_H
#define PACKET_OBSERVER_H
#include <jni.h>

class PacketObserver {
  struct Packet {
    const unsigned char *buffer;
    size_t size;
  };
  PacketObserver();
  virtual ~PacketObserver();
  virtual void onSendPacket(Packet &packet) = 0;
  virtual void onReceivePacket(Packet &packet) = 0;
}
extern "C" PacketObserver *packet_observer;
extern "C" void JNIEXPORT registerPacketObserver(PacketObserver *observer);

#endif

2、新增源文件packet_observer_register.cc氓润,對導(dǎo)出聲明變量一定要再定義變量赂乐。

#include <packet_observer.h>

PacketObserver *packet_observer;
extern "C" void JNIEXPORT registerPacketObserver(PacketObserver *observer) {
  packet_observer = observer;
}
修改gn配置文件

1、找到src/api/crypto/BUILD.gn咖气,增加新增文件編譯依賴挨措,在最下面增加以下內(nèi)容:

//以上內(nèi)容省略...
group("crypto") {
  deps = [
    ":frame_decryptor_interface",
    ":frame_encryptor_interface",
    ":options",
    ":packet_observer",  //把下面新增的編譯文件源加入crypto組
  ]
}
rtc_source_set("packet_observer") {
  visibility = [ "*" ]
  sources = [
    "packet_observer.h",
    "packet_observer_register.cc",
  ]
  deps = []
}

2、找到src/api/BUILD.gn采章,增加上一步在子目錄src/api/crypto/BUILD.gn中增加的編譯依賴源运嗜。

rtc_library("libjingle_peerconnection_api") {
  deps = [
    //省略若干內(nèi)容...
    "crypto:packet_observer",
  ]
}
修改JNI純C函數(shù)導(dǎo)出配置

1、進入src/build/android/android_only_jni_exports.lst文件悯舟,增加需要導(dǎo)出的C函數(shù)担租。

{
  global:
    JNI_OnLoad;
    Java_*;
    registerPacketObserver;  //此函數(shù)為需要導(dǎo)出的函數(shù)
  local:
    *;
};

經(jīng)驗總結(jié)

WebRTC使用ninja編譯的,而整個項目是從src/BUILD.gn開始執(zhí)行抵怎,所有依賴都是在各個子目錄里配置的BUILD.gn奋救,然后父母錄會去遍歷子目錄的BUILD.gn,這樣整個項目的編譯配置就都由各自目錄里來管理反惕。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尝艘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子姿染,更是在濱河造成了極大的恐慌背亥,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悬赏,死亡現(xiàn)場離奇詭異狡汉,居然都是意外死亡,警方通過查閱死者的電腦和手機闽颇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門盾戴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人兵多,你說我怎么就攤上這事尖啡。” “怎么了剩膘?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵衅斩,是天一觀的道長。 經(jīng)常有香客問我怠褐,道長矛渴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮具温,結(jié)果婚禮上蚕涤,老公的妹妹穿的比我還像新娘。我一直安慰自己铣猩,他們只是感情好揖铜,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著达皿,像睡著了一般天吓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上峦椰,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天龄寞,我揣著相機與錄音,去河邊找鬼汤功。 笑死物邑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的滔金。 我是一名探鬼主播色解,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼餐茵!你這毒婦竟也來了科阎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤忿族,失蹤者是張志新(化名)和其女友劉穎锣笨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體道批,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡错英,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了屹徘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡衅金,死狀恐怖噪伊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情氮唯,我是刑警寧澤鉴吹,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站惩琉,受9級特大地震影響豆励,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一良蒸、第九天 我趴在偏房一處隱蔽的房頂上張望技扼。 院中可真熱鬧,春花似錦嫩痰、人聲如沸剿吻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丽旅。三九已至,卻和暖如春纺棺,著一層夾襖步出監(jiān)牢的瞬間榄笙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工祷蝌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茅撞,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓杆逗,卻偏偏與公主長得像乡翅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子罪郊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351