作業中のプロジェクトに PJSip を追加しようとしています。この方法でアカウントを登録していますが、毎回「Fatal signal 11」エラーが発生します。
ここに方法があります
public int setRegistration() {
int status = pjsuaConstants.PJ_FALSE;
/* Register to SIP server by creating SIP account. */
int[] accId = new int[1];
accId[0] = 1;
String uName = getUserName();
String passwd = getPassword();
String server = getSIPServer();
pjsua_acc_config acc_cfg = new pjsua_acc_config();
pjsua.acc_config_default(acc_cfg);
acc_cfg.setId(pjsua.pj_str_copy("sip:" + uName + "@" + server));
acc_cfg.setReg_uri(pjsua.pj_str_copy("sip:" + server));
acc_cfg.setCred_count(1);
acc_cfg.getCred_info().setRealm(pjsua.pj_str_copy(server));
acc_cfg.getCred_info().setScheme(pjsua.pj_str_copy("digest"));
acc_cfg.getCred_info().setUsername(pjsua.pj_str_copy(uName));
acc_cfg.getCred_info().setData_type(pjsip_cred_data_type.PJSIP_CRED_DATA_PLAIN_PASSWD.swigValue());
acc_cfg.getCred_info().setData(pjsua.pj_str_copy(passwd));
Log.d("status", "acc is adding..");
status = pjsua.acc_add(acc_cfg, pjsuaConstants.PJ_TRUE, accId);
Log.d("status", "acc is added");
if (status == pjsuaConstants.PJ_SUCCESS) {
status = pjsua.acc_set_online_status(accId[0], 1);
Log.d("acc_set_online_status returned stauts=", String.valueOf(status));
} else {
Log.d("Error status=", String.valueOf(status));
}
return status;
}
回線でエラーが発生しますstatus = pjsua.acc_add(acc_cfg, pjsuaConstants.PJ_TRUE, accId);
。ユーザー名、サーバー、およびパスワードが null でないことはわかっています。これに関連する複数の質問を見てきましたが、役に立ちません。
どうすればアカウントを登録できますか?
ありがとう
*****編集***** ブログやフォーラムを通じてこれを追跡した後、このエラーは渡されましたが、別のエラーを受け取りました。このエラーが発生した理由pjsua_init
は、 が成功しなかったためです。このエラーが発生したため、成功しました
11-04 10:19:20.973: E/AndroidRuntime(2961): FATAL EXCEPTION: main
11-04 10:19:20.973: E/AndroidRuntime(2961): java.lang.UnsatisfiedLinkError: Native method not found: org.pjsip.pjsua.pjsuaJNI.init:(JLorg/pjsip/pjsua/pjsua_config;JLorg/pjsip/pjsua/pjsua_logging_config;JLorg/pjsip/pjsua/pjsua_media_config;)I
11-04 10:19:20.973: E/AndroidRuntime(2961): at org.pjsip.pjsua.pjsuaJNI.init(Native Method)
11-04 10:19:20.973: E/AndroidRuntime(2961): at org.pjsip.pjsua.pjsua.init(pjsua.java:812)
私もこの警告を受けました
No implementation found for native Lorg/pjsip/pjsua/pjsuaJNI;.init (JLorg/pjsip/pjsua/pjsua_config;JLorg/pjsip/pjsua/pjsua_logging_config;JLorg/pjsip/pjsua/pjsua_media_config;)I
なぜこれはネイティブメソッドではないのですか? 呼び出したライブラリを調べていますが、それ以外は、これが機能しない理由がわかりません。
この問題に関する助けは素晴らしいでしょう。ありがとう
PJコード
pjsua.java
public synchronized static int init(pjsua_config ua_cfg, pjsua_logging_config log_cfg, pjsua_media_config media_cfg) {
return pjsuaJNI.init(pjsua_config.getCPtr(ua_cfg), ua_cfg, pjsua_logging_config.getCPtr(log_cfg), log_cfg, pjsua_media_config.getCPtr(media_cfg), media_cfg);
}
pjsuaJNI.java
public final static native int init(long jarg1, pjsua_config jarg1_, long jarg2, pjsua_logging_config jarg2_, long jarg3, pjsua_media_config jarg3_);
pjsua_wrap.cpp
SWIGEXPORT jint JNICALL Java_org_pjsip_pjsua_pjsuaJNI_init(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jlong jarg3, jobject jarg3_) {
jint jresult = 0 ;
pjsua_config *arg1 = (pjsua_config *) 0 ;
pjsua_logging_config *arg2 = (pjsua_logging_config *) 0 ;
pjsua_media_config *arg3 = (pjsua_media_config *) 0 ;
pj_status_t result;
(void)jenv;
(void)jcls;
(void)jarg1_;
(void)jarg2_;
(void)jarg3_;
arg1 = *(pjsua_config **)&jarg1;
arg2 = *(pjsua_logging_config **)&jarg2;
arg3 = *(pjsua_media_config **)&jarg3;
result = (pj_status_t)pjsua_init((pjsua_config const *)arg1,(pjsua_logging_config const *)arg2,(pjsua_media_config const *)arg3);
jresult = (jint)result;
return jresult;
}
{"init", "(JLorg/pjsip/pjsua/pjsua_config;JLorg/pjsip/pjsua/pjsua_logging_config;JLorg/pjsip/pjsua/pjsua_media_config;)I", (void*)& Java_org_pjsip_pjsua_pjsuaJNI_init},
編集2
だから、これに取り組んだ後、私はフラストレーションのポイントに達しました. 私は自分が間違っていることを見ていないので、プロセス全体をここに置いて、誰かが提案を持っているかどうかを確認します.
- まず、pjsip ライブラリを取得します。
svn co http://svn.pjsip.org/repos/pjproject/trunk pjproject
- `./configure --prefix=/usr/local を実行します
- make dep & make
sudo make install
次に、pjjni コードを取得します
svn checkout svn://svn.code.sf.net/p/pjsip-jni/code/ pjsip-jni-code
- Makefileの指示に従います
- Makefile が正常に実行された後 (コードのクリーンアップ後)、2 つの .so ファイル (libpjsua_jni.so と libpjsua_jni_x64.so) ができました。
- Android.mk ファイルと .so ライブラリを含む jni フォルダーを作成する
- ndk-build を実行します ( Android プロジェクトに別の .so ファイルをロードするにはどうすればよいですか? )
- ADT に追加
- プロジェクトを閉じます。ネイティブ サポートを Java から Android に変更します。プロジェクトを開く (既存のプロジェクトを Eclipse で Android プロジェクトに変換しますか? )
- そのプロジェクトを私の TestPJ プロジェクトに追加します (
Android -> Library -> Add
) - Call
System.loadLibrary("pjsualib")
-- 新しい lib.so の名前 受信エラー
11-22 13:55:44.784: W/dalvikvm(11464): ネイティブ Lorg/pjsip/pjsua/pjsuaJNI の実装が見つかりません;.swig_module_init:()V 11-22 13:55:48.792: W/dalvikvm(11464) : 例外 Ljava/lang/UnsatisfiedLinkError; Lorg/pjsip/pjsua/pjsuaJNI の初期化中にスローされます。11-22 13:55:51.417: E/AndroidRuntime(11464): java.lang.UnsatisfiedLinkError: ネイティブ メソッドが見つかりません: org.pjsip.pjsua.pjsuaJNI.swig_module_init:()V 11-22 13:55:51.417: E /AndroidRuntime(11464): org.pjsip.pjsua.pjsuaJNI.swig_module_init(ネイティブ メソッド) 11-22 13:55:51.417: E/AndroidRuntime(11464): org.pjsip.pjsua.pjsuaJNI.(pjsuaJNI.java: 1450)
どんな助けでも素晴らしいでしょう。ありがとう!