////////////////////////////////////////////////////////////////////////////////////////////////////////
cap_sts sea
////////////////////////////////////////////////////////////////////////////////////////////////////////

チューナ内蔵(外付けも使用可)のB-CASリーダを用いたB25処理を実現します。リアルタイム視聴が可能です。
また、ffmpeg,vlc連携機能とスタンバイ機能が付いています。

!初めにやる事!
cap_sts_sea.ini.org	→	cap_sts_sea.ini
にリネームしてください。(既にある場合は必要なし)

////////////////////////////////////////////////////////////////////////////////////////////////////////

・使い方
	基本的に、コマンドプロンプトで操作します。
	付属のplay.exeや、TaskSchedulerHelper.exe等があれば、GUIで操作できます。

＜使い方＞ sea(009_3)
	cap_sts [ファイル名] [@チャンネル] [時間] [B] [I数値]
	  ファイル名：拡張子省略時は".ts2"。ファイル名省略時は"test.ts2"。
	              ファイル名後部に、"_年月日_時分秒_@チャンネル"が付きます。
	  P         ：開始時に電源ON制御を行う。
	  POFF      ：終了時に電源OFF制御を行う(外部からの停止時は行わない。
	  R数値(1-3)：チューナーのリモコン番号を指示。（チャンネルの前に指定）
	  チャンネル：地デジは"@1"〜"@12"。BSは"@B3"、CSは"@C2"、3桁指定も可。
	  時間      ：数値"30"で記録時間(分)。"19:00-19:30"で時刻指定。
	  B or B25  ：内蔵のB-CASリーダを使い、B25処理を行います。
	  I数値     ：対象のカメレオンFX2のIDを指定。省略時は0。
	  SEL       ：地デジではデータ放送の削除を行います。
	              BS/CSでCHの3桁指定時は、指定チャンネルのサービスのみを記録
	  STOP      ：現在動作中のcap_stsに終了要求を出します(録画等は行いません)
	  ADD 分    ：現在動作中のcap_stsの終了時間を指定分延長します
	  view      ：cap_sts_sea.iniに登録されたプレイヤーで視聴を行います。
	  vlc:[parm]：vlc経由で録画します。
	  ffmpeg:[parm]：ffmpeg経由で録画します。
  
////////////////////////////////////////////////////////////////////////////////////////////////////////

・内蔵のB-CASリーダーの使用

		B-CASストリームをバッファリングし、遅延させたTSストリームを用いてB25処理を行います。
		リアルタイム視聴が可能です。

		TSバッファサイズを変更できます。
			→cap_sts_sea.iniで設定可能です。
			[TS_BUFFER]

			;------------------------------------------------------
			;TSストリームの遅延をどれくらい持たせるか(KB)
			;------------------------------------------------------
			CS_MARGIN=1024		// CS視聴時の遅延量
			BS_MARGIN=512		// BS視聴時の遅延量
			CHIDEZI_MARGIN=512	// 地デジ視聴時の遅延量

			;------------------------------------------------------
			;最大どれくらい溜めるか(MB)
			;	(動的配置のため、常に確保されるメモリではない。)
			;------------------------------------------------------
			MAX=4


		まずは上記デフォルトの設定で使ってください。
		問題が出る場合は、下記のように確認してください。
		
			VLCなどで、リアルタイム再生を行ってください。(オプション例：cap_sts P B @8 10 bdiag view)

			cap_sts起動時のコマンドラインに bdiag を追加すると、B-CASストリームとのマージンを確認できます。
			最低0msになるくらいに、バッファサイズをあわせこんでください。
			(時間は多いほうがいいですが、その分出画が遅くなります。)

			・再生がプチプチ途切れる、ECM Merginでマイナスが表示される、ECM Lostが出る
				→*_MARGINをあげてください。

			・TS Buffer FULLが表示される。
				→MAXを上げてください。ただし、いくら上げても改善しない場合は、出力系統(HDDやnetwork)の
				　負荷が大きすぎるため、環境を見直すことをお勧めします。
				　また、出画直後や、リモコンでのCH切替直後に発生することがありますが、これに関しては仕様
				　扱いでお願いします。

・ffmpegとの連携

		ffmpegを用いて、録画時にリアルタイムに別フォーマットにエンコードできます。		
		大事な番組はts形式で保存することをお勧めしますが、
		見れさえすればいい番組などを録画するときは、別ファイル形式(WMV8_SMALL等)で
		サイズを抑えて保存することにより、録画コストを抑えることが出来ます。
		ffmpegは安定性が高いので、VLCよりお勧めです。

		PSP,IPOD形式などで直接録画することも可能です。		
		MPEG2PS形式で直接録画することにより、他アプリとの連携が容易になります。

		例えば、MPEG2PSで直接出力する場合、コマンドラインに"ffmpeg:MPG2PS"と追加します。

		MPG2PSは、cap_sts_sea.iniで、以下のように定義されています。

		MPG2PS		=-f vob -vcodec copy -aspect 16:9 -acodec libmp3lame -ar 48000 -ab 192k

		これは、ffmpegでエンコードする際の引数になります。
		(上記だと、ビデオはm2vをそのまま、オーディオはmp3 48kHz 192kbpsでエンコード)

		ffmpegのパスは、下記を参考に任意に設定してください(フルパスにしておくことを推奨)
		PATH=ffmpeg.exe

		※5.1ch出力に関して
			ffmpegのパラメータに、-ac 6(オーディオ6ch指定)が含まれていた場合、cap_stsは6ch(48kHz 16bit)でwav出力します。
			ソースが2chだった場合、L,Rのみ出力し、他の4chは0出力になります。
			ソースが6chだった場合、そのまま出力します。

		※付属のffmpeg.exeは、 rev.12939 Pentium4最適化版です。(入手元：http://blog.k-tai-douga.com/)

		※注意
			・localhost:1234をBonTsDemux側で使用します。
			・入力(-i)、出力ファイルの指定はしないでください。
			・エンコード速度が、30fpsを下回る場合、リアルタイムエンコードが出来ません。
				→確認方法
					付属のBonTsDemux mod を用いて、TSファイルを使いたいオプションでエンコードしてみてください。
					この際、30fps以上の速度が出ていれば、リアルタイムエンコード可能の目安になります。

・VLCとの連携

		例えば、MPEG2PSで直接出力する場合、コマンドラインに"vlc:MP2_PS"と追加します。
		例：cap_sts.exe title.ts P POFF @10 1 B25 vlc:MP2_PS
	                                              ~~~~~~~~~~
		MP2_PSは、cap_sts_sea.iniで、以下のように定義されています。

		MP2_PS=udp://@ :sout=#transcode{acodec=mp3,ab=192,channels=2}:duplicate{dst=std{access=file,mux=ps,dst="%FILE%"}}

		これは、VLCに渡すマクロです。
		%FILE%は、cap_sts.exeが保存しようとするファイル名に置換されます。

		MPEG2PSでなく、WMVやDIVXに直接変換することもできます。
		例：vlc:WMV_LITE と追加すれば、スケール0.5倍のWMV形式で保存される。

		VLCのパスは、下記を参考に任意に設定してください
		VLC_PATH=C:\Program Files\VideoLAN\VLC\vlc.exe

		※VLCは、さまざまな理由で安定しないケースがあります。リアルタイムエンコードを行う場合は、ffmpegを推奨します。


・録画後のコマンド実行

		setting_vlc.iniで、以下のような行があります。

		;↓保存したファイルをコピーする
		;cmd1=c:\windows\system32\xcopy.exe %FILE% s:\TV\

		ここにコマンドを載せておけば、録画終了後指定されたコマンドを実行できます。

		ここに記述できるマクロは、以下の通り

			%FILE%		:	ファイル名(フルパス)
			%DRV%		:	ドライブレター
			%PATH%		:	ファイルのパス
			%NAME%		:	ファイル名(拡張子なし)
			%EXT%		:	拡張子

		また、複数のコマンドを実行するためには、cmd1=... , cmd2=... と、cmd*の数字を
		インクリメントしていきます。

		vlc:*の*に応じて、個別にコマンドを設定できます。
		例えば、vlc:MP2_PSをやった後だけファイルをコピーしたい場合は、

		[COMMAND_AFTER_MP2_LITE]
		cmd1=c:\windows\system32\xcopy.exe %FILE% s:\TV\
		
		等と記述します。
		

・録画終了後にスタンバイに移行

		setting_vlc.iniで、以下のような行があります。

			;STANDBY	OFF:スタンバイに移らない	ON:録画完了後スタンバイに移行
			STANDBY=OFF
			;fSuspend	1:スタンバイ	0:休止状態
			fSuspend=1

		STANDBY=ONとすれば、録画終了後にスタンバイに移行できます。
		fSuspend=0とすれば、休止状態に移行します。
			
		なお、録画が外部から中断されたときには、スタンバイには移行しません。


////////////////////////////////////////////////////////////////////////////////////////////////////////

・その他
	TaskSchedulerHelper.exeを使うと幸せになります。
	※ただし、TaskSchedulerHelperのSUSPENDオプションは効きませんので、上記"変更点4"の方法で行ってください。

////////////////////////////////////////////////////////////////////////////////////////////////////////

・謝辞
	marumo氏
	中の人氏
	デジ太郎氏
	cap_sts改、TaskSchedulerHelper作者様
	ツール開発に携わったすべての方

////////////////////////////////////////////////////////////////////////////////////////////////////////

・履歴
cap_sts sea(009_3)---------------------------------------------------------------------------------------
2008/05/03
		cap_sts_sea.ini の IrWait設定が効かず、600ms固定になっていたのを修正

cap_sts sea(009_2)---------------------------------------------------------------------------------------
2008/05/03
		ffmpeg使用時、-f dvd等が含まれていた場合拡張子をmpgにする
		録画開始前のチャンネル再送信を、開始前60〜30秒でのみ行う
		BitErrのカウント位置バグ修正
		TSバッファFULL時、デッドロックしていたバグを修正(009でのエンバグ)

cap_sts sea(009)---------------------------------------------------------------------------------------
2008/04/30
		ffmpeg連携機能に対応
			→MPEG2PS、WMV、PSP,IPOD形式等で直接出力可能。5.1chにも(一応)対応
		BonTsDemux処理修正(PTSによる音ずれ補正機能追加。aacは音ずれが起きるので、仕様から削除) 
			→これに伴い demux指定時はwav出力専用
		bTransportErrorIndicatorを無視する
		B-CASが差さっていないと、TSストリームが流れない不具合を修正
		録画開始待ちにリモコンコードを再送信することにより、CH切り替えの信頼性を向上させる
		Packetエラー情報をプロンプトに表示する。(ただし、開始7秒後からカウント開始)
		外付けカードリーダーに対応
		スレッドを2つ削除
		リモコン番号に対応
		リモコン送信時間を設定可能にする
		
cap_sts sea(008_2)---------------------------------------------------------------------------------------
2008/04/12
		Pオプション指定時、チャンネル切り替えが出来ないバグを修正


cap_sts sea(008)---------------------------------------------------------------------------------------
2008/04/12
		B-CASデータのPCへの入力遅延を、更に改善しました。
			→FWではなく、cap_sts.exe側で遅延を起こしていた恥ずかしいバグを修正。
			　この修正で、B-CAS(ECM)の遅延は数十ms程度になり、TSバッファが殆ど不要になります。
			　外部リーダ使用時と比べ、ほぼ遜色ないレベルに近づけました。

			　※以前のバージョンを使っている場合は、バッファサイズに注意してください(上記変更点1参照)

		TS Buffer処理を改善しました。
			→常にメモリをとるのではなく、動的確保する方式に変更
			→UDPのドロップを防ぐため、最大転送レート抑制機能の追加
			→BonTest(UDP)での再生対応
			→ネットワークドライブへの保存に対応

		iniファイルを、cap_sts.exeがあるフォルダから読み取るように修正
			→iniファイル名を vlc_setting.ini から cap_sts_sea.iniに変更しています。
			　前のバージョンを使用している人はご注意ください。
			　それに伴って、cap_sts_sea.iniを見やすく整形。

		BonTsDemuxを組み込み、m2v,aacで直接出力するテスト
			→cap_sts.exe 起動オプションに demux を入れると、demuxされたm2v,aacが直接吐き出されます。
			　(FFMPEGとの連携を視野に入れた布石です。)

cap_sts sea(007)---------------------------------------------------------------------------------------
2008/4/05

		B-CASデータのPCへの入力遅延を改善しました。
			→TSバッファ容量を半減でき、出画までの時間が早くなります。
			　以前のバージョンを使っている場合は、バッファサイズに注意してください(上記変更点1参照)
			
		アプリ内部で、出画までのBCASデータのハンドシェイクを自動化しました。
			→B-CASデータを先に保存する処理(TS_START_MARGIN)が不要になりました。

		バッファ処理に残っていた不具合リスクを修正しました。
			→リアルタイム視聴時、リモコンなどでのチャンネル切り替えが可能になりました。

		B25処理ライブラリBonTsEngineを、Multi2Dec0121のバージョンに更新しました。
		ファイル名のチェックを強化(禁則文字等)
		他、色々更新


cap_sts sea(006)---------------------------------------------------------------------------------------
2008/3/30

		スタンバイ復帰直後にUSB認識出来ない事があったので、リトライ処理を追加
		ECM Bufferの履歴を50持たせる(以前のKEYを聞いてくる事があるようなので)


cap_sts sea(005)---------------------------------------------------------------------------------------
2008/3/23

		B-CASストリームがドロップする不具合を修正。
		TSバッファサイズを可変にした。
			→setting_vlc.iniで設定可能です。

cap_sts sea(004)---------------------------------------------------------------------------------------
2008/3/22

		内蔵カードリーダに対応した。
			→今のところ、内蔵カードリーダ専用で、外部リーダは使えない仕様です。
		改改とか分かり難いとの指摘もあったので、派生バージョン名をseaとした。
		※FWを変更しています。アプリ側で自動更新されますが、一応ご留意を。。

cap_sts_006_003----------------------------------------------------------------------------------------
2008/3/18(2)

		cap_sts_2008_03_14 に更新しました。対応した cap_sts.svfを書き込む必要があります。

cap_sts_006_002----------------------------------------------------------------------------------------
2008/3/18	
		vlc:* の*に応じて、個別に録画後コマンドを実行できるようにした
		Standbyに移る前の確認ダイアログを、前面に出すようにした。
				
cap_sts_006_001----------------------------------------------------------------------------------------
2008/3/17
		cap_sts改06をベースに、VLC連携機能とスタンバイ機能をつけた。

