Spinel - MPEG2-TS Multicast Server [はじめに] MPEG2-TSを出力するTVチューナを複数のアプリで共有するためのサーバです。 BonDriver_Spinel.dllを使用すれば、BonDriver対応アプリからすぐに使うことが出来ます。 長い上に読みにくい日本語ですが最後までお読み下さい。 [動作に必要なもの] ・最新のServicePackとWindowsUpdateを適用し、正常動作するXP以降のWindows OSで動作します。 ・.NET Framework 3.5 SP1 ・通常はWindowsUpdateでインストールされているはずです。 ・http://www.microsoft.com/downloads/details.aspx?familyid=AB99342F-5D1A-413D-8319-81DA479AB0D7&displaylang=ja ・.NET Framework 3.5 SP1 日本語 Language Pack ・http://www.microsoft.com/downloads/details.aspx?FamilyId=8489ED13-B831-4855-96F7-DD35E4C02A20&displaylang=ja ・KB959209(3.5 SP1の不具合を修正するhotfix) ・通常はWindowsUpdateでインストールされているはずです。 ・http://support.microsoft.com/kb/959209 ・Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ ・x86専用アセンブリを含むため、64bit環境でもx86用のパッケージをインストールして下さい。 また、使用するBonDriverがVC++2005用のランタイムを必要とする場合もあります。 ・(x86) http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=ja ・上記は一例で他にもパッチが出ている場合があります。 [動作確認している環境] ・ASUS P5E-VM HDMI ・Windows 7 Ultimate RTM 64bit ・Windows Vista Business SP1 64bit ・Windows XP Professional SP3 32bit ・Intel Core2Duo E3110 3.0GHz ・ATi Radeon HD 4670 ・SKNET MonsterTV HDUS ・DECA MG-P19014 ・EarthSoft PT1 rev.A ・EarthSoft PV4 rev.A [有志によって確認していただいたOS] ・Windows Vista 32bit 管理者ユーザで実行し、Program FilesなどのVirtual Storeが有効なフォルダに プログラムを置かないようにして下さい。 必要ならばUACを切って下さい。 ・Windows XP 64bit ・Windows Server 2008 ・Windows 7β(rev 7000) 32bit/64bit [用語] ・デバイス HDUSやPT1、Friioといった単位の物理的な装置のことです。 ・チューナ デバイスに搭載されているTS出力装置のことです。 HDUSには地上Dチューナが1つ、PT1には地上Dチューナが2つとBS/CSチューナが2つ搭載されています。 ・チューナパス チューナに対して付けられた一意な名前です。 HDUS/0/Terra/0 これは HDUS: SKNET MonsterTV HDUSデバイスの 0: 0番目の Terra: 地上Dチューナの 0: 0番目 という意味です。Terraだけ英語ではありませんが気にしないで下さい。 通し番号の数字は0から始まります。 [使い方] 1.BonDriverフォルダに各チューナに必要なBonDriverDLLを台数分連番ファイル名にして入れます。 PT1については特殊な命名が必要です。BonDriver_PT1-STのreadmeを参照して下さい。 2.Spinel.exeを実行します。 3.デフォルトの設定ではTCPポート48083番と48084番を使用します。 既に使用されていた場合はエラーになりますので、Spinelを一旦終了して下さい。 その後 Spinel.ini にある ServerPortNo の値を空いているポート番号に変更して下さい。 4.ドライバが正常に読み込まれると、対応したデバイスとチューナが表示されます。 5.対応アプリが接続すると、アプリ名・プロセスID(TCPの場合はマシン名も)が表示されます。 アプリが排他的チャンネルコントロールを要求して受理された場合はその表示もされます。 [対応しているデバイス] ・SKNET MonsterTV HDU/HDUS (BonDriver_HDUS / BonDriver_nnb / BonDriver_HDP2) ・Friio 白 (BonDriver_Siro) ・Friio 黒 (BonDriver_Kuro) ・Logitec LDT-FS100U (BonDriver_HDP2) ・Quixun QRS-UT100B (BonDriver_HDP2) ・SKNET MonsterTV HDP/HDUC (BonDriver_HDP2) ・Uniden DT100(BonDriver_U1IDx) ・Uniden DT300(BonDriver_U3IDx) ・Maspro DT400(BonDriver_D4IDx) ・KTV-1S3, CG-1SGT, VGA-TV1S等(BonDriver_TV1S) ・Dynaconnective DY-UD200(BonDriver_dyud) ・Trywin DT-007V(BonDriver_dt7v) ・DVBWorld DVB-S2 HD2104 (BonDriver_DW2104) ・KEIAN KTV-FSUSB2 (BonDriver_KTV / BonDriver_FSUSB2 / BonDriver_FSUSB2N) ・BonDriverをデバイス数だけ用意して下さい。 ファイル名が昇順になるよう読み込まれます。 例) BonDriver_HDUS0.dll -> HDUS/0/Terra/0 BonDriver_HDUS1.dll -> HDUS/1/Terra/0 ・EarthSoft PT1(BonDriver_PT1-ST) ・EarthSoft PT2(BonDriver_PT-ST) ・DLLファイルの命名規則はBonDriver_PT1-STの仕様に準拠します。 例) BonDriver_PT1-T0.dll -> PT1/0/Terra/0 BonDriver_PT1-T1.dll -> PT1/0/Terra/1 BonDriver_PT1-S0.dll -> PT1/0/Satellite/0 BonDriver_PT1-S1.dll -> PT1/0/Satellite/1 ・複数台に対応させる場合はその分のDLLが必要です。 必要ないアンテナ入力用のDLLは削除しても大丈夫です。 ・BonDriver_PT1-ST.iniとPT1Ctrl.exeはリネームする必要はありません。 そのまま配置して下さい。 ・SKNET MonsterTV HDP2/HDU2 (BonDriver_HDP2) ・1デバイスにつきチューナが2個あるので、DLLは(デバイス数x2)個必要です。 DLLファイル名で昇順にソートされて2個ずつセットになります。 例) BonDriver_HDP2-0A.dll -> HDP2/0/Terra/0 BonDriver_HDP2-0B.dll -> HDP2/0/Terra/1 BonDriver_HDP2-1A.dll -> HDP2/1/Terra/0 BonDriver_HDP2-1B.dll -> HDP2/1/Terra/1 このようなリネームが分かりやすいと思います。 [機能 - ネットワーク機能] ・Spinelが稼働しているマシンとは別のマシンから視聴することができます。 ・マシン間通信にはTCP/IPを利用し、ローカルでは名前付きパイプを使用します。 ・プロバイダのトラフィックを浪費するため、インターネット越しの視聴はしないで下さい。 プロバイダや各種公的機関から制裁措置を受けても当方は一切関知しません。 [機能 - 複数チューナサポート] ・PCに接続された複数のチューナを一括管理できます。 どのチューナをどのアプリが利用しているかをGUIで分かりやすく表示します。 [機能 - 同時使用サポート] ・それぞれのチューナには、他のチューナも含めたアプリ総数が20個を超えない範囲で 接続することができます。 A. 1つのHDUSを録画アプリで録画しながら、視聴アプリで視聴する B. 視聴アプリを複数立ち上げ、1つのHDUSを同時に視聴する C. 別々のマシンで視聴アプリを立ち上げ、1つのHDUSを巡ってチャンネル争いごっこをする といったことができます。 [機能 - 排他的チャンネルコントロール] ・普段は視聴アプリでチャンネル切り替えしながら見たいけど、録画アプリが立ち上がったら 間違ってチャンネルを切り替えることを防ぎたい、といったニーズにお応えします。 ・排他的チャンネルコントロールを持った録画アプリが接続している間は、そのチューナの チャンネル切り替えは録画アプリしか行えず、他のアプリが行おうとしても無視されます。 [機能 - タスクトレイ収納] ・エラーが発生するとトレイアイコンにバルーンが表示されます。 ・最小化するとトレイアイコンだけになります。 ・最初から最小化してほしい場合は、ショートカットを作って最小化状態で起動するように設定するか、 コマンドラインに -WindowState=Minimized を指定して下さい。 [機能 - ログ機能] ・Logフォルダへ動作ログが日付ごとに記録されます。 動作がおかしいと思われた場合はログを確認してみて下さい。 [機能 - 統計情報] ・チューナからの入力ビットレート、TSOptimizerの機能状況、転送ビットレートなどが表示されます。 [機能 - スクランブル解除] ・B25Decoder.dll/B1Decoder.dllを使用してスクランブル解除を行います。 ・Spinel.iniでEnableB25Decoder/EnableB1Decoderを1にするとそれぞれ有効になります。 ・B25Decoderが有効な場合はEMMが処理されます。 [機能 - TSOptimizer] ・Nullパケット、ワンセグパケット、データ放送パケットを削除して、 通信負荷やスクランブル解除負荷を軽減します。 ・Spinel.iniでEnableTSOptimizerを1にすると有効になります。 [アプリ開発者向け] ・今はBonDriver_SpinelでしかSpinelと通信できませんが、アプリ作成者の声があれば、 ちゃんとしたインタフェースを用意する予定です。 ・よく要望のある「チューナの自動割り当て」ですが、Open前にGetTunerNameやEnumChannelNameする 録画アプリがある以上、そのような機能を実装しても既存アプリには効果がありません。 (実際EpgDataCap_Bonの8.x系はそうなっています) 排他占有を考慮すると自動割り当てはOpen時にしかできませんが、その時には既に GetTunerNameやEnumChannelNameが行われているので、割り当て後と矛盾が生じます。 なのでBonDriverの枠組みでソフトが作られているうちは無意味でしょう。 それよりOpenに失敗したら別のチューナを試すコードの方が手っ取り早いと思います。 [注意 - 一般] ・Spinel.ini.defaultは設定ファイルではありません。 このファイルを書き換えても設定には反映されません。 Spinel.iniが存在しない時のコピー元ファイルとして使われるものです。 また、Spinel.ini.defaultをリネームしないで下さい。 ・BonDriverでは特定のデバイスを制御するといったことはできず、 空いているデバイスを探して使うものであるため、デバイス番号やチューナ番号が 必ずしも一致しない場合があります。 例えばDeviceNo=1としても、DeviceNo=0が空いていればそちらが使用されます。 この場合表示上は"DeviceNo=1を使っている"という表示がされます。 ・基本的にはデバイスを直接操作するアプリを一切実行していないことを前提にしています。 そのような場合は当該チューナのオープンに失敗するようにはしていますが、 何か予期しないことが発生するかもしれません。 ・このプログラムまたはライブラリを使用した事によって起こった損害等は一切関知しません。 必要なデータなどは必ずバックアップを取り、自己責任でご使用下さい。 大事な録画は別のものでも録るなど保険をかけて下さい。 ・DLLのバージョン管理を誤ると不具合の原因になります。 常に最新版のSpinelを使用して下さい。 [注意 - HDUS] ・DLLを台数分用意すれば複数台対応ができるはずですが、 環境によっては駄目かもしれません。 ・改造版BonDriver_HDUSを使う際はver 0.0.14.4以降をお使い下さい。 クラッシュするなど問題が出る環境では正規版(ver 0.0.14.0)をお使い下さい。 [注意 - PT1] ・BonDriver_PT1-STを使う場合はver0.3.0.2(人柱版3改2)以降でないと動作しません。 [注意 - EpgDataCap_Bon] ・人柱版8.56はEPG取得保存ルーチンに問題があります。 必ず改造版8.56(ver0.1.44.1のもの)を使って下さい。 ・人柱版9.xx系列は大丈夫です。 [バグかな?と思ったら] ・再現率が高く、再現手順・動作環境・ログがあれば対処できるかもしれません。 またログの一部分だけでは原因が分かりませんので、 どこかのアップローダをご利用の上ご報告頂けると有り難いです。 ・一向に改善されない場合は再現しなかったということですので、 申し訳ないですが相性問題なので諦めて下さい。 [仕様] ・B25Decode機能を有効にすると一部のCSチャンネルが映らないか、音切れする場合がある。 ・B25Decoder.dllのECM処理時間だけパケットの到着が遅れてしまうためです。 ECMありサービスが多いチャンネルで起こり、特に顕著なのはND6(AXN等)です。 ・version 3.0.0.0で若干改善できたと思いますが、通信面からのアプローチでは限界です。 ・現在実装中の独自B25デコーダではECMを非同期処理するためこの問題は解消しますが、 20ECMを超えると総処理時間が2秒を超えてしまうため、さすがにどうにもなりません。 ・B1Decoderを使うと映像が乱れることがある。  ・ドロップしていなければ、ECM処理遅延問題と同じ原因です。  ・機材や資料がないため独自B1Decoderを実装する予定は今のところありません。 ・B25Decoder2_DecodeメソッドでAccessViolationExceptionが発生する。 ・特にスマートカードのSourceとしてBonCasLinkProxyを利用すると起こることがあります。 ・B25Decoder内部で起こる問題のためどうにもなりません。 通常の構成でBonCasLinkを使うならSpinelのB25Decode機能は要らないはずです。 ・独自B25デコーダで改善する可能性はありますが、BonCasLinkとの相性までは保証できません。 [今後について] ・以下を実装していきます。 ・クライアントごとにB25デコードするかどうかを選択できる機能 ・内蔵B25デコーダ ・本業が忙しいのでなかなか進んでません。 ・(気が向いたら)サービス化対応 ・64bit版バイナリについて  ・32bit版と別に保守していくのが面倒なため消極的です。  ・BonDriver_Spinelの方は64bit版TVTestが出たのでそろそろ検討してみます。 ・配布について  ・64bitバイナリも配布する事になった時は自前の配布場所を検討したいと思います。 [作成者] Lapis Lab. [ライセンス] ・再配布を原則として禁止します。 ・商用非商用を問わず、他のアプリに組み込んで配布することを禁止します。 自分だけで勝手に使う場合は自由です。 ・リバースエンジニアリングは禁止しませんが、内容を公開することを禁止します。 [履歴] version 3.3.2.* (2010/03/30)  ・特定の規格外TSパケットに遭遇した場合にエラーダイアログが出ないようにしました。   ・iso13818-1で言うところのpointer_fieldが不適切な値であるTSパケットです。 version 3.3.1.* (2010/03/29)  ・衛星セーフティネット(BS-17/TS-0)に対応していないBonDriver向けの修正を行いました。   ・BSチャンネルについてのみ事前にIBonDriver2.EnumChannelNameメソッドを呼び出して、    選局がサポートされているか個別にチェックするようにしました。   ・今後同一機種でもBonDriverごとに対応が異なる事が有りうるので、    DeviceDefinitionsでチャンネルリスト定義を行えるようにするかもしれません。 version 3.3.0.* (2010/03/18)  ・BSチャンネルリストに衛星セーフティネット(BS-17/TS-0)を追加しました。   ・2011年にまた色々増えるので、そのうちBSチャンネル定義ファイルを用意します。    ただ選局時にTSIDを指定できるようにBonDriver規格を拡張した方が良いとは思います。 version 3.2.3.* (2009/10/12)  ・選局後にB25Decoder2_Resetを呼び出すようにしました。 version 3.2.2.* (2009/10/03)  ・KTV-FSUSB2用BonDriver3種の読み込みに対応しました。  ・BonDriver_PT-STの読み込みに対応しました。   ・実機がないのでノンテストです。  ・DeviceDefinitionsフォルダを新規に作り、そちらにデバイス定義xmlを移動しました。   独自にxmlを追加した方は注意して下さい。   ・DeviceDefinitions.xml を DeviceDefinitions/#Base.xml に移動しました。   ・DeviceDefinitions.DVBWorld.xml を DeviceDefinitions/DVBWorld.xml に移動しました。   ・DeviceDefinitions/EarthSoft.xml を新規追加しました。   ・DeviceDefinitions/#Base.xml からPT1/2のエントリを削除しました。   ・DeviceDefinitions/Keian.xml を新規追加しました。 version 3.2.1.* (2009/09/23)  ・DW2401で選局できない問題を修正しました。   ・調査ログ提供ありがとうございました。 version 3.2.0.* (2009/09/22)  ・B1Decoder.dllを使用できる機能を追加しました。 ・Spinel.ini.defaultのEnableB1Decoderを参照して下さい。   ・今のところDW2401のみで有効です。   ・動作検証環境がないので動いたらめっけもん程度でお願いします。    呼び出す関数名はB25Decoder2_XXXのままです。 version 3.1.4.* (2009/09/06)  ・ログの書き込みを専用スレッドで行うよう修正しました。 version 3.1.3.* (2009/08/29)  ・サスペンド移行時にSpinelを終了する機能を追加しました。 ・Spinel.ini.defaultのExitOnSuspendを参照して下さい。 ・Spinel.iniに記述がなかった場合のデフォルト値は0(終了しない)です。 ・復帰時にdevconでデバイスの再起動をさせている環境で使用します。  Spinelをその後で起動する事でdevconの実行中にチューナが使用されたり、  逆にチューナ使用中にdevconが実行されてOSがクラッシュする事態を回避できます。 version 3.1.2.* (2009/08/22)  ・WCFサービスの初期化タイミングを変更しました。 version 3.1.1.* (2009/08/04) ・TSOptimizerをOFFにしているとPATの検出に失敗するバグを修正しました。 version 3.1.0.* (2009/07/30) ・EpgDataCapBonWithPT1WorkaroundLevel設定を廃止しました。 ・チャンネルカテゴリが増えた場合の後方互換性が確保できない問題があったため、 接続用インターフェースを変更しました。 ・皮肉にもこの修正自体は後方互換性を破壊するのですが、他に対応アプリも無いので 切り捨てることにしました。 ・古いBonDriver_SpinelではSpinelに接続できなくなります。 version 3.0.17.* (2009/07/25) ・デバイス名の定義をxmlファイル化しました。 ・ファイル名が「DeviceDefinitions.XXX.xml」の書式であるファイルが全て読み込まれます。 ・BonDriverのマッピングまで自動化する予定ですが、もうちょっと後になります。 ・BonDriver_HDP2の読み込みルーチンを作り直しました。 ・iniファイルにあるProducts値を解釈して、対応したデバイス名にマッピングするように修正しました。 ・チューナパスとチューナ名が変更になります。 ・新しい機器に対応した場合は、そのProducts値をUSBDeviceIDMapping.iniに記載し、 デバイス定義ファイルを作成して必要な定義を行えばOKです。 ・チューナパスが変わったものについては、再度チャンネルスキャンを行うか、 録画/視聴アプリのチャンネル定義ファイルをリネームして下さい。 ・NNB4HDUSのチューナパスとチューナ名をHDUSのものに変更しました。 ・チューナパスとチューナ名が変更になります。 ・DT300とDT400のチューナパスとチューナ名を変更しました。 ・Bothは廃止されComboになりました。 ・チャンネルカテゴリJCSAT-3A及びJCSAT-4Aに対応しました。 ・BonDriver_DW2401の読み込みに対応しました。 ・試せる環境がないので動くかどうかは未確認です。 version 3.0.16.* (2009/07/19) ・クライアントの同時接続数を20(WCFの既定値は10)に変更しました。 ・ただしOSによるTCP/IP同時接続数制限は回避できません。 version 3.0.15.* (2009/07/17) ・ツリービューの各チューナ名にマウスカーソルを載せると、紐付けられている BonDriverのファイル名が表示されるようにしました。 version 3.0.14.* (2009/07/05) ・BonDriver_HDP2の読み込みルーチンを変更しました。 ・DLLが奇数個でもOKになりました。 ・選局完了から5秒後にPATが到着しているかチェックし、到着していない場合は チューナを一度再起動(Offline->Online)して再選局するようにしました。 ・BonDriver_HDP2とHDUSの組み合わせで低確率で起こる選局バグ対策です。 他の機種でも起こるかどうかは分かりません。 version 3.0.13.* (2009/05/25) ・クライアントの強制切断時にデッドロックする可能性がある問題を修正しました。 ・10秒ごとにTS送信スレッドがデッドロックしていないかチェックし、 デッドロックしていた場合は強制切断するようにしました。 version 3.0.12.* (2009/05/20) ・BonDriver_dt7vを読み込めるようにしました。 ・B25DecoderとTSOptimizerは常に無効に設定されます。 version 3.0.11.* (2009/05/04) ・BonDriver_dyudを読み込めるようにしました。 version 3.0.10.* (2009/05/03) ・チューナオープンに失敗した場合にクライアント数のカウントが狂ってしまう問題を 修正しました。 version 3.0.9.* (2009/05/02) ・単一のチューニング空間しかサポートしないデバイス(FriioWhite,DT100)では、 チューニング空間が無効になっているかどうかを検出しないようにしました。 ・公式の白凡BonDriverは他とEnumXXXまわりの実装が違うのだと思います。 FriioWrapperの方によればOpenTunerしないと取得できないみたいですね。 version 3.0.8.* (2009/04/16) ・TSパケット同期ルーチンを新しく書き直しました。 ・TSOptimizerのon/off如何に関わらず全てのデバイスで影響があります。 version 3.0.7.* (2009/04/15) ・バッファサイズが188の倍数でないBonDriverだと、TSOptimizerで例外が発生する問題を 修正しました。 ・ソースを確認したところBonDriver_D系とBonDriver_U系のみバッファサイズが 65536バイトであり、188の倍数ではありません。 ・利用側が調整していたのでは結局メモリコピー回数が増えて損なだけなので、 最初からBonDriver自体が188の倍数サイズのバッファを返して欲しい気はします。 ・TSOptimizerを使用しない設定でも、転送バッファサイズが188バイト単位になるよう 整形するようにしました。 ・チューナクローズ時にTSパケット断片バッファをクリアしていなかったバグを修正しました。 ・TSパケット断片が発生するDT400/300/100でしか影響はありません。 ・チャンネル変更時にTSパケット断片バッファをクリアしていなかったバグを修正しました。 ・TSパケット断片が発生するDT400/300/100でしか影響はありません。 ・内部でFlushされた場合はBonDriver側の対応が無いとどうにもなりません。 ・BonDriver_TV1Sを読み込めるようになりました。 ・このデバイスに限ってB25DecoderとTSOptimizerは常に無効に設定されます。 version 3.0.6.* (2009/04/14) ・TSOptimizerで例外が発生する問題について原因と思われる箇所を修正しました。 version 3.0.5.* (2009/04/13) ・BonDriver_nnbで複数視聴した時にCPU使用率が100%にならないようにしました。 ・Spinel3ではGetTsStreamでデータが来ない場合WaitTsStreamを呼び出して待機します。 ソースが無いのではっきりとは言えませんが、おそらくBonDriver_nnbでは このWaitTsStreamが正しく実装されていません。 ・応急処置としてBonDriver_nnbの場合のみWaitTsStreamでなく、 Sleepで10ms待機するようにしました。 HDUSを複数台持っていないのでこの処置が有効かは分かりません。 ・BonDriverが更新されない場合はサポートから外すかもしれません。 BonDriver_HDP2の使用が可能か検討してみて下さい。 version 3.0.4.* (2009/04/12) ・シャットダウン時にクライアントが接続していた場合、確認ダイアログを表示するか 設定できるようになりました。 ・Spinel.ini.defaultのConfirmOnShutdownIfClientExistsを参照して下さい。 記述がなかった場合のデフォルト値は1(表示する)です。 version 3.0.3.* (2009/04/10) ・サスペンド復帰後にWCFKeepAliveが動作しない場合がある問題を修正しました。 version 3.0.2.* (2009/04/06) ・単一のチューニング空間しかサポートしないデバイス(FriioWhite,DT100)で、 UHF-13ch(DT100の場合はリモコン1)しか選局が出来ない問題を修正しました。 ・チューナオープンに失敗した場合、クライアントが切断されない問題を修正しました。 ・1つのチューナに複数のクライアントが接続した時、統計情報の値がおかしくなる 問題を修正しました。 ・"Send"の項目ではクライアント全てに対する転送量を表示します。 version 3.0.1.* (2009/04/05) ・PMTが到着していない時にPATが更新されると、NullReferenceException例外が 発生する問題を修正しました。 version 3.0.0.0 (2009/04/05) ・.NET Framework 3.5 SP1以降専用になりました。 インストールされていない場合はエラーダイアログを表示して終了します。 ・RPCライブラリを.NET RemotingからWindows Communication Foundationに変更しました。 以前のBonDriver_Spinelは使用できません。 ・TS送信だけでなくチューナ制御にも名前付きパイプを使用するようになりました。 ・sexe等でサービス化した時にVistaでもそれなりに動作するように修正しました。 運用に万全を期すならサービス化はお勧めできません。 ・クライアントが接続している時はサスペンド状態への移行を阻止するようにしました。 ・SetThreadExecutionStateを呼び出し、さらにWndProcでWM_POWERBROADCASTに応答します。 ・Vistaではアプリケーション側でスリープ拒否できるようにグループポリシーを 修正する必要があります。ただしスリープボタンなど物理的なトリガーでのサスペンドは どうやっても阻止できません。 ・クライアントが接続している時にWindowsをシャットダウンしようとした場合、 終了確認ダイアログを出すようにしました。 ただしSpinelがSYSTEMアカウントで実行されている場合は一切表示せず終了します。 ・EMM処理数を1分間隔でチェックし、処理されていた場合はログに記録するようにしました。 ・TS送信プロトコルを変更しました。 ・要求-応答型から単なるプッシュ型になりました。 ・TS送信キューの最大キュー数を64個から無制限に変更しました。 ・TCP/IP送信バッファサイズ(Socket.SendBufferSize)を256KBに変更しました。 ・パイプ送受信バッファサイズを256KBに変更しました。 ・チューナからのデータ取得方式をポーリング型からイベント待機型に変更しました。 ・iniのデフォルト値を変更しました。Spinel.ini.defaultを参照して下さい。 version 2.8.9.* (2009/03/12) ・Client.TCPSendThreadMainメソッド、またはClient.NamedPipeSendThreadMainメソッド内で ThreadInterruptedException例外が発生する問題を修正しました。 ・BonDriver_Spinelの更新とは関係なく、以前から存在していた問題です。 環境によってごく稀に発生する可能性がありました。 PT1初心者質問スレ926さん、ご協力頂きありがとうございました。 version 2.8.8.* (2009/02/23) ・.NET Framework 2.0 SP2(または3.5 SP1)環境でないと例外が発生する問題を修正しました。 ・そのうち3.5 SP1専用にします。 version 2.8.7.* (2009/02/13) ・チューナを閉じる時に受信スレッドの終了を500ms以上待たないようにしました。 ・本来0msでもいいのですが、例えばPT1でS0チューナを閉じてすぐT0チューナを開くと BonDriverがエラーを返すため、とりあえずのwait値になっています。 ・TVTest等でBonDriverを切り替えた時にオープン失敗になる場合は教えて下さい。 version 2.8.6.* (2009/02/07) ・常に終了時に確認ダイアログを出すかどうかを設定できるようにしました。 ・Spinel.ini.defaultのAlwaysConfirmOnExitを参照して下さい。 記述がなかった場合のデフォルト値は1(常に表示)です。 version 2.8.5.* (2009/02/03) ・BonDriver_HDP2.dllを読み込めるようにしました。 ・1デバイスにつきチューナが2個あるので、DLLはデバイス数*2個必要です。 適当にリネームしたものを放り込んで下さい。 version 2.8.4.* (2009/01/22) ・TSAnalyzer.ReadPSISectionHeader周辺にログをいくつか追加しました。 ・落ちる方は当該ログをアップロードして頂けると原因が何か分かるかもしれません。 その際は頻度や特定の局、時間のみで発生するのかも付け加えて頂けると助かります。 version 2.8.3.* (2009/01/21) ・BonDriverの設定でCS110空間を無効にしているにも関わらず、CS110のチャンネル名を 返していたバグを修正しました。 ・EpgDataCap_Bonでチャンネルスキャンが終了しなくなる原因は多分これだと思います。 http://f38.aaa.livedoor.jp/~gorira/ts/epgdatacap_bon2.html 情報をご提供頂きありがとうございました。 version 2.8.2.* (2009/01/13) ・BonDriver_U1IDx.dllを読み込むようにしました。 ・デバイス名はDT100にしてますが、もっと適切なものがあれば教えて下さい。 ・PSIペイロードサイズが8byte未満のPATをAssertでエラー扱いしないよう修正しました。 version 2.8.1.* (2008/12/24) ・サスペンド時処理を変更しました。 ・自動終了しないようになりました。 HDUSで問題が出る場合はEpgTimer_Bon等の復帰後再起動機能を使って下さい。 ・クライアントが接続していた場合は強制切断します。 ・BonDriver_nnb.dllを読み込めるようにしました。 ・扱いはHDUSと同じですが動作チェックはしていません。 ・BonDriver_HDUS.dllの製品名をチェックするようにしました。 version 2.8.0.* (2008/12/22) ・送信ブロックのサイズを動的に変更するようにしました。 新しいプロトコルを使っているため、最新BonDriver(BonDriver_Spinel ver2.3.0.0以降)でないと 正常に受信できません。 ・暗転などビットレートが急激に下がった時(1Mbpsなど)に音切れする問題が改善されます。 試験放送中のチャンネルなどでも動作を確認できます。 動作状況については統計情報の「Send」に表示されます。 ・ただし視聴アプリが固定長バッファリングを行っている場合は無駄です。 録画アプリのUDP送信もこういう機能を付けないとレイテンシが大きくなりすぎて音切れします。 EpgDataCap_BonはTSOptimizerのような機能で転送レートが下がっているので尚更です。 ・BonDriver_HDUSのバージョンチェックを行うようにし、ver0.0.14.0以前かver0.0.14.4以降でないと 動作しないようにしました。 ・HDUSのKeepChannelOnClosedを常に無効にするよう修正しました。 ・選局が保持されていたのは BonDriver_HDUS ver0.0.14.1 のバグでした。 ・これでDT300/400のみの機能になりましたが、使っている人がいなければ次で完全に削除します。 version 2.7.0.* (2008/12/21) ・TS最適化機能(TSOptimizer)を更新しました。 ・TSPacketOptimizerの名称は廃止します。 設定ファイル中の記述もEnableTSOptimizerに変更になりました。 記述がなかった場合のデフォルト値は0(無効)です。 ・Nullパケットだけでなく、ワンセグやデータ放送と思われるパケットも除去します。 具体的には以下の条件を満たすPIDのパケットを除去します。 ・StreamTypeがH.264であるElementalyStreamが属するPMTに記載された全てのPID(ワンセグ) ・StreamTypeがISO/IEC 13818-6 TYPE-DであるElementalyStreamのPID(データ放送?) ・DbgviewなどでPAT/PMTの情報を見ることができます。 出力データがおかしい時にヒントになるかもしれません。 version 2.6.0.* (2008/12/17) ・TSDataLinkプロトコルに新しいコマンドを追加しました。 ・TSが送信可能になるまで最大500ms待機してから送信するコマンドを追加しました。 version 2.5.0.* (2008/12/16) ・B25Decoder.dllを使用したB25Decode機能を追加しました。 ・設定方法はSpinel.ini.defaultのEnableB25Decoderを参照して下さい。 記述がなかった場合のデフォルト値は0(無効)です。 ・B25Decoder.dllが存在しない場合や、バージョンがver2.1.4.0以降でない場合は常に無効になります。 ・Nullパケット除去機能がB25Decoder側に存在するので、B25Decode機能が有効な時は TSPacketOptimizerで除去処理を行いません。 ・EMM処理は常に有効に設定されます。 ON/OFFを切り替えられる必要は無いと思いますが、真っ当な要望があれば実装します。 ・Spinelが稼働しているマシンにリモートデスクトップでログインするとカードリーダが切断されます。 その時録画を行っているクライアントが接続していると悲しいことになりますので注意して下さい。 ・IB25Decoder2.Initializeを呼び出す前にDiscardNullPacket/EnableEmmProcessを呼び出していたので、 後に呼び出すよう修正しました。 version 2.4.1.* (2008/12/15) ・BonDriver_PT1-STのバージョンチェックを行うようにし、ver0.3.0.2以降でない場合は 動作しないようにしました。 version 2.4.0.* (2008/12/11) ・TSパケット最適化機能(TSPacketOptimizer)を追加しました。 ・最適化状況は統計情報に表示されます。 ・設定方法はSpinel.ini.defaultのEnableTSPacketOptimizerを参照して下さい。 記述がなかった場合のデフォルト値は1(有効)です。 ・現状ではNullパケット(PID=0x1FFF)を除去するのみです。 ・地上波のアプコンHD放送など局が映像ビットレートをケチっている場合に転送量が軽減されます。 ただしNICが低性能で転送量が直接CPU負荷に響くような環境や、 メモリコピー速度がよほど遅い環境でないと目に見えた効果は無いでしょう。 ・HDUSの場合はBonDriverが同様の処理を行っているため、TSPacketOptimizer側で除去処理を行いません。 ・ワンセグ等不要なサービスや、契約していなかったり金輪際見ることのないようなCSサービスの TSパケットを除去するのが最終目的です。 version 2.3.1.* (2008/12/09) ・KeepChannelOnClosedを指定したデバイスで、GetCurrentTuningSpaceとGetCurrentChannelが 正しい値を返さないバグを修正しました。 ・前回のチャンネルを返すのが正しいのですが、ドライバが返す値をそのまま返していました。 その時点ではドライバ自体が無効な値を保持しているので、結果的に間違った値が取得されます。 version 2.3.0.* (2008/12/08) ・BonDriverを使ったチューナ制御を共通インターフェースを使用したものに置き換えました。 ・BonDriverが返すチャンネル空間名やチャンネル名は全て無視し、Spinelが定義した共通名を返します。 EnumTuningSpace(dwSpace)がドライバのini設定に依らず一定の値を返すことを前提にしています。 ・EnumChannelName(dwSpace, 0)がNULLを返す場合は、ドライバのini設定で該当チャンネル空間が無効に 設定されていると判断します。 version 2.2.11.* (2008/12/06) ・クライアントが異常なTS送信要求コマンドを送ってきた時にログに残すようにしました。 ・ドライバから取得したTSデータをバッファリングするルーチンを書き直しました。 ・徐々に共通インターフェースを使用するように書き換えています。 version 2.2.10.* (2008/12/05) ・シングルコアのマシンで動作させた時に、クライアントが切断するとThreadInterruptException例外が 発生する場合がある問題を修正しました。 ・クライアントを強制切断した時に接続クライアント数が減っていなかったバグを修正しました。 version 2.2.9.* (2008/12/04) ・TSDataLinkを確立する前に排他的チャンネルコントロールが取得できるかチェックするように修正しました。 ・(2.2.8.0)の動作をiniファイルで制御できるようにしました。 ・設定方法はSpinel.ini.defaultのEpgDataCapBonWithPT1WorkaroundLevelを参照して下さい。 記述がなかった場合のデフォルト値は1です。 ・TSパケットの捨て方も(2.2.8.0)と若干変えました。 ・(2.2.8.0)では600ミリ秒Sleepした後PurgeTsStreamを呼び出していましたが、 今回は600ミリ秒Sleepしてから、(溜まっているTSパケット数 - 1)回だけGetTsStreamすることで パケットを捨てるようにしました。 ・個人的にはこのworkaroundはさして意味が無いような気がします。 環境によってEpgDataCap_Bonが番組情報の取得に失敗するのはSpinelが生まれる前から知られた挙動です。 この時にEpgDataCap_BonのUDP視聴ができればSpinelからのTS送信はうまくいっています。 ただし視聴できない場合でも、EpgDataCap_BonのUDP送信スレッドやTS解析スレッドが止まっている 可能性があるので、一概にSpinel側のトラブルかどうかは判断できません。 ・EpgDataCap_Bonのソースを追うよりは新verのEpgDataCap_Bonに期待したいなというのが正直なところです。 ・↑でiniに記述が無かった時の初期値が1になっていなかったので修正しました。 version 2.2.8.* (2008/12/02) ・EpgDataCap_BonからPT1のチャンネル変更をした場合のみ、600ms分のパケットを捨てるようにし、 捨て終わるまで制御を返さないようにしました。 ・(2.1.6.0)と(2.2.4.1)の折衷です。 EpgDataCap_Bonでのチャンネル変更に最低600msかかるようになります。(HDUS並) ・こちらの環境では(2.2.4.1)のままでも何の問題もなく週20本程度の予約録画をこなしており、 他のデバイスで同様の問題が起こっていない点と、Spinel抜きでも問題が発生するケースがあることを 考えると、環境依存なPT1ドライバ自体の問題だと思います。(特にPT1Ctrl.exeが落ちるケース) version 2.2.7.* (2008/11/29) ・Friioでも常にKeepChannelOnClosed機能がOFFになるように修正しました。 version 2.2.6.* (2008/11/28) ・Traceクラス経由ではなく直接DefaultTraceListenerクラスを使ってログを記録するように修正しました。 version 2.2.5.* (2008/11/26) ・ドライバの読み込み前にSpinelのプロセス優先度を「通常以上」に変更するように修正しました。 ・以前は読み込み後に変更していました。 version 2.2.4.* (2008/11/26) ・指定したデバイスのClose時に、選局されていたチャンネルを記憶しておく機能を追加しました。 ・設定方法はSpinel.ini.defaultのKeepChannelOnClosedを参照して下さい。 ・TVTestで「起動時に前回終了時のチャンネルを表示する」をONにしている時などに映像表示が早くなります。 ・機能を有効にしたデバイスの電源をOFFにした場合はSpinelを再起動する必要があります。 ・というかそんな使い方はしないで下さい。抜き差しする時はSpinelを終了させて下さい。 ・Close時にデバイスが初期化されるものでは誤動作します。PT1は常にこの機能がOFFになります。 ・試験的な機能なので問題が出ればOFFにして下さい。 HDUSではUSBケーブルを抜かない限り大丈夫でした。 ・(2.1.6.0)の修正を無効化しました。 ・EpgDataCap_BonがTSIDを見失いEPG取得に失敗するためです。 ・EpgDataCap_Bonは選局後しばらく経ってからデータが流れてくる事を想定しておらず、 そのあたりでTSID取得処理に問題が出ているような気がします。 version 2.2.3.* (2008/11/25) ・通常ウィンドウ時にトレイアイコンを左クリックすると最小化できるように修正しました。 version 2.2.2.* (2008/11/24) ・最小化起動オプションを実装しました。 コマンドライン引数に -WindowState=Minimized を付けて下さい。 version 2.2.1.* (2008/11/23) ・MutexがGCによって回収されて二重起動を防止できなくなっていたバグを修正しました。 ・トレイアイコン化のアルゴリズムを変更しました。 ・トレイアイコン化した時にAlt+Tabの一覧に現れなくなりました。 version 2.2.0.* (2008/11/16) ・BonDriver_PT1-ST(人柱版3)に対応しました。 ファイル名についてはドライバ側の説明に準拠します。 複数台に対応できるはずです。 version 2.1.6.* (2008/11/16) ・チャンネル切り替えをTS受信スレッド上で実行するようにし、 さらにPT1の場合は切り替え後600ms分のTSパケットを破棄するようにしました。 ・チャンネル切り替え自体は120ms程度で完了し、その後600ms経ってからTSが流れてくる感じになります。 ・TVTestだけ毎回5000パケくらいエラーが出て(この辺はBonDriver_PT1-STをそのまま使っても同じ) チャンネル切り替えでたまにフリーズしていたのですが、この一手間で改善するかもしれません。 ・WaitOneで落ちていた問題を対処しました。 ・.NET Framework 2.0 SP2 か .NET Framework 3.5 SP1を入れていると発生しません。 version 2.1.5.* (2008/11/16) ・ドライバを破棄した後でSetChannelが呼び出されると問題がある可能性があったので修正しました。 ・BonDriver_PT1-T1用なのにBonDriver_PT1-T0のドライバを読み込んでいたバグを修正しました。 ・このためドライバの参照カウントがおかしくなっていました。 おそらくver2.1.1.3やver2.1.4.2でのAccessViolationはこれが原因です。 ・forループの変数にiとjを併用するのは金輪際やめにします。 version 2.1.4.* (2008/11/15) ・BonDriver_PT1-STでチャンネル切り替え時にAccessViolationが起こるバグを修正しました。 ・今までのドライバが全てそうだったので、返されたブロックがチャンネル切り替え後に deleteされないことを前提にしていました。 ・パフォーマンス的によくないのですが、GetTsStreamとSetChannelが同時に呼ばれないように排他制御しました。 ・アプリでPT1のチューナ切り替え(つまりT0をCloseしてからすぐにT1をOpenする行為)をすると、 PT1Ctrl.exeが終了したまま再起動しなくなるため、チューナのClose時にドライバも破棄するようにしました。 ・元々BonDriver_PT1-STの想定した使い方ではないのでタイミングが合わないのでしょう。 個人的にはPT1Ctrl.exeは常駐していても構わないと思うのですけども。 ・ポーリング間隔を地上Dは30ms、BS/CSは20msに一律に変更。 ドライバがデータを返す限り休まないので、基本的に取りこぼすことは無いはずです。 ・選局した時にチャンネル番号を覚えておくつもりがしてなかったので修正しました。 ・(2.1.4.0)のlock範囲が不十分だったので修正。 ・そもそもドライバへのSetChannel呼び出し自体をRecvThreadにマーシャリングすべき? version 2.1.3.* (2008/11/14) ・クライアントが強制終了した場合など通信リンクが切断された場合、 クライアントを自動的に切断処理するコードを適用しました。 ・(2.1.1.2)とは少し処理を変えてみました。 ・というか録画プロセスを無条件にkillする乱暴な処理はやめてほしいです。 version 2.1.2.* (2008/11/13) ・ソースを2.1.0.2まで戻してBonDriver_PT1-ST向けの修正(2.1.1.0の一部)と、 SetChannelログ記録(2.1.1.1)のみを適用しました。 ・ドライバ側のチャンネル情報は完全に信用しないコードになりました。 0dBになる不具合は対処できているはずです。 ・強制終了に対応するコード(2.1.1.2)は一切入れていないので、こいつとのコラボ現象かもしれません。 なんにせよHDUSでは何ともないので、PT1が買えるまで強制終了対応は保留させて下さい。 ・予期しない例外が発生した場合、ダイアログ表示とログ記録を行うように修正しました。 version 2.1.1.* (2008/11/13) ・チューナのOpenとCloseに合わせて、ドライバ自体もロード/アンロードするようにしました。 ・Closeで機器自体のチャンネル番号が初期化されるのに、再Open後に現在のチャンネル番号を取得すると Close前のチャンネル番号を返すドライバに対する対処です。 ・このようなドライバでは選局自体が既に完了しているものとして、 ドライバに対して選局リクエストを行っていませんでした。 ・ちなみにHDUSでは(検証していただいた中ではFriioも)こういった現象は一度も無く、 Closeで機器が完全に初期化されてしまうのはPT1が初かもしれません。 ・細かな検証テストを行っていただいたPT1スレrev16 699さんに感謝いたします。 ・実際にドライバに対してSetChannelした時はログに残すよう修正しました。 ・クライアントが強制終了した場合など通信リンクが切断された場合、 クライアントを自動的に切断するようにしました。 ・ドライバのロード/アンロードを一旦やめました。 ・PT1で複数チューナを使うと落ちる人は直るかもしれません。 あとこのような場合は完全なSpinel本体とBonDriver側のログ両方を上げていただけると助かります。 version 2.1.0.* (2008/11/12) ・BonDriver_Siro/BonDriver_Kuro/BonDriver_HDUSの複数読み込みに対応しました。 ・BonDriver_PT1.dllの対応を打ち切りました。 ・OpenTunerで初期チャンネルを設定しないのに、 有効なチャンネル(0,0)を返すドライバに対して対処を行いました。 version 2.0.4.* (2008/11/11) ・チューナを必要に応じてOpen/Closeするように戻しました。 version 2.0.3.* (2008/11/10) ・クライアントの強制切断時に例外が発生することがあるバグを修正しました。 ・クライアント接続、切断時のログを増やしました。 ・ログ記録にTrace.WriteLineを使うように修正。 version 2.0.2.* (2008/11/09) ・BonDriver_PT1-ST を読み込めるようにしました。BonDriver_PT1より優先されます。 version 2.0.1.* (2008/11/09) ・BonDriverが返すバッファサイズが188*512でない時、バッファリングがおかしくなるバグを修正しました。 HDUS以外で派手にドロップが発生していました。 ・BonDriver_PT1 v1.24の場合はポーリング間隔を15ms(地上)/10ms(衛星)とするように変更しました。 version 2.0.0.* (2008/11/08) ・TS送信ルーチンを全て書き直し、CPU負荷が大幅に低下しました。 ローカルマシンの場合は名前付きパイプ、ネットワーク越しと思われる接続にはTCP/IPを使用します。 サーバIPがlocalhost or 127.0.0.1、または両者が同じマシン名だとローカルと判断します。 ルータが割り振ったアドレス(192.168.1.10など)ではローカルと認識しないので注意して下さい。 version 1.0.11.* (2008/11/05) ・BonDriver_PT1がver1.22より古い場合は読み込まないようにしました。 ・BonDriver_PT1がver1.22の場合はポーリング間隔を40msにするようにした。 ・HDUSのポーリング周期を32msに変更した。 ・サーバ側で固定バッファにドライバからのTSデータを書き込むようにした。 .NETの世代式GCは元々性能が良いので改善されたかどうか不明です。 version 1.0.10.* (2008/11/04) ・チューナ受信スレッドのCPU使用効率が向上しました。 ・Uniden DT300に対応(BonDriver_U3IDx.dll使用) ・デバイスごとにドライバのポーリング間隔を変えるようにしました。 ほとんどが10msで、HDUSが16ms、PT1が6ms(約170回/秒)になっています。 ・WaitDataを呼び出さなくても、TS送信ブロックサイズが512*188バイト付近になるようにしました。 version 1.0.9.* (2008/11/03) ・デバイス名称をUniden DT400からMASPRO DT400に変更しました。(読み込むDLLもBonDriver_D4IDx.dllに変更) ・クライアントが居ないときはBonDriverからデータを取り出さないように修正しました。 そのままだとBonDriver側のキューにデータが溜まりすぎるので3秒おきにFlushします。 ・TS送信ブロックサイズが512*188バイト付近になるようにしました。 ・↑のサイズになる前にWaitTsStreamが送信準備完了を返していたので修正しました。 ・適当実装の統計情報と、WaitTsStream(30)をやめて、 BonDriverに4個以上データが溜まるまでSleep(10)しながら待つようにしました。 ・BonDriver_Spinelに返す残りデータブロック数がおかしかったので修正しました。 ・もうちょっと統計情報を詳しく表示するよう修正しました。 ・ドライバからのデータ取り出し頻度を180-200回にしました。 ・ドライバからのデータ取り出し頻度を約170回/秒を維持するようにしました。 BonDriver_PT1 v1.23以外では明らかに無駄なので今後手を考えます。 version 1.0.8.* (2008/11/02) ・クライアントを強制切断できるよう修正しました。 ・Uniden DT400に対応(BonDriver_U3IDx.dll使用) ・PT1のチューナ構成をiniから指定できるように修正しました。 Spinel.ini.defaultを参照して下さい。 何も指定しないと4チューナ構成になります。 version 1.0.7.* (2008/11/02) ・クライアントが接続している時は終了時に確認ダイアログを出すように修正しました。 version 1.0.6.* (2008/11/01) ・BonDriver_Siroのロードができていなかったバグを修正。 コピペミスのエンバグでした。 ・ドライバが正常にロードできなかったり、例外が発生した時にログを記録するように修正しました。 version 1.0.5.* (2008/11/01) ・トレイアイコンにバルーン通知機能を追加しました。 クライアント接続の失敗などエラーが通知されます。 ・終了時にチューナが全て閉じるまでウィンドウを閉じないように修正しました。 Windows終了時はすぐに閉じます。 ・ログをLogフォルダに、現在の日付を付けたファイル名で生成するように修正しました。 起動中にLogフォルダを消さないで下さい。 ・スタンバイ状態や休止状態に入るときにSpinelを自動終了させるよう修正しました。 version 1.0.4.* (2008/11/01) ・x86を明示的に指定してコンパイルし直しました。 WOW64が正常に働き、x64環境で動作する可能性があります。 version 1.0.3.* (2008/11/01) ・排他的チャンネルコントロールを実装しました。 EpgDataCap_Bonは必ずこのモードで使用しないとEpgDataCap_Bonがバグります。 BonDriver_Spinelのiniを必ず確認して下さい。 version 1.0.2.* (2008/11/01) ・Friio 白/黒を1台のみサポートしました。 ・HDUSを1台のみのサポートに変更しました。 BonDriver_HDUSが1プロセスにつき1つのHDUSしか制御させてくれないためです。 ・起動時に全てのチューナを開くようにし、初期化できなかったものはエラー表示するようにしました。 休止やサスペンドが行えなかったり、復帰後にチューナーが使えないかもしれません。 ・PT1だけクライアント表示とログ記録がされなかったバグを修正しました。 どう見てもコピペミスでした。ご協力いただいた方大変申し訳ありません。 これで不具合の原因が分かるようになったかもしれません。 version 1.0.1.* (2008/11/01) ・チューナオープン時にチャンネルを(dwSpace=0,dwChannel=0)に設定しないようにしました。 初期チャンネルはBonDriver依存になりました。 ・チャンネル切り替え時にその要求を行ったクライアントの受信キューをクリアするように修正しました。 ・チューナーのオープン/クローズとクライアントの追加/削除をログ記録するように修正しました。 ファイル名はlog.txtです。(ver1.0.1.2) ・ログ記録が不十分だったので修正しました。(ver1.0.1.3) version 1.0.0.0 (2008/10/31) ・初回リリース