1.PJSIP源码探究 pjmedia-videodev模块
2.sipåè®®å¦ä½ç¨Cè¯è¨å®ç°
3.å¦ä½å¨ android 设å¤ä¸ä½¿ç¨ pjsip G.729 ç¼è§£ç çåè½
PJSIP源码探究 pjmedia-videodev模块
PJSIP源码探索:pjmedia-videodev模块详解
在上一章节中,码解我们已经了解了PJSIP在Android平台的码解编译和使用基础。接下来,码解我们将深入探究pjmedia-videodev模块,码解这一核心组件负责实现PJSIP的码解视频捕获功能。掌握这部分内容,码解-47源码你将能够为PJSIP添加自定义视频输入设备。码解
源码解析:视频捕获入口
在pjsua2的码解Endpoint.java中,主要通过Endpoint对象的码解libCreate、libInit、码解libStart和libDestroy方法来调用底层的码解c++代码。其中,码解pjsua_init函数在pjsua_core.c的码解河源码头游玩价格行中起关键作用,通过media_cfg参数,码解我们可以看出它与媒体相关。码解在pjsua_media_subsys_init中,初始化了音频和视频子系统,其中pjmedia_vid_subsys_init在pjsua_vid.c的行,负责初始化视频捕获设备。期货源码解读系统
在pjmedia-videodev模块中,寻找视频捕获的源头,pjmedia_vid_dev_subsys_init在pjmedia-videodev/videodev.c中负责视频设备的注册。在Android编译环境下,pjmedia_and_factory被注册,负责打开摄像头并获取画面。自用量化指标源码
源码分析:pjmedia-vid-dev-factory
Android摄像头捕获器工厂的实现位于pjmedia-videodev/android_dev.c,其中工厂实例的创建、设备信息的获取与管理,以及与Java类的交互都十分重要。工厂中的and_factory和factory_op结构体定义了工厂操作的接口,包括设备初始化、出售魔兽怀旧服源码信息查询和流创建等。
视频设备流的操作在stream_op中定义,包括获取参数、设置视频功能、启动和停止相机,以及释放资源等。这些操作允许我们动态调整视频流,实现自定义画面捕获。
总结:pjmedia-videodev模块功能概览
pjmedia-videodev的核心是pjmedia_vid_dev_factory,它通过实现一系列操作函数,如创建VideoStream和管理设备流,来捕获和处理视频数据。通过自定义VideoStream和其操作,开发者能够添加时间水印、滤镜效果,甚至捕获屏幕内容,为视频通话增添更多可能性。
至此,关于pjmedia-videodev模块的源码探究已告一段落,希望你对视频捕获的实现有了深入理解,期待你在PJSIP应用中发挥创意。
sipåè®®å¦ä½ç¨Cè¯è¨å®ç°
1ãå¼æºçsipæå¡å¨ç«¯ï¼æ¯è¾å¥½ç¨çæ¯Asteriskï¼æ åCç¨åºå®ç°ï¼ä»£ç æ¸ æ°ã
2ãsipçclientç¸å¯¹æ¯è¾å¤ï¼ä¸»è¦æexosip,pjsipåopalãexosipç®åæç¨ï¼å¨PCä¸ç¨æ¯è¾æ¹ä¾¿ãä½æ¯æ¶åçç¸å ³èµæºå¤ªå¤ï¼ç¨äºosip,srtp,ms2çä¼å¤çå¼æºåºï¼ms2ä¸é¢è¿ç¨å°äºffmpegï¼å«çä¸è¯´ï¼å ç¼è¯å°±æ¯å©æ¢¦ãopalåè½æ强ï¼è½ç¶ä¹ç¨å°äºffmpeg ï¼ä½æ¯èªå·±å°è£ çé常好ï¼éç¨æ件æ¹å¼ï¼è°ç¨çµæ´»ãopaléç¨classæ¹å¼æä¾å°è£ ï¼æ¥å£é常å好ãæè§å¯ä¸ä¸ç½çå°æ¹ï¼å°±æ¯ä½å±ä½¿ç¨äºptlibï¼è½ç¶å¤å¹³å°ä¸é½å¾å¥½ç¨ï¼ä½æ¾å¨åµå ¥å¼ä¸æè§ç¨åºå¤§äºä¸äºãpjsip精巧ï¼æ¹ä¾¿ç§»æ¤ï¼åµå ¥å¼ä¸åºè¯¥æ¯é¦éãä¸è¿è§é¢é¢æ¯ææ¹é¢æ©å±èµ·æ¥æ¯opal麻ç¦ã个人æè§ï¼å¯¹äºwindowså¼åè æ¥è¯´ï¼pjsipæ大ç好å¤å°±æ¯ä»£ç è°è¯æ¹ä¾¿ãæ´ä¸ªå·¥ç¨ä¸æ¬¡ç¼è¯éè¿ï¼å¦å¤ä¸¤ä¸ªåºè¿è¦æ¾å¾å¤ç¸å ³çèµæº
ã
3ãå ¶ä»çä¸äºåè®®æ ä¹è°è¯è¿ï¼æ¯å¦reSipphoneï¼å¥½è±¡æ¯è¿ä¸ªååï¼è¿æYateï¼ä¸è¿ä»å¿«éå¼åè§åº¦çï¼é½ä¸å¤ªåéãç°å¨æsipå¼åçï¼ä¸å¼å§å°±æ¯å æ¾å¥½åè®®æ ãlinphone,ekigaä»ä¹çï¼ä½åºå¤§ã对äºåå¼å§åçï¼æ好æ¯ä¸ä¸ªç²¾ç®çdemoãåæ¥æ¾å°pjsipä¸é¢çå 个ä¾åï¼æ ¢æ ¢å°äºè§£äºsipçå·¥ä½æµç¨ï¼å½ç¶å°ä¸äºæå å·¥å ·åtcpdumpã
ä¸è¿ï¼å ¶å®ï¼sip没ææ³è±¡ä¸çé£ä¹éº»ç¦ãç°å¨å头çï¼åå¼å§å项ç®ï¼ä½¿ç¨åè®®æ ç»å¯¹ä¸æ¯å¥½æ³æ³ãå¦ææ¢ä¸ªæ¹åï¼å çæSIPåºæ¬åè®®ï¼ç¶åèªå·±æ¹é ä¸ä¸ªï¼æå®å ¨åä¸ä¸ªï¼å¯è½æææ´å¥½ã
å¦ä½å¨ android 设å¤ä¸ä½¿ç¨ pjsip G. ç¼è§£ç çåè½
第ä¸æ¥æ¯çæ pjsip 为 Android ï¼æ¥éª¤ä¸º Ubuntu Linuxï¼ çæºä»£ç ï¼
设置 ANDROID_NDK_ROOT ç¯å¢åéè®¾ç½®ä¸ºæ¨ NDK æ ¹æ件夹ã
è½¬å° pjsip 2.x æ件夹并å建 pjlib/include/pj/config_site.h å æ¬ config_site_sample.h ( #include <pj/config_site_sample.h> )
è¿è¡./configure-android
è¿è¡make clean && make depend && make
ä¹åè¿äºæ¥éª¤ï¼ä½ å°æå 个éæåºä¸çå 个æ件夹ãæ建议å°å®ä»¬åç»ç¸åçæ件夹 ï¼æ好å¨æ¨ç项ç®ä¸ï¼ ä¸çï¼
mkdir <your_project_path>/pjsip_libs
find . -name *.a | xargs -I % cp % <your_project_path>/pjsip_libs/
ä¸æ¦ä½ çææåºï¼æ¨éè¦å°è¿äºåºæ·»å å°æ¨çé¡¹ç® Android.mk æ件ï¼è¿æ¯ç±å æ¬ä¸ä¸ªæ°ç模åèæ¯ä¸ªå¾ä¹¦é¦ãæ¤æ¨¡åé¨ååºè¯¥æ¯ä¸æ ·çä¸è¥¿ï¼
include $(CLEAR_VARS)
LOCAL_MODULE := pjsua-arm-unknown-linux-androideabi
LOCAL_SRC_FILES := $(MY_PJLIB_PATH)/libpjsua-arm-unknown-linux-androideabi.a
include $(PREBUILT_STATIC_LIBRARY)
ï¼ä½ å ¶å®æ¯ä¸èä¸æ建æ¨ç JNI 项ç®çæºä»£ç ï¼ææ模åé½æ·»å å°æ¨çéæåºçå¼ç¨ï¼
LOCAL_STATIC_LIBRARIES := pjsua-arm-unknown-linux-androideabi ...
è¿å°å æ¬ pjsip çå¼ç¨å å ¥æ¨ç JNI åºãç°å¨ï¼æ¨éè¦é ç½® pjsip UA å®ä¾ã
ä½ æä¸ä¸ªå ³äº init åå¼å§ç解é pjsip ç UA (pjsua) å¨ pjsip/include/pjsua-lib/pjsua.h ä½è¦éµå¾ªç主è¦æ¥éª¤æ¯ï¼
å建ä¸ä¸ªå ·æ UA å®ä¾pjsua_create
å建ä¸ä¸ªå·¥ä½çº¿ç¨ä¸pj_thread_create
UA å®ä¾ç设置çé»è®¤é ç½®ï¼
pjsua_config cfg æ¡© ï¼pjsua_logging_config log_cfg ï¼pjsua_media_config media_cfg ï¼
pj_cli_cfg_default(&app_config.cli_cfg.cfg) ï¼pjsua_logging_config_default(&log_cfg) ï¼pjsua_media_config_default(&media_cfg) ï¼
åå§åå æ ä¸pjsua_init
å¯å¨ä¸å æ pjsua_start
ä»è¿éï¼ä½ æå 足çé ç½®é项 ï¼æ¥å¿ã åªä½ã 交éå·¥å ·çï¼
æ¨å¯ä»¥æ¾å°åºæ¬ PJSIP æç¨å¨è¿éï¼åéé¢ pjsip çæºçæ ¹è·¯å¾ï¼ä½ æä¸ä¸ªåºæ¬ ï¼ä½ä¸å¤å®æ´ï¼åºæ¬ç SIP 使ç¨æ åµï¼ å¨ï¼pjsip-apps/src/samples/simple_pjsua.c
ç¼è¾ï¼å¨çææ¶å¨ pjsip åºç¨ç¨åºç android 项ç®ï¼ä½ å¯ä»¥é¢ä¸´ä¸ä¸ªé®é¢ï¼å 为 pjsua app ä¸çæé»è®¤æ åµä¸ï¼å¯¹ä¸è¬çæ ï¼æ´å ·ä½å°è¯´ï¼pjsuaï¼ ç®æ ä¸å æ¬ææä¸ï¼ å¨ pjsip-åºç¨ç¨åº/çæ/çææ件çç®æ )ãè¥è¦ä¿®å¤è¿åªæ¯è½¬å° pjsip-åºç¨ç¨åº/å建åè¿è¡ï¼
使 pjsua
è¿å°å建å¨æ£ç¡®ç对象æ件: pjsip-apps/build/output/pjsua-arm-unknown-linux-androideabi/ (éè¦æ建 android æ ·æ¬æ¶)ã
ä¸æ¦ä½ ææç¸åºç对象æ件ï¼æ¨å¯ä»¥å¨ pjsip-åºç¨ç¨åº/src/pjsua/android ç³»ç»å次è¿è¡ ndk çæ