导航:首页 > 编程语言 > pjsua

pjsua

发布时间:2023-05-29 11:06:21

Ⅰ FATAL EXCEPTION: Thread-7890 java.lang.ExceptionInInitializerError

这个错误是说变量初始化出现问题,通常出现在静态变量尤其是单例模式。这种问题往往是初始化顺序不对造成的

静态初始化程序中发生意外异常的信号。抛出 ExceptionInInitializerError 表明在计算静态初始值或静态变量的初始值期间发生异常。

web service,没搞过这种东西,看看相关教程吧,特别是规范要求的配置文件

Ⅱ pjsip 嵌入式 必须有系统

想把pjsip移植到嵌入式linux下,该设备有多个fxs/fxo端口,每个端口对应一个dsp通道。pjsip目前只是对声卡类设备进行支持,实现的pjsua也仅仅对一个声卡设备支持,并不支持多端口。

在移植中,可以考虑如下方法:

1、把每个fxs/fxo端口对应的dsp通道适配成一个声卡设备,对pjsua改造,呼叫的时候,指定使用哪一个音频设备

方法好处就是完全支持pjmedia现有的媒体框架,基本不改动原有流程和代码

pjsip库升级时,原有自己实现的设备不受影响

2、在pjsip代码中进行拦截,拦截收发报文时决定使用的那个通道

该方法修改了pjsip流程,在以后pjsip库需要升级时,需要同步修改

3、把整个dsp适配成一个声卡设备,扩展参数,来通知dsp使用哪个通道

该方法同样要修改pjsip代码,对以后升级不利

因此,最好的方法,就是把dsp的每个通道适配成一个音频设备,混音功能同样适配成mix设备。

pjsip目前还不支持特性 收藏

1、sip info方式dtmf接收

2、call waiting

3、t38传真

4、t30传真

5、digitmap

6、call parking

这些在pjsip的简单的uaapp中都没有,需要自己实现。可以使用pjsip-ua,pjsip lib自己实现ua或者在现有ua上进行扩充。

Ⅲ Csipsimple编译问题

断点调试看看嘛。把参数的class打印出来看看。

Ⅳ pjsip 本地视频预览怎么改变内容源的大小 iOS

1 把视频源当然文件来处理,sample有。不过这种方法用的不多。
2 修改vid_stream.c,在put_frame和get_frame里,换上我们自己的视频源。这种方法使用的最多,很多人在1.x版本里支持视频,就用这种方法。
3 重新构造sdp,自己创建rtp通道。
在sdp上,pjsua_call_make_call这个函数非常方便,直接呼叫对方。不过它在底层做了太多工作,比如启动了声卡。而不用这个函数,直接用比较底层的pjsip_inv_send_msg,自己处理的工作相对比较多(但不难,不过这样就不需要pjsua这个现成的程序了,所以我们继续用pjsua_call_make_call)。
不过还好,pj库提供了大量的回调,其中一个:on_call_sdp_created,就是在创建sdp后回调上来,由我们自己再修改。比如我们自己定义rtp的端口g_local_port。

void on_call_sdp_created(pjsua_call_id call_id,
pjmedia_sdp_session *sdp,
pj_pool_t *pool,
const pjmedia_sdp_session *rem_sdp)
{
int nPort;
if (sdp != NULL)
{

pjmedia_sdp_media *m = sdp->media[sdp->media_count-1];
m->desc.port = g_local_port;
pjmedia_sdp_conn *c = sdp->conn;

char* addr;
if (c)
addr= c->addr.ptr;
else
{

const pj_str_t *hostname;
pj_sockaddr_in tmp_addr;
char *addr;

hostname = pj_gethostname();
pj_sockaddr_in_init(&tmp_addr, hostname, 0);
addr = pj_inet_ntoa(tmp_addr.sin_addr);
sdp->conn = (pjmedia_sdp_conn *)pj_pool_zalloc (pool, sizeof(pjmedia_sdp_conn));
sdp->conn->net_type = pj_str("IN");
sdp->conn->addr_type = pj_str("IP4");
sdp->conn->addr = pj_str(addr);
}

sdp->origin.addr = *pj_gethostname();
}
}

同样,这里还可以修改payload type等。

这是发起呼叫时的,接收方收到后的回应之后,也会触发这个回调,自己设定RTP端口,payload type就可以了。
2
呼叫成功后,双方建立起连接关系,这时需要传rtp数据了。pjsua把这些工作都放在底层了,不做任何修改,只需要在发送和接收时,自己做一些处理就行。
先说接收方(参考siprtp.c源码):
pj_status_t init_local_rtp()
{
if (m_bInitMedia)
{
destroy_media();
}

//g_local_port = local_port;

pj_caching_pool_init(&cp, &pj_pool_factory_default_policy, 0);
pool = pj_pool_create(&(cp.factory), "test", 1000, 512, NULL);
int status;

//status = pjmedia_endpt_create(&cp.factory, pjsip_endpt_get_ioqueue(pjsua_get_pjsip_endpt()), 0, &med_endpt);

status = pjmedia_endpt_create(&cp.factory, NULL, 1, &med_endpt);

status = pjmedia_rtp_session_init(&video.out_sess, 97, pj_rand());
status = pjmedia_rtp_session_init(&video.in_sess, 97, 0);

status = pjmedia_transport_udp_create(med_endpt, NULL, g_local_port, 0, &video.transport);
m_bInitMedia = true;
video.active = true;
return 0;
}
这段代码是本地启动rtp一个端口用来接收视频数据。
然后,从sdp得到对方发送的ip和端口,调用pjmedia_transport_attach,建立关联就可以了。

Ⅳ java怎么实现c的回调函数

以我的理解恐怕这个CALLBACK要让你失望了~~JAVA的操作机制是隐藏了指针和引用,地址的操作在JAVA里面是不允许的~~所以JNI接口中定义的方法,不能使用函数指针作为形参,所以这个回调函数在JAVA的CLASS中是不能调用的;
你换个思考角度用TCP/UDP程序吧,JAVA的CLASS调用的结果通过流传递给C/C++的Server。。。貌似我只能想到这样了。
望采纳!!

Ⅵ pjsip库的sample怎么用

第一步是生成 pjsip 为 Android (步骤为 Ubuntu Linux) 的源代码:

1.设置 ANDROID_NDK_ROOT 环境变量设置为您 NDK 根文件夹。
2.转到 pjsip 2.x 文件夹并创建 pjlib/include/pj/config_site.h 包括 config_site_sample.h ( #include <pj/config_site_sample.h> )
3.运行./configure-android
4.运行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 但要遵循的主要步骤是:

1.创建一个具有 UA 实例pjsua_create
2.创建一个工作线程与pj_thread_create
3.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) ;

4.初始化堆栈与pjsua_init

5.启动与堆栈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 生成

Ⅶ 通过ndk移植pjsip协议到android上出现error: undefined reference to 'srand'

这个问题属于ndk r10带来的问题,建议换成ndk r9后试试,
希望对你有用,我是ndk吧吧主,有问题可以ndk吧留言,谢谢!

Ⅷ pjsua和pjsua2的区别

PJSUA是一个开源的命令行SIP用户代理(软电话),用PJSIP协议,PJNATH,和PJMEDIA实现。 它虽然只有很简单的命令行界面,但是功能齐全。
PJSUA2是PJSUA API以上的面向对象抽象。
它为构建会话发起协议(SIP)多媒体用户代理应用程序(也称为IP / VoIP软电话)提供高级API。它将信令,媒体和NAT穿越功能结合到易于使用的呼叫控制API,帐户管理,好友列表管理,在线状态和即时消息中,以及多媒体功能,如本地会议,文件流,本地播放和语音录制和强大的NAT穿越技术,利用STUN,TURN和ICE。

Ⅸ 如何在 android 设备上使用 pjsip G.729 编解码的功能

第一步是生成 pjsip 为 Android (步骤为 Ubuntu Linux) 的源代码:

1.设置 ANDROID_NDK_ROOT 环境变量设置为您 NDK 根文件夹。
2.转到 pjsip 2.x 文件夹并创建 pjlib/include/pj/config_site.h 包括 config_site_sample.h ( #include <pj/config_site_sample.h> )
3.运行./configure-android
4.运行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 但要遵循的主要步骤是:

1.创建一个具有 UA 实例pjsua_create
2.创建一个工作线程与pj_thread_create
3.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) ;

4.初始化堆栈与pjsua_init

5.启动与堆栈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 生成

阅读全文

与pjsua相关的资料

热点内容
网络加载视频失败是怎么回事 浏览:805
传奇账号在哪个文件夹里 浏览:346
百度app在哪里安装 浏览:587
如何设置路由器网络不断网 浏览:471
传到qq群里的文件怎么删除 浏览:861
索尼安卓71更新日志 浏览:234
怎么找手机里的垃圾app 浏览:540
2015蓝桥杯代码填空 浏览:698
安卓数据库dbexecSQL 浏览:227
doc重命名文件格式 浏览:728
getscreen截图工具下载 浏览:719
共识数据是什么时候开始的 浏览:96
数码管显示电压程序 浏览:479
数据库文件有哪个 浏览:543
途强储存在哪个文件夹 浏览:172
如何恢复被覆盖文件 浏览:611
iphone5用哪个版本最好 浏览:327
extjsgrid禁用 浏览:426
如何查找国外论文的编程代码 浏览:366
暗金颜色代码 浏览:789

友情链接