FoltiaRecStatus(q) -3
昨日の予告通り次は録画状況を推測しそれぞれの状態でLive視聴を起動させたり、B-CASカードを再起動させたりして見ます。 前回のFoltiaRecStatus_2の後からですね。 長くなると見にくいので、追記部分だけを記載して見ます。 本体はDropboxでシェアーしてますわ。
追記部分だけを記載
on FoltiaRecStatus(q)
--戻り値はブランク
--戻り値はブランク
--中略
log "直近に録画なし、録画準備、録画中"
if sTime > cTime and (q0's NowRec is {}) then --直近に録画なし
if (((do shell script "date +'%M'") is "00")) then LogOnConsoleR({cmt:"直近に録画なし 動作確認中", open_:false}) of L
--LogOnConsoleR({cmt:"直近に録画なし Debug中", open_:false}) of L
if Rp_BSCL > 0 then --録画の予定が無いが、Live視聴があればそれは録画終了時で、B-CASカードを再起動する
if not bug then set q1 to LiveChannel2({OnOf:"AllOff", foltia:q's foltia}) of me
LogOnConsoleR({cmt:"録画してないか直近に録画の予定が無い。", open_:false}) of L
if not bug then ReflesUSBCardReader({slack:false} & q) of me
return {erro:"録画してないか直近に録画の予定が無い。"} & q0
end if
return q0
else if Rp_AllCR is 0 then --録画準備中
if (((count of (every paragraph of pcscd))) > q's PCSC_errorMax) then
if not bug then ReflesUSBCardReader(q) of me
LogOnConsoleR({cmt:"直近録画無しで、PCSCエラー カードソフトリセット", open_:false}) of L
end if
if Rp_BSCT ≥ q's LiveBootUpNum then return {erro:LogOnConsoleR({cmt:"BSチャネ2チャネル動作してる-録画準備中", open_:false}) of L} & q0
--それ以外は 分岐の後にCID選択してLive起動する
LogOnConsoleR({cmt:"録画準備中 DeBug中 Live起動へ", open_:false}) of L
log "→進行する"
else --録画中
if (((count of (every paragraph of pcscd)) > q's PCSC_errorMax)) then
--if not bug then ReflesUSBCardReader(q) of me
LogOnConsoleR({cmt:"録画中、PCSCエラー カードソフトリセット ??? 未設定中", open_:false}) of L
end if
LogOnConsoleR({cmt:"録画中 DeBug中", open_:false}) of L
if Rp_BSCL > 0 and (curTime > e3Time) and (curTime > s3Time) then #Live録画中で 次開始2分前、現在記録終了2分前
--if Rp_BSCL > 0 and (curTime > s3Time) then #Live録画中で 次開始2分前
if (not bug) and (Rp_AllCR > 0) then set q1 to LiveChannel2({OnOf:"AllOff", foltia:q's foltia}) of me
return {erro:LogOnConsoleR({cmt:"次開始2分前でLive停止する。", open_:false}) of L} & q0
else if Rp_BSCT = q's LiveBootUpNum then
return {erro:LogOnConsoleR({cmt:"BSチャネ2チャネル動作してる-録画中", open_:false}) of L} & q0
else if Rp_BSCT > q's LiveBootUpNum and Rp_BSCL > 0 then #BSが3個以上あり、Live記録があった場合
if Rp_BSCR ≥ q's LiveBootUpNum then
if not bug then set q1 to LiveChannel2({OnOf:"AllOff", foltia:q's foltia}) of me
return {erro:LogOnConsoleR({cmt:"BSチャネ2チャネル録画中 ライブ停止", open_:false}) of L} & q0
end if
set CID to "128"
if (do shell script "Echo " & quoted form of BSrecptsid_Live & "|tr \\\\r \\\\n|grep -e '222'||true") is not "" then set CID to "129"
if not bug then set q1 to LiveChannel2({OnOf:"Off", CID:CID, foltia:q's foltia}) of me
return {erro:LogOnConsoleR({cmt:"BSチャネ3チャネル録画中 Live CID=" & CID & "を停止", open_:false}) of L} & q0
else if Rp_BSCT > q's LiveBootUpNum then #上の式から BSLiveCount = 0
return {erro:LogOnConsoleR({cmt:"BSチャネ2チャネル録画中", open_:false}) of L} & q0
else if Rp_BSCT < q's LiveBootUpNum then
--本来この状態は起こりえないと思うが起動がない場合はスルーパスしてCID選択し再起動する
--set q0 to LiveChannel2({OnOf:"AllOff", foltia:q's foltia}) of me
log "→進行する"
else
return q0 #それ以外の状況はライブ起動なく終了
end if
end if
if q's LiveBootUpNum = 0 then return {erro:LogOnConsoleR({cmt:"Q LiveBOotUpNumが0のためLiveは不要", open_:false}) of L} & q0
log "ここに来るのは BScount(Rp_BSCT) < q's LiveBootUpNum の場合のみ そしてCIDは 128であると思うが自信はない"
return q0
end FoltiaRecStatus
とこんな感じで分岐させてます。 これで直近に録画予定が無いか、録画予定があってLive視聴を起動させるか、録画中かを判定して対応します。 ライブ視聴を止めたりする部分まで作動させてその後はMainLoopに戻します(return q0)。 ライブ視聴を開始する部分はこの後にまとめて設定する訳です(log "→進行する")。
また次の予約開始2分前になるといったんライブ視聴を停止する様にしてます。これは録画予約が入れ替わる時間帯にたくさんのチューナーのオンオフが重なるとpcscdエラー(B-CASエラー)が起こりやすい事が解っているので、今の録画が2分以内に終わり、さらに次の録画開始が2分以内に始まるときに、Live視聴を一度ストップしてます。 ライブ視聴を一度止めてもしばらく基板が暖まっているからか、しばらくはドロップノイズが出ないみたいです。 やはりチューナーの開始時期や停止時期はいろいろアクセスが集中するんでしょうかね?
次(No-4)は最後にLive視聴を開始する部分を設定して見ましょう。