SkypeKitとそれが食べるもの

SkypeKitは、独自のSkype SDKです。 原則として、今日、代替のSkypeクライアントを作成する唯一の方法です。 この製品は興味深いものですが、インスピレーションを受けた開発者に失望を引き起こす可能性のある十分な数の問題があります。



SkypeがすでにSDKを開いて、ハブで作成した したがって、トピックは、SkypeKitの実用的な意味とその落とし穴について直接説明します。



1.登録


SkypeKitがベータ版だったときでも登録しましたが、これは招待によってのみ入手でき、無料で配布用のキーを原則として提供しなかった場合に入手できました。

ただし、 developer.skype.comにアクセスして簡単なフォームに記入し、ハードペイで10ドル(Skypeアカウントから差し引かれます)を入力するだけで、誰でもすぐに参加できます。

すばらしいヒント:ライセンス契約を注意深く読んでください。非常に厳しいです。 ライセンスについては後で別途説明します。 このように要約すると、「Skypeは開発者に会おうとしましたが、脳の所有権を手放すことはできませんでした。」 相対的な法的セキュリティでは、開発者だけが鉄片です。

その後、他のユーザーを組織に招待する機会がありますが、とにかく10ドルを要求しますが、実際にはそれらを支払うことはできませんが、新しいユーザーにジャンクを開発するために必要なものをすべて与え、ログインできます( 情報は長い間更新されていません) 、私は間違っている可能性があります )。 組織内の100人以上がすることはできません。



2. SDKおよびランタイムの入手


この瞬間から興味深いことが始まります。 developer.skype.com/skypekit/sdksにアクセスすると、「SkypeKit Multi-OS SDK」をダウンロードする提案がありますが、喜ぶ理由はほとんどありません。 このパッケージでは、C ++、Java、Pythonのヘッダーファイルとこれらの言語のいくつかの例に加えて、ほとんど何も見つかりません。 約束のスカイプはどこにありますか? しかし、イチジクはあなたにランタイムを提供し、10ドルを支払うだけで、その後にのみ、「ランタイムのリクエスト」がページの下部に表示されます。 利用可能なプラットフォームのリストは非常に広範囲です:x86、ARM(v5、v6、v7)のコードを備えたWindows、Linux、MacおよびMIPS(リトルエンディアンとビッグエンディアンの両方)。 しかし、驚かれることでしょう。ビデオコールはLinuxのバージョン(およびすべてのタイプのCPU)でのみサポートされています。 Aww、Microsoft、どこを見ていますか?

注意! 各ランタイムはあなたのために特別に収集され、計算するために肛門の奴隷制を取ることができる有線の識別子が含まれています。 結果のランタイムは、登録された組織で識別されます。 また、開発中は、組織内にあるアカウントのみにログインできます。



3.キーの取得


開始するには、 developer.skype.com/ applicationsでアプリケーションを登録する必要があります。 しかし、面白い瞬間があります:

4.受け取った商品を開梱する

そして、SDK、ランタイム、開発キーペアがあります。 SDKを便利な場所に解凍し、ランタイムを%SDK%/ binの必要な場所に配置し、キーの場所も考えます。

確かに例を実行したいと思うでしょうが、それほど簡単ではありません。 まず、彼らは鍵がどこにあるかを知る必要があります。 これを行うには、keypair.h、token.py、AppKeyPairMgr.javaを編集し、目的のパスを入力します。 あなたの魂でコードを読むことは本当にお勧めしません- 最悪の牛のコードがあります!後でいくつか例を挙げます

VoicePCM / VoiceRTPまたはVideoRTPをサポートするランタイムを使用した場合、RTP / PCM(それらは含まれています)のスタブを収集し、ランタイムと同じディレクトリにアセンブリを配置する必要があります。 SALモードの音声(Skypeオーディオライブラリ)およびビデオなしの場合、何も収集する必要はありません。 startskypekit.pyスクリプトはランタイムを実行するように設計されており、少し編集して、便利なランタイム起動ツールと音声およびビデオハンドラーを取得できます(これらがなければ、ランタイムは愚かに落ちます)。

これでサンプルを収集できます(Pythonの場合、ランタイムを実行する前に実行するだけです)。 VisualStudioでは、問題なくサンプルが収集されます。 楽しんでください。



5. SDKの機能


いくつかの機能があります。

SDKは自分で学習できます。goo.gl / 3egQiからダウンロードできます(ランタイムやパーソナライズされたその他のものがないため)。



6.クイックコードの例


if(input_started) { unsigned int samples_returned = output_buf.size() /( 2 * numOfOutputChannels ); if(input_buf[(input_p % INPUT_BUF_ARRAY_SIZE)].size() != samples_returned * 2) input_buf[(input_p % INPUT_BUF_ARRAY_SIZE)].resize(samples_returned * 2); if(input_muted) { memset((char*)input_buf[(input_p % INPUT_BUF_ARRAY_SIZE)].data(), 0, input_buf[(input_p % INPUT_BUF_ARRAY_SIZE)].size()); } else if(numOfOutputChannels > 1) { short* ob = (short*) output_buf.data(); short* ib = (short*) input_buf[(input_p % INPUT_BUF_ARRAY_SIZE)].data(); for(unsigned int i = 0 ; i < samples_returned; i ++) { ib[i] = ob[i * numOfOutputChannels]; } } else { input_buf[(input_p % INPUT_BUF_ARRAY_SIZE)] = output_buf; } int input_samples_returned = input_buf[(input_p + 1) % INPUT_BUF_ARRAY_SIZE].size() / 2; m_transport->InputDeviceReady(input_samples_returned,input_sampleRate,1, input_buf[(input_p + 1) % INPUT_BUF_ARRAY_SIZE]); } }
      
      





はい、いくつかの長い行がここに引き継がれましたが、これはコードをあまり損ないませんでした。 インデントでタブとスペースを同時に使用するために何を切り離すかわかりません。

そして、これは一般的に「インドから愛をこめて」の例です

 switch (propid) { case 4: return &skylibFields[689]; case 5: return &skylibFields[690]; case 7: return &skylibFields[691]; case 8: return &skylibFields[692]; case 9: return &skylibFields[693]; case 10: return &skylibFields[694]; case 11: return &skylibFields[695]; case 12: return &skylibFields[696]; case 13: return &skylibFields[697]; case 14: return &skylibFields[698]; case 15: return &skylibFields[699]; case 16: return &skylibFields[700]; case 17: return &skylibFields[701]; case 18: return &skylibFields[702]; case 19: return &skylibFields[703]; case 26: return &skylibFields[704]; case 27: return &skylibFields[705]; case 28: return &skylibFields[706]; case 34: return &skylibFields[707]; case 37: return &skylibFields[708]; case 70: return &skylibFields[709]; case 71: return &skylibFields[710]; case 72: return &skylibFields[711]; case 73: return &skylibFields[712]; case 74: return &skylibFields[713]; case 75: return &skylibFields[714]; case 76: return &skylibFields[715]; case 77: return &skylibFields[716]; case 78: return &skylibFields[717]; case 79: return &skylibFields[718]; case 160: return &skylibFields[719]; case 161: return &skylibFields[720]; case 162: return &skylibFields[721]; case 163: return &skylibFields[722]; case 164: return &skylibFields[723]; case 165: return &skylibFields[724]; case 166: return &skylibFields[725]; case 168: return &skylibFields[726]; case 169: return &skylibFields[727]; case 182: return &skylibFields[728]; case 183: return &skylibFields[729]; case 205: return &skylibFields[730]; case 773: return &skylibFields[731]; case 800: return &skylibFields[732]; case 801: return &skylibFields[733]; case 802: return &skylibFields[734]; case 804: return &skylibFields[735]; default: break; }
      
      





まあ、あなたはまだ行末の後にPythonにセミコロンを入れる必要はないと言うことができます。 そして、一行、そして一行このように。 コードスタイルの規約があるかどうかはわかりません。



7.ライセンス契約


ランタイムがあなたに挨拶するのはこのテキストです:

SkypeRuntime Copyright (C) 2003-2011 Skype Technologies SA

SkypeRuntime Version: 3.4.1/windows-x86-skypekit-novideo_3.4.1.339_%_%

Proprietary and confidential, do not share this application.







しかし、実際に1回の合意と2つの合意

引用に特に満足しています:

4.3。 前述の一般性を制限することなく、次のことを明示的に禁止されています。

4.3.1。 SkypeKit製品をエンドユーザーが利用できるようにするために、物理サーバーまたは仮想サーバー SkypeKitソフトウェアの1つ以上のコピーを実行する

4.3.2。 ライセンス、 販売 、マーケティング配布、またはその他の方法で利用可能にする:

4.3.2.1。 ハードウェア製品を中小企業または大企業または企業に直接(または付加価値再販業者または他のチャネルを介して間接的に)提供する。

4.3.2.2。 ライセンス契約のセクション4で定義されている禁止された開発。

つまり、小売チェーンであっても、法人にハードウェアを販売することはできないということです。 紳士、ごめんなさい、しかしこれはいくつかの不可能な状態です。 それでは、SamsungがどのようにしてテレビにSkypeを組み込んだのでしょうか?



8.最後に


Pythonコードの小さな例を挙げましょう。

 import sys, time, SkyLib accountName = sys.argv[1] accountPsw = sys.argv[2] keyFileName = sys.argv[3] def AccountOnChange (self, property_name): if property_name == 'status': if self.status == 'LOGGED_IN': print 'Login complete.' SkyLib.Account.OnPropertyChange = AccountOnChange def OnMessage(self, message, changesInboxTimestamp, supersedesHistoryMessage, conversation): if message.author != accountName: print(message.author_displayname + ': ' + message.body_xml) conversation.PostText('Automated reply.', False) SkyLib.SkyLib.OnMessage = OnMessage skype = SkyLib.GetSkyLib(keyFileName) account = skype.GetAccount(accountName) print 'Logging in with ' + accountName account.LoginWithPassword(accountPsw, False, False) while account.status != 'LOGGED_IN': time.sleep(1) print 'Now accepting incoming chat messages.' print 'Press ENTER to quit.' raw_input('') skype.stop()
      
      





そのシンプルさにもかかわらず、このプログラムはSkypeでメッセージを受け入れ、自動的に応答します。 イベントをトリガーする方法は、多くのC ++のスマックですが、これらの目的のためにクラスが継承されます。 しかし、Pythonでは少し失礼に見えます。 ただし、クラス(イベントハンドラー)を簡単に記述し、より美しく書くことができます。 しかし、これはプログラマーの好みです。

原則として、SkypeKitは非常に興味深い製品であることが判明しましたが、ライセンスポリシーを改訂し、SDKからbydcodeを削除する価値があります。 個人的には、Skypeを書いたときのコードは何でもありません(コンパイルされてすべてです)が、正直なところ、SDKのコードを見てうんざりしています。 まあ、彼らは賢明なプログラマーを雇ってランタイム用のバックエンドを書くことができます。そんなに大量のコードがないからです。 一般に、APIは十分に文書化されており、少し手を加えた後、すべてがどのように機能するかが理解できます。 製品は生ですが、最初の年ではありません。

私の計画には、Skype <-> XMPPトランスポートの作成が含まれているため、libjingleデバイスを試してみます。 あなたが電話できるように。 しかし、私が書いた後、そのようなライセンス条件の下でそれを配布できるかどうかはわかりません。



頑張って ブラックジャックなどを使用してSkypeを作成します。

あなたはそれを必要とするかどうかを決めます。 しかし、私の意見では、少なくとも興味のために10ドルを節約してはいけません。 しかし、壮大な計画を立てることも非常に困難です。



All Articles