1.Microsoft Visual Studio Community 2017 を起動して、Visual C# の新規プロジェクトを作成します。ここでは分かりやすいコンソールアプリにします。
2.空のプロジェクトが作成されます。
3.空のプロジェクトが作成できたら、ソースファイルのある場所に移動して、前回作成した pjsua2.dll をこの中にコピーします。
4.既存の項目の追加で pjsua2.dll をプロジェクトに追加します。
5.pjsua2.dll が追加されました。
6.pjsua2.dll のプロパティを開いて、「ビルドアクション」を「コンテンツ」、「出力ディレクトリにコピー」を「常にコピーする」に設定します。
7.次にプロジェクトに新しいフォルダを作成し、名前を「pjsua2_libs」とします。(別に名前は何でもいいです。)
8.pjsua2_libsフォルダを選択した後、既存の項目の追加で、SWIGで作成したC#ファイルをすべて追加します。ファイルは、~\pjproject-2.8\pjsip-apps\src\swig\csharp にあります。
9.すべてのC#ファイルを選択して、「追加」をクリックします。
10.SWIGのすべてのC#ファイルが追加されました。
11.追加したC#ファイルのうち、pjsua_snd_dev_id.cs がエラーになるので、次のように修正します。
<修正前>
↓
<修正後>
public enum pjsua_snd_dev_id {
PJSUA_SND_DEFAULT_CAPTURE_DEV = -1,
PJSUA_SND_DEFAULT_PLAYBACK_DEV = -2,
PJSUA_SND_NO_DEV = -3,
PJSUA_SND_NULL_DEV = -99
}
12.program.cs にサンプルプログラム(このページの最後にあります)を貼り付けます。
13.ソリューションのクリーンを実行します。
14.ソリューションのリビルド(またはビルド)を実行します。
15.実行してみます。初回のみ、セキュリティー警告が出るので「アクセスを許可する」をクリックします。
16.実行中の画面です。何かキーを押すと終了します。(SIPのレジストエラーなのは、SIP接続情報がサンプルのままだからです。)
17.実際の program.cs (サンプルプログラム)です。
【ソース元】
https://www.pjsip.org/docs/book-latest/html/intro_pjsua2.html#id1
【PJSUA2のドキュメント】
https://www.pjsip.org/docs/book-latest/html/index.html
- 着信があると、onIncomingCall 関数が呼ばれます。
- 引数 prm に着信情報(相手電話番号など)が受け渡されます。
- onRegState 関数は、SIPレジスト処理の時に呼ばれます。
- override できる関数は他にもありますので、興味がある方は試してみてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using pjsua2xamarin.pjsua2; namespace pjsua2_swig_test { class MyAccount : Account { public override void onIncomingCall(OnIncomingCallParam prm) { base.onIncomingCall(prm); } public override void onRegState(OnRegStateParam prm) { base.onRegState(prm); } }; class Program { static void Main(string[] args) { Endpoint ep = new Endpoint(); ep.libCreate(); // Initialize endpoint EpConfig ep_cfg = new EpConfig(); ep.libInit(ep_cfg); // Create SIP transport. Error handling sample is shown TransportConfig sipTpConfig = new TransportConfig(); sipTpConfig.port = 5060; ep.transportCreate(pjsip_transport_type_e.PJSIP_TRANSPORT_UDP, sipTpConfig); // Start the library ep.libStart(); AccountConfig acfg = new AccountConfig(); acfg.idUri = "sip:05012345678@ipphone.plala.or.jp"; acfg.regConfig.registrarUri = "sip:ipphone.plala.or.jp"; AuthCredInfo cred = new AuthCredInfo("digest", "*", "user_name", 0, "secret"); acfg.sipConfig.authCreds.Add(cred); // Create the account MyAccount acc = new MyAccount(); acc.create(acfg); // Here we don't have anything else to do.. //Thread.Sleep(10000); Console.ReadLine(); acc.Dispose(); ep.libDestroy(); ep.Dispose(); } } } |