« TVTest 0.8.1のビルド方法 | トップページ | 2013年10月~2015年3月の質問/コメント »

2013/09/27

TVH264_SPHD 0.8.1のビルド方法

2013/9/20に、TVTestの新バージョン0.8.1ソースプログラムが、デジタル放送汎用視聴プログラム実装研究資料として、https://github.com/DBCTRADO/TVTest のホームページに公開された(2013/9/25にわずかな修正有り)。

 昨年9月に公開されたバージョン0.8.0は、不具合等が多数あったが、新バージョンになって動作も安定してきており、かつスカパープレミアムで使うと便利な新機能も搭載されているので、そろそろTVTest及びTVH264_SPHDのバージョンアップをお勧めする。
特に、バージョン0.8.0から追加された、「チャンネルスキャンの方法を変更」機能により、放送休止中のチャンネルもスキャンできるようになった。これまでは放送休止中の時間を避けてスキャンしないと、放送波が検出できなかったが、本機能によりその問題が解決されている。
但し公開されているのはソースコードのみであり、実行形式のファイルは含まれていない。かつ実用的に用いるためには自分でソースコードを修正してからビルドしなおす必要がある。
従い、別ページにて解説したTVTest0.8.1のビルド方法に続き、このページでは、TVH264_SPHDの修正方法、ビルド方法、TVCAS_attachmentをB1decorderに対応させる方法、を解説する。
(あわせてTVH264_SPHDのバージョンアップ方法Windows8への対応方法TVTest 0.8.1のビルド方法 の記事も参照願います。)


TVH264_SPHD (0.8.1)のビルド方法

[用意+インストールするもの]
 ・TVTest 0.8.1ソース。(デジタル放送汎用視聴プログラム実装研究資料のサイトから入手。ホームページのソースファイルを1個ずつダウンロードするのではなく、右側のカラムにある、「Download ZIP」のボタンをクリックしてZIPファイルを入手し、解凍する。)
 ・TVCAS_attachment ソース(複数のサイトからダウンロードできるようなので、 tvcas_attachment_20120915.7z などの名前で検索してみてください)。
 ・TVTest 0.8.0ソース(複数のサイトからダウンロードできるようなので、頑張って探してみてください)。一部のソースコードを旧バージョンのものと入れ替える必要があるため、旧バージョンのソースも必要となる。
 ・Windows SDK for Windows 7 (「DirectShow BaseClasses」のビルドのため。マイクロソフトの当該サイトから入手)
 ・faad2-2.7.zip (FAAD2 Source をAudioCoding.comから入手)
 ・(参考)TVH264_SPHD_053.zip に含まれている、Src_s33フォルダ内の各ファイル(修正箇所を確認する際に役立つ)。 (⇒複数のサイトからダウンロードできるようなので、頑張って探してみてください)
 ・Visual Studio 2010 (以下VS2010)
※VS2010は、Express EditionだとMFCに対応していないので、Professional Editionが必要。VS2010 Professional 無料版の入手方法等は、Visual Studio 2010(VS2010)の入手方法として別記事にまとめた。

[手順]
1. 【「FAAD2」(libfaad.lib)】をビルド
  "faad2-2.7.zip"を展開、"frontend\faad.sln"をVS2010で開いて(途中、変換ウィザードが出る)ビルドする。
2. 【「DirectShow BaseClasses」(strmbasd.lib strmbase.lib)】をビルド。
  デフォルトでは "Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses" フォルダにある"baseclasses.sln"を開いてビルドする。
3. TVTest 0.8.1ソースが含まれた、"TVTest-master.zip"を展開する。
4. TVTest0.8.0のソースファイルから、
 BonTsEngine\CasProcessor.cpp
 BonTsEngine\CasProcessor.h
 の2ファイルを抜き出し、TVTest 0.8.1ソースのBonTsEngineフォルダーにある同名のファイルに上書きコピーする。
 またtvcas_attachmentのソースファイルから、
 TVCAS\TVCAS.h
 のファイルを抜き出し、TVTest 0.8.1ソースのBonTsEngineフォルダーにコピーする。
5. TVTest0.8.1のソースファイルの、 DtvEngine\DtvEngine.cpp に、 http://pastebin.com/Jw5FJrLE の修正を適用する。
6. ChannelScan.cpp の1601行に、下記の4行を挿入。
(2013/9現在、差分ファイルは、http://www2.wazoku.net/2sen/dtvvup/source/TVH264_SPHD_0.8.x.diff.txtから入手可能)

// for SPHD s 用変更
} else if (NetworkID==10 && ServiceID>32700) {
RemoteControlKeyID=ServiceID-32768;
// for SPHD s 用変更

7. TVTest.rc の805行を、下記のようにコメントアウトする。

// for SPHD s 用変更
// AUTOCHECKBOX "契約情報の更新(EMM処理)を行う(&M)",IDC_OPTIONS_ENABLEEMMPROCESS,8,204,136,9

8. TVTest.rc の734行にあるバージョン表示情報を、下記を参考に修正する。

// for SPHD s 用変更
CTEXT "デジタル放送総合技術研究開発機構\r\nオリジナル作者: 拡張ツール中の人 氏\r\n改造版作者: Meru-co氏\r\n\r\nTVH264 for SPHD ver.0.2.1 by DTV板スカパーHDスレ2 の 359 氏\r\nTVH264 for SPHD ver.0.5.3 (0.7.22) s33 by forepaw.",IDC_ABOUT_INFO,72,32,144,32,SS_OWNERDRAW

9. VS2010で、TVTest.slnを開く。
10. TVH264_HDのプロジェクト名をTVH264_SPHDに変更。
11. TVH264プロジェクトのプロパティを開き、上記"baseclasses"フォルダを「追加のインクルードディレクトリ」に加える。また、同フォルダにある"Release" フォルダ、および"libfaad.lib"が生成されたフォルダを「追加のライブラリディレクトリ」に加える。
12. TVH264_SPHDをビルド。
(注)
 ※ビルドの際、LNK2005エラーが解決できなかったら、VS2010設定のプロパティにある、「C/C++」の「コード生成」メニューにて、「ランタイムライブラリ」の項目が一致しているか再度確認。【faad.sln】、【baseclasses.sln】、【Test.sln】の設定を全て、「マルチスレッドDLL8/MD)」などで統一する。
 ※ビルドの際、VS2010はデフォルトだとDebugを実行する設定になっている。メニューが「Debug」になっていたら「Release」に変更した後、「ビルド」-「ソリューションのビルド」を選択、実行するとexeファイルが Release フォルダーに生成される。

 以上でTVH264_SPHD 0.8.1の修正完了。
 下記の修正で作成される TVCAS_B1.tvcas ファイルと併用することで、スカパープレミアムが視聴可能となる。


TVCAS_B1.tvcas のビルド方法

[用意+インストールするもの]
 ・TVCAS_attachment ソース(複数のサイトからダウンロードできるようなので、頑張って探してみてください)。
 ・TVCAS差分ファイル(2013/09現在、http://www2.wazoku.net/2sen/dtvvup/source/TVCAS_B25_SPHD.diff.txtから入手可能)

[手順]
1. TVCAS\Multi2Decoder.h の18行目にある、
 #define MULTI2_SIMD_ICC  の行をコメントアウト

2. ICC\Multi2Decoder\Multi2DecoderSIMD.cpp の2行目にある、
 "../../BonTsEngine/Multi2Decoder.h"
 を
 "../../TVCAS/Multi2Decoder.h"
 など、各自のフォルダー構成に合わせて正しい場所に修正

3. http://www2.wazoku.net/2sen/dtvvup/source/TVCAS_B25_SPHD.diff.txt の記載を参考に、
 TVCAS\CardReader.cpp を以下の通り修正(全角スペースはタブに置換して下さい)。

--- CardReader.cpp.orig
+++ CardReader.cpp
@@ -401,6 +401,19 @@
   return false;
  }

+// for SPHD
+  // 初期化コマンドでスカパーHD用CASカードかどうか確認
+  static const BYTE InitSettingCmd[] = {0x80U, 0x5EU, 0x00U, 0x00U, 0x00U};
+  BYTE tmp[256] ;
+  DWORD RecvSize = sizeof(tmp) ;
+  if ( !Transmit( InitSettingCmd, sizeof(InitSettingCmd), tmp, &RecvSize ) ||
+   RecvSize != 46 ) {
+   Close();
+   SetError(TEXT("スカパーHD用ではないカードです。"));
+   return false;
+  }
+// for SPHD
+
  LPTSTR pszReaderName;
  BYTE Atr[32];
  DWORD dwReaderLen = SCARD_AUTOALLOCATE, dwState, dwProtocol, dwAtrLen = sizeof(Atr);
@@ -907,7 +907,7 @@
 if (!GetLibraryFunc(m_hLib, pEstablishContext, "CasLinkEstablishContext")
 || !GetLibraryFunc(m_hLib, pListReaders, FUNC_NAME("CasLinkListReaders"))
 || !GetLibraryFunc(m_hLib, m_pCasLinkReleaseContext, "CasLinkReleaseContext")
-  || !GetLibraryFunc(m_hLib, m_pCasLinkConnect, "CasLinkConnect")
+  || !GetLibraryFunc(m_hLib, m_pCasLinkConnect, FUNC_NAME("CasLinkConnect"))
 || !GetLibraryFunc(m_hLib, m_pCasLinkDisconnect, "CasLinkDisconnect")
 || !GetLibraryFunc(m_hLib, m_pCasLinkTransmit, "CasLinkTransmit")) {
  ::FreeLibrary(m_hLib);

4. http://www2.wazoku.net/2sen/dtvvup/source/TVCAS_B25_SPHD.diff.txt の記載を参考に、
 TVCAS/CasCard.cpp を以下の通り修正(全角スペースはタブに置換して下さい)。

--- CasCard.cpp.orig
+++ CasCard.cpp

@@ -183,7 +183,9 @@
 BYTE RecvData[RECEIVE_BUFFER_SIZE];

 // 初期設定条件コマンド送信
- static const BYTE InitSettingCmd[] = {0x90U, 0x30U, 0x00U, 0x00U, 0x00U};
+// for SPHD s 用変更
+// static const BYTE InitSettingCmd[] = {0x90U, 0x30U, 0x00U, 0x00U, 0x00U};
+ static const BYTE InitSettingCmd[] = {0x80U, 0x5EU, 0x00U, 0x00U, 0x00U}; //
INITIAL_SETTING_CONDITIONS_CMD {CLA, INS, P1, P2, P3}
 ::ZeroMemory(RecvData, sizeof(RecvData));
 dwRecvSize = sizeof(RecvData);
 TRACE(TEXT("Send \"Initial Setting Conditions Command\"\n"));
@@ -192,11 +194,15 @@
  return false;
 }

- if (dwRecvSize < 57UL) {
+// for SPHD s 用変更
+// if (dwRecvSize < 57UL) {
+ if (dwRecvSize < 46UL) {
  SetError(ERR_TRANSMITERROR, TEXT("受信データのサイズが不正です。"));
  return false;
 }

+// for SPHD s 用変更
+/*
 // レスポンス解析
 m_CasCardInfo.CASystemID = ((WORD)RecvData[6] << 8) | (WORD)RecvData[7];
 ::CopyMemory(m_CasCardInfo.CardID, &RecvData[8], 6);  // +8 Card ID
@@ -233,6 +239,13 @@
  SetError(ERR_TRANSMITERROR, TEXT("カードIDが不正です。"));
  return false;
 }
+*/
+ // レスポンス解析
+ m_CasCardInfo.CASystemID = ((WORD)RecvData[0] << 8) | (WORD)RecvData[1]; // +0 CA System ID
+ ::CopyMemory(m_CasCardInfo.CardID, &RecvData[2], 6UL);     // +2 Card ID
+ ::CopyMemory(m_CasCardInfo.SystemKey, &RecvData[8], 32UL);     // +8 Descrambling system key
+ ::CopyMemory(m_CasCardInfo.InitialCbc, &RecvData[8], 8UL);     // +8 Descrambler CBC initial value
+// for SPHD s 用変更

 // ECMステータス初期化
 ::ZeroMemory(&m_EcmStatus, sizeof(m_EcmStatus));
@@ -407,7 +420,9 @@
 }

 // バッファ準備
- static const BYTE EcmReceiveCmd[] = {0x90, 0x34, 0x00, 0x00};
+// for SPHD s 用変更
+// static const BYTE EcmReceiveCmd[] = {0x90, 0x34, 0x00, 0x00};
+ static const BYTE EcmReceiveCmd[] = {0x80, 0x34, 0x00, 0x00}; // ECM_RECEIVE_CMD {CLA, INS, P1, P2}
 BYTE SendData[MAX_ECM_DATA_SIZE + 6];
 BYTE RecvData[RECEIVE_BUFFER_SIZE];
 ::ZeroMemory(RecvData, sizeof(RecvData));
@@ -426,6 +441,8 @@
  return NULL;
 }

+// for SPHD s 用変更
+/*
 // サイズチェック
 if (dwRecvSize != 25UL) {
  ::ZeroMemory(&m_EcmStatus, sizeof(m_EcmStatus));
@@ -459,11 +476,35 @@
 SetError(ERR_ECMREFUSED, ECM_REFUSED_ERROR_TEXT);

 return NULL;
+*/
+ // サイズチェック
+ if (dwRecvSize != 22UL) {
+  ::ZeroMemory(&m_EcmStatus, sizeof(m_EcmStatus));
+//  SetError(ERR_TRANSMITERROR, TEXT("ECMのレスポンスサイズが不正です。"));
+  SetError(ERR_ECMREFUSED, ECM_REFUSED_ERROR_TEXT);
+  return NULL;
+ }
+
+ // ECMデータを保存する
+ m_EcmStatus.dwLastEcmSize = dwEcmSize;
+ ::CopyMemory(m_EcmStatus.LastEcmData, pEcmData, dwEcmSize);
+
+ // レスポンス解析
+ ::CopyMemory(m_EcmStatus.KsData, &RecvData[0], sizeof(m_EcmStatus.KsData));
+
+ // 正常終了
+ ClearError();
+ return m_EcmStatus.KsData;
+// for SPHD s 用変更
+
}


const bool CCasCard::SendEmmSection(const BYTE *pEmmData, const DWORD dwEmmSize)
{
+
+// for SPHD s 用変更
+/*
 // 「EMM Receive Command」を処理する
 if (!m_pCardReader) {
  SetError(ERR_CARDNOTOPEN, CARD_NOT_OPEN_ERROR_TEXT);
@@ -516,6 +557,10 @@
  SetError(ERR_EMMERROR, TEXT("EMMが受け付けられません。"));
  break;
 }
+*/
+// for SPHD s 用変更
+
+ SetError(ERR_EMMERROR, TEXT("EMMが受け付けられません。"));

 return false;
}

5. http://www2.wazoku.net/2sen/dtvvup/source/TVCAS_B25_SPHD.diff.txt の記載を参考に、
 TVCAS/TsDescrambler.cpp を以下の通り修正(全角スペースはタブに置換して下さい)。

--- TVCAS/TsDescrambler.cpp.org
+++ TVCAS/TsDescrambler.cpp
@@ -1221,7 +1221,11 @@
 if (PayloadSize < MIN_ECM_DATA_SIZE || PayloadSize > MAX_ECM_DATA_SIZE)
  return false;

+// for SPHD s 用変更
+/*
 // ECMが変わったらキー取得が成功するまで無効にする
+ // (最初ECM本体のKsが変化したか比較するようにしたが、
+ //  ECM本体とECM応答のKsの変化は一致するわけではない)
 m_Multi2Lock.Lock();
 if (m_LastChangedKey == 1) {
  m_bEvenKeyValid = false;
@@ -1229,6 +1233,7 @@
  m_bOddKeyValid = false;
 }
 m_Multi2Lock.Unlock();
+*/

 // 前のECM処理が終わるまで待つ
 if (!m_EcmProcessEvent.IsSignaled()) {

6. TVCAS\TVCAS_B25.h の14行目を、以下のように修正する。

// for SPHD s 用変更
//#define TVCAS_MODULE_NAME  "TVCAS B-25"
#define TVCAS_MODULE_NAME "TVCAS B-1"
// for SPHD s 用変更

7. TVCAS\TVCAS_B25.h の16行目を、以下のように修正する。

// for SPHD s 用変更
//#define TVCAS_MODULE_ORIGINAL_FILE_NAME "TVCAS_B25.tvcas"
#define TVCAS_MODULE_ORIGINAL_FILE_NAME "TVCAS_B1.tvcas"
// for SPHD s 用変更

8. TVCAS\TVCAS_B25.def のファイル名を、 TVCAS_B1.def に変更する。
9. TVCAS\CardReader.h の4行目に、以下の2行を追加する。

 #define CARDREADER_SCARD_DYNAMIC_SUPPORT
 #define CARDREADER_BONCASCLIENT_SUPPORT

10. TVCAS\TVCAS.sln を開く。
11. TVCAS_B25 のプロジェクト名を TVCAS_B1 に変更。
12. TVCAS_B1をビルドすると、 TVCAS_B1.tvcas ファイルが生成される。



 質問/コメント等はこちらへ 
 2013年10月~2015年3月の質問/コメント 
 2012年12月~2013年9月の質問/コメント 
 2012年7月~11月の質問/コメント 
 2012/6以前の質問/コメント 
 FAQ 
 スカパー!プレミアムサービス録画TIPS 

 解説のページへ戻る 

« TVTest 0.8.1のビルド方法 | トップページ | 2013年10月~2015年3月の質問/コメント »

パソコン・インターネット」カテゴリの記事

トラックバック


この記事へのトラックバック一覧です: TVH264_SPHD 0.8.1のビルド方法:

« TVTest 0.8.1のビルド方法 | トップページ | 2013年10月~2015年3月の質問/コメント »

facebook

  • ブログ内検索

関連商品

  • スカパープレミアムチューナー
  • スカパープレミアムチューナー
  • アンテナ
  • カードリーダー     リモコン
  • ラインブースター 地デジ/BS/CSチューナー
  • スカパーHD用チューナー

バナー

無料ブログはココログ

What's New

  • 2016/01/01 MultiSwitch解説追加。
    2015/12/29 VS2015でのビルド追記。
    2015/12/27 PX-TBS6982用BonDriverの解説追加。FAQの記載更新。
    2015/12/26 4K用H.265デコーダ更新。
    2015/06/26 質問ページのリンク修正。
    2015/05/10 VS2013ビルド方法更新。
    2015/04/29 VS2013ビルド方法追加。
    2015/04/19 スマホ視聴の記事更新。
    2015/04/12 4月の質問が公開されていなかった。2015/3のChSet4リンク修正。
    2015/04/04 TvRemoteViewer_VB更新
    2015/04/01 質問/コメントを分割。
    2015/03/29 スマホ視聴の記事更新。
    2015/03/28 3/1の4K局追加に対応。
    2015/03/08 スマホでの視聴法追加。
    2015/03/08 TVTest0.9記事一部更新。
    2015/03/07 TVTest0.9.0(2014/12/1以降Ver.)ビルド解説。
    2014/10/01 10/1周波数移動に対応。
    2014/09/26 9/25周波数移動に対応。
    2014/08/23 chset4,chset5誤り修正。
    2014/08/19 8/19周波数移動に対応。
    2014/07/20 TBSDTVとPLEXのリンク切れ更新。windows8用ドライバー更新
    2014/07/05 8-9月ch変更情報追記。
    2014/06/30 6/30周波数移動に対応。
    2014/06/24 6/24周波数移動に対応。
    2014/06/22 TVTest0.9.0ビルド解説。
    2014/05/25 4K放送視聴録画法追加。
    2014/05/11 TVTest0.8.2ビルド解説。
    2014/04/20 4/1のch追加変更対応。
    2014/03/21 PX-TBS6985リンク追加。
    2014/02/02 BonCasServiceのWindows8登録方法を追記。
    2013/11/28 11/12のch変更に対応。
    2013/11/01 chset4.txtの誤り修正。
    2013/10/01 10/1のch追加に対応。
    2013/09/28 質問/コメントを分割。
    2013/09/27 TVH264_SPHD0.8.1追加。
    2013/09/26 TVTest0.8.1作成法追加。
    2013/08/07 GrabTsForBD.dllの検索方法に関する情報更新。
    2013/07/14 6~7月の変更情報追加。
    2013/05/18 「旧スカパーSDを録画・視聴するには」に説明画像追加。FAQ更新
    2013/04/28 FAQに記事追加。
    2013/04/13 4/1のch変更情報追加。
    2013/03/02 TVTestバグ修正法追記。
    2013/02/24 2/23,4/1変更情報追加。
    2013/02/23 TMSR4のVer.UPでCM検出機能が追加された旨追記。
    2013/02/10 TIPSにBS放送とのファイルサイズ比較記事を追加。
    2013/01/17 ICカード入手法の記事に、HDチューナー無償配布の説明追記。
    2013/01/07 FAQに最近の質問追加。
    2013/01/06 各種TIPSの記事追加。
    2012/12/22 ICカードの入手法追加。
    2012/12/08 KB2770917対処法追加。
    2012/11/30 質問/コメントを分割。
    2012/11/24 Windows8対応方法追加。
    2012/11/23 TMSR4のレポート追加。
    2012/11/22 TVH264_SPHDをビルドする時のLNK2005エラー対処法を修正。
    2012/10/08 スカパーHDからスカパー!プレミアムサービスに名称変更。
    2012/09/23 9/29,10/1変更情報追加。
    2012/09/20 9/19試験放送情報追加。
    2012/09/17 9/14の電波変更に対応。
    2012/09/16 HD用アンテナ情報追加。
    2012/08/21 facebook「いいね!」追加。
    2012/08/18 TMSR4新発売情報追加。
    2012/08/11 ブログのタイトル変更。
    2012/07/15 2senミラーサイト追加。
    2012/07/12 TBS6984と5922追加。
    2012/07/01 質問/コメントを更新。
    2012/06/30 FAQの記述を追加。
    2012/06/24 ブログデザイン変更。
     FAQを記事にまとめた。
     TVH264_SPHDで使えるリモコンを紹介。
     2senのリンク切れ更新。