Skip to content

Commit c715ac4

Browse files
committed
Fix: Mirakurun で地上波が選局できなくなる問題を修正
コードを読む限り、<satellite> はチャンネル種別に関わらず空文字だと条件式が false と判断されて置換ロジックが素通りされてしまうらしい 空文字を入れることで対処することにした(マルチチューナー対応も必要なので、地デジ用チューナーコマンドだけ <satellite> を入れないという訳にはいかない)
1 parent 123d00f commit c715ac4

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

isdb_scanner/formatter.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -361,14 +361,17 @@ def format(self) -> str:
361361
else:
362362
# recisdb 互換の物理チャンネル指定フォーマット
363363
mirakurun_channel = ts_info.physical_channel_recisdb
364-
## BS のみ追加の引数として --tsid (BS チャンネルの TSID) を指定し、当該トランスポンダで送出中の TS を明示的に TSID で選局する
365-
## 実際に発行されるチューナーコマンドは --channel BS23_2 --tsid 18803 のようになる
366-
## (--tsid 指定時は物理チャンネル表記に含まれる相対 TS 番号は無視され、常に物理 BS-23ch 内で送出中の TSID が 18803 の TS が選局される)
367-
## 地上波や CS にはスロットや相対 TS 番号の概念がないため、TSID を指定する必要はない
368364
if ts_info.broadcast_type == 'BS':
365+
# BS のみ追加の引数として --tsid (BS チャンネルの TSID) を指定し、当該トランスポンダで送出中の TS を明示的に TSID で選局する
366+
## 実際に発行されるチューナーコマンドは --channel BS23_2 --tsid 18803 のようになる
367+
## (--tsid 指定時は物理チャンネル表記に含まれる相対 TS 番号は無視され、常に物理 BS-23ch 内で送出中の TSID が 18803 の TS が選局される)
368+
## 地上波や CS にはスロットや相対 TS 番号の概念がないため、TSID を指定する必要はない
369369
extra_args = f'--tsid {ts_info.transport_stream_id}'
370370
else:
371-
extra_args = ''
371+
# Mirakurun のプレースホルダーは単なる文字列置換で実装されているが、"satellite" が空だと条件分岐が成立せず
372+
# チューナーコマンド内の <satellite> が置換されずに残ってしまうため、意図的に空文字列ではなく半角スペースを入れている
373+
# ref: https://github.com/Chinachu/Mirakurun/blob/3.9.0-rc.4/src/Mirakurun/TunerDevice.ts#L271-L274
374+
extra_args = ' '
372375
channel: MirakurunChannel = {
373376
'name': mirakurun_name,
374377
'type': mirakurun_type,
@@ -447,8 +450,9 @@ def get_tuner_command(tuner: ISDBTuner) -> str:
447450
return f'recpt1 --device {tuner.device_path} <channel> - -'
448451
else:
449452
# <satellite> は mirakc における {{{extra_args}}} の代わりとして使っている
450-
# TSID 選局に対応しているチューナーでは、BS のみ <satellite> を --tsid (BS チャンネルの TSID) に置換する
451-
if tuner.isTSIDSelectionSupported() is True:
453+
# TSID 選局に対応している ISDB-S 対応チューナー・ISDB-T/ISDB-S 両対応チューナーでは、
454+
# BS でのみ <satellite> が --tsid (BS チャンネルの TSID) に置換される
455+
if tuner.isTSIDSelectionSupported() is True and tuner.type in ['ISDB-S', 'ISDB-T/ISDB-S']:
452456
return f'recisdb tune --device {tuner.device_path} --channel <channel> <satellite> -'
453457
else:
454458
return f'recisdb tune --device {tuner.device_path} --channel <channel> -'
@@ -648,6 +652,9 @@ def format(self) -> str:
648652
if ts_info.broadcast_type == 'BS':
649653
extra_args = f'--tsid {ts_info.transport_stream_id}'
650654
else:
655+
# channel.extra-args のデフォルト値は空文字列なので、extra-args 自体の指定を省略しているのと同じ
656+
# mirakc は Mustache テンプレートを採用しているため、変換先が空文字列でも Mirakurun のようにプレースホルダーが残ることはない
657+
# ref: https://github.com/mirakc/mirakc/blob/main/docs/config.md
651658
extra_args = ''
652659
channel: MirakcChannel = {
653660
'name': mirakc_name,
@@ -662,8 +669,9 @@ def get_tuner_command(tuner: ISDBTuner) -> str:
662669
if self._recpt1_compatible is True:
663670
return f'recpt1 --device {tuner.device_path} ' + '{{{channel}}} - -'
664671
else:
665-
# TSID 選局に対応しているチューナーでは、BS のみ <satellite> を --tsid (BS チャンネルの TSID) に置換する
666-
if tuner.isTSIDSelectionSupported() is True:
672+
# TSID 選局に対応している ISDB-S 対応チューナー・ISDB-T/ISDB-S 両対応チューナーでは、
673+
# BS でのみ {{{extra_args}}} が --tsid (BS チャンネルの TSID) に置換される
674+
if tuner.isTSIDSelectionSupported() is True and tuner.type in ['ISDB-S', 'ISDB-T/ISDB-S']:
667675
return f'recisdb tune --device {tuner.device_path} --channel ' + '{{{channel}}} {{{extra_args}}} -'
668676
else:
669677
return f'recisdb tune --device {tuner.device_path} --channel ' + '{{{channel}}} -'

0 commit comments

Comments
 (0)