もしかするとこのドキュメントは古いかもしれません。
TVTestは15907d5c1c5125e1b8b4f4ccfeef7388cafcc27bを使用しています
TVTest is 何
デジタル放送汎用視聴プログラム実装研究資料(略称 TVTest)は、パーソナルコンピュータ上において、デジタル放送の視聴を行うプログラムの実装を研究する目的で頒布される研究資料です。
この資料は MPEG-2 TS を扱うための基本的な機能を実装しています。 CAS 処理は実装されていないため、一般のテレビ放送を視聴することはできません。
TVTest/README.md at master · DBCTRADO/TVTest
必要な物
- Microsoft Visual Studio Professional 2013
- Microsoft Windows SDK for Windows 7 and .NET Framework 4
winsdk_web.exe
- TVTest Source
- FAAD2
faad2-2.7.zip
- libjpeg
jpegsr6b.zip
- libpng
lpng169.zip
- zlib
zlib128.zip
- HTML Help Workshop
htmlhelp.exe
libjpegは6bでないとスムーズに事が進まないので旧バージョンを使用。
それぞれダウンロードし、今回はデスクトップに全部置いておきます。
なお、VS2013でのビルド方法なのでVS2012とかはちょっと不明です。だいたい同じだと思いますが…。
一番最後の HTML Help Workshop はヘルプファイル作成のために必要です。
無くても TVTest.exe
のビルドは可能です。
BaseClasses ライブラリのビルド
BaseClasses ライブラリが必要なので、 Microsoft Windows SDK for Windows 7 and .NET Framework 4 (以下 WindowsSDK 7.1)をインストール。
C++ 2010 Runtime等がインストールされているとインストールに失敗するおそれがあるので注意。
インストール時に必要なのはSampleのみ。
Visual Studioで開く (要管理者権限)
C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\baseclasses.sln
ソリューションエクスプローラ内の baseclasses を右クリックし、プロパティをクリック。
[構成プロパティ] -> [C/C++] -> [コード生成] -> [ランタイムライブラリ] を、マルチスレッドDLL (/MD) に変更。
ウィンドウ左上の [構成] を [Debug] から [Release] に変更し、ランタイムライブラリを再度 マルチスレッドDLL (/MD) に変更し、閉じる。
[ビルド] -> [ソリューションのビルド] をクリック -> ビルド
終了したらログを確認。
1> BaseClasses.vcxproj -> C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Debug\BaseClasses.lib
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
ウインドウ中央上部の [Debug] を [Release] に変更。
そして再度、[ビルド] -> [ソリューションのビルド] をクリック -> ビルド
終了したらログを確認。
1> BaseClasses.vcxproj -> C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Release\BaseClasses.lib
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
FAAD2 ライブラリのビルド
faad2-2.7.zip
を展開し、 faad2-2.7\frontend\faad.sln
を開く。
アップグレードダイアログが出てくるのでアップグレード。
ソリューションエクスプローラ内の libfaad2 を右クリックし、プロパティをクリック。
ウィンドウ左上の [構成] を [Debug] から [Release] に変更後、 [構成プロパティ] -> [C/C++] -> [コード生成] -> [ランタイムライブラリ] を、マルチスレッドDLL (/MD) に変更。
ウインドウ中央上部の [Debug] を [Release] に変更。
この状態でビルドするとエラーが出るので、エラーを潰す。
ソリューションエクスプローラ内の libfaad -> Header Files -> common.h をダブルクリックで開き、316行目を変更
#if defined(_WIN32) && !defined(__MINGW32__)
を
#if defined(_WIN32) && !defined(__MINGW32__) && _MSC_VER < 1700
ソリューションエクスプローラ内の libfaad を右クリック -> ビルド
ログを確認。
1> libfaad.vcxproj -> C:\Users\admin\Desktop\faad2-2.7\libfaad\.\Release\libfaad.lib
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
以下のディレクトリに libfaad.lib
が作成されていることを確認
C:\Users\admin\Desktop\faad2-2.7\libfaad\Release
TVTestのビルド
Githubからzipで落としてきたTVTestのソースを展開し、 TVTest-master\src\TVTest.sln
を開く。
ソリューションエクスプローラ内の TVTest を右クリックし、プロパティをクリック。
ウィンドウ左上の [構成] を [Debug] から [Release] に変更後、 [構成プロパティ] -> [C/C++] -> [コード生成] -> [ランタイムライブラリ] を、マルチスレッドDLL (/MD) に変更。
[構成プロパティ] -> [C/C++] -> [全般] -> [追加のインクルード ディレクトリ] に以下を追加。
C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses
[構成プロパティ] -> [リンカー] -> [全般] -> [追加のライブラリ ディレクトリ] に以下を追加。
C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Release
C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Debug
C:\Users\admin\Desktop\faad2-2.7\libfaad\Release
ウインドウ中央上部の [Debug] を [Release] に変更。
ソリューションエクスプローラ内の TVTest を右クリック -> ビルド
ログを確認。
1> TVTest.vcxproj -> C:\Users\admin\Desktop\TVTest-master\src\Win32\Release\TVTest.exe
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
TVTest_Imageのビルド
jpegsr6b.zip
, lpng169.zip
, zlib128.zip
を展開する。
TVTest_Image\libpng
に lpng169.zip
の中身を全て移動させる。
TVTest_Image\libjpeg
に jpegsr6b.zip
の中身を全て移動させる。
TVTest_Image\zlib
に zlib128.zip
の中身を全て移動させる。
TVTest_Image\libjpeg
内の jconfig.vc
を jconfig.h
にリネーム。
TVTest_Image\libpng\scripts
内の pnglibconf.h.prebuilt
を pnglibconf.h
にリネームし、 TVTest_Image\libpng
に移動
TVTest_Image\TVTest_Image_VS2010.sln
を開く
アップグレードダイアログが出てくるのでアップグレード。
このままビルドしてもエラーが出るので修正。
ソリューションエクスプローラ内の libjpeg -> ヘッダー ファイル -> jmorecfg.h をダブルクリックで開き、以下の箇所を変更(158行目付近)
/* INT32 must hold at least signed 32-bit values. */
#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */
typedef long INT32;
#endif
を
/* INT32 must hold at least signed 32-bit values. */
#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */
#include <basetsd.h>
#if 0
typedef long INT32;
#endif
#endif
変更し終わったら、ソリューションエクスプローラ内の TVTest_Image を右クリックし、プロパティをクリック。
ウィンドウ左上の [構成] を [Debug] から [Release] に変更後、 [構成プロパティ] -> [C/C++] -> [コード生成] -> [ランタイムライブラリ] を、マルチスレッドDLL (/MD) に変更。
ウインドウ中央上部の [Debug] を [Release] に変更。
ソリューションエクスプローラ内の TVTest_Image を右クリック -> ビルド
ログを確認。
4> TVTest_Image.vcxproj -> C:\Users\admin\Desktop\TVTest-master\src\TVTest_Image\..\Win32\Debug\TVTest_Image.dll
========== ビルド: 4 正常終了、0 失敗、0 更新不要、0 スキップ ==========
以下の場所に TVTest.exe
と TVTest_Image.dll
が存在するか確認。
C:\Users\admin\Desktop\TVTest-master\src\Win32\Release
適当なフォルダを作成し、 TVTest.exe
と TVTest_Image.dll
を避難させる。
C:\Users\admin\Desktop\TVTest
ヘルプファイルの作成
htmlhelp.exe
を実行し、インストール。
[スタート] -> [プログラム] -> [HTML Help Workshop] -> [HTML Help Workshop] をクリック。
[File] -> [Open] から TVTest-master\src\Help\TVTest.hhp
を開く。
[File] -> [Compile] からコンパイル。
ヘルプファイルが作成されていることを確認。
C:\Users\admin\Desktop\TVTest-master\src\Help\TVTest.chm
ヘルプファイルを以下の場所に移動させ終了。
C:\Users\admin\Desktop\TVTest
TVTest x64
x86でのビルドが成功した人向けです
BaseClasses ライブラリ
baseclasses.sln
を開き、[ランタイムライブラリ] を、マルチスレッドDLL (/MD) に変更。
Debug x64 / Release x64 でビルド
x64 Debug
1> BaseClasses.vcxproj -> C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\x64\Debug\BaseClasses.lib
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
x64 Release
1> BaseClasses.vcxproj -> C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\x64\Release\BaseClasses.lib
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
FAAD2 ライブラリ
faad.sln
を開き、画面中央の Debug をクリック、[構成マネージャ] -> [アクティブ ソリューション プラットフォーム] -> [プラットフォーム新規作成]
設定のコピー元 : Win32 で作成。
[ランタイムライブラリ] を、マルチスレッドDLL (/MD) に変更。
common.h
を開き、66行目のコメントを外す
#define USE_DOUBLE_PRECISION
その後、x64で Release ビルド。
1> libfaad.vcxproj -> C:\Users\admin\Desktop\faad2-2.7\libfaad\x64\Release\libfaad.lib
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
ただ、上記の場所にファイルが出力されていないので以下の場所を確認(x86版は上書きされます)
C:\Users\admin\Desktop\faad2-2.7\libfaad\Release\libfaad.lib
TVTest x64
TVTest.sln
を開き、Release x64 に変更
[ランタイムライブラリ] を、マルチスレッドDLL (/MD) に変更。
[構成プロパティ] -> [C/C++] -> [全般] -> [追加のインクルード ディレクトリ] に以下を追加。
C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses
[構成プロパティ] -> [リンカー] -> [全般] -> [追加のライブラリ ディレクトリ] に以下を追加。
C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\x64\Debug
C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\x64\Release
C:\Users\admin\Desktop\faad2-2.7\libfaad\Release
ソリューションエクスプローラ内の TVTestを右クリック -> ビルド
1> TVTest.vcxproj -> C:\Users\admin\Desktop\TVTest-master\src\x64\Release\TVTest.exe
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
TVTest_Image
TVTest_Image_VS2010.sln
を開き、 Release x64 に変更
ソリューションエクスプローラ内の TVTest_Image を右クリック -> アップグレード
[プロジェクト] -> [ビルド] でビルド
4> TVTest_Image.vcxproj -> C:\Users\admin\Desktop\TVTest-master\src\TVTest_Image\..\x64\Release\TVTest_Image.dll
========== すべてリビルド: 4 正常終了、0 失敗、0 スキップ ==========
TVTest.exe
を起動するとエラーが出る -> 大人の事情
348 名前:名無しさん@編集中[sage] 投稿日:2013/09/20(金) 01:09:27.00 ID:jz1ilbJn
・CCasProcessorのStub化
・「現在のサービスのみスクランブル解除する」設定機能の削除
・BonDriver専用のwinscard.dllを読み込む機能の削除
435 名前:名無しさん@編集中[sage] 投稿日:2013/09/20(金) 19:02:35.44 ID:VcZcAzFD
>>348の上から順に
0.8.0のCasProcessor.cpp・CasProcessor.hを上書きコピー
tvcas_attachmentのTVCAS.hを↑と同じフォルダにコピー
DtvEngine.cppにttp://pastebin.com/Jw5FJrLEの修正を適用
0.8.0のRecord.cpp・Record.h・RecordOptions.cpp・RecordOptions.hを上書きコピー
0.8.0のTVTest.rcの1162~1179行目を0.8.1のTVTest.rcの1167~1183行目に上書き
0.8.0のRecource.hの723行目を0.8.1のRecource.hの727行と728行の間に挿入
0.8.0のCoreEngine.cppの370~379行目を0.8.1のCoreEngine.cppの352行目と353行目の間に挿入
0.8.0のCoreEngine.cppの324~338行目を0.8.1のCoreEngine.cppの321行目と322行目の間に挿入
0.8.0のCoreEngine.hの69行目を0.8.1のCoreEngine.hの68行目と69行目の間に挿入
0.8.0のTVTest.cppの1071~1072行目を0.8.1のTVTest.cppの1082行目に上書き
--- TVTest_0.8.0_Src/DtvEngine/DtvEngine.cpp.orig
+++ TVTest_0.8.0_Src/DtvEngine/DtvEngine.cpp
@@ -75,36 +75,36 @@
↓
CTsAnalyzer
↓
+ CCasProcessor
+ ↓
CMediaTee──────┐
↓ ↓
- CEventManager CCasProcessor
+ CEventManager CCaptionDecoder
↓ ↓
- CLogoDownloader CCaptionDecoder
+ CLogoDownloader CMediaGrabber
↓ ↓
- CTsSelector CMediaGrabber
+ CTsSelector CMediaBuffer
↓ ↓
- CFileWriter CMediaBuffer
- ↓
- CMediaViewer
+ CFileWriter CMediaViewer
*/
Trace(TEXT("デコーダグラフを構築しています..."));
// デコーダグラフ構築
m_TsPacketParser.SetOutputDecoder(&m_TsAnalyzer);
- m_TsAnalyzer.SetOutputDecoder(&m_MediaTee);
+ m_TsAnalyzer.SetOutputDecoder(&m_CasProcessor);
+ m_CasProcessor.SetOutputDecoder(&m_MediaTee);
+ m_CasProcessor.EnableDescramble(bDescramble);
+ m_bDescramble = bDescramble;
if (bEventManager) {
m_MediaTee.SetOutputDecoder(&m_EventManager, 0);
m_EventManager.SetOutputDecoder(&m_LogoDownloader);
} else {
m_MediaTee.SetOutputDecoder(&m_LogoDownloader, 0);
}
- m_MediaTee.SetOutputDecoder(&m_CasProcessor, 1);
+ m_MediaTee.SetOutputDecoder(&m_CaptionDecoder, 1);
m_LogoDownloader.SetOutputDecoder(&m_TsSelector);
m_TsSelector.SetOutputDecoder(&m_FileWriter);
- m_CasProcessor.SetOutputDecoder(&m_CaptionDecoder);
- m_CasProcessor.EnableDescramble(bDescramble);
- m_bDescramble = bDescramble;
m_CaptionDecoder.SetOutputDecoder(&m_MediaGrabber);
if (bBuffering) {
m_MediaGrabber.SetOutputDecoder(&m_MediaBuffer);