Entry

DSPlayer版XBMCでわかさトラップを回避する

今から書く内容は、以下のような人を対象にしています。また、内容自体は聞きかじりのものが多いので、あまり当てにしないでください。

  • TVをTSファイルで録画している。
  • Windows版XBMCでTSファイルを再生している。
  • TSファイルの一部に、再生できないものがある。
  • そいつを何としてもXBMCで再生したい。

具体的に書いてしまえば、TV放送をTS録画して、メインのプレイヤーにXBMCを利用している人です。XBMCを使うと言う事は恐らく、専用の録画・再生環境を構築している人が主な対象になると思います。
もし、XBMCに拘らず適当な別のメディアプレイヤーで良いのなら、VLCの再生能力が優秀なので、その辺りを使ってしまうのが手っ取り早いと思います。自分の場合は、再生環境をXBMCで統合したかったため、今回のような内容を実行しました。

再生できない要因

ファイルが再生できないと一口に言っても、ファイルが壊れている等の様々な要因が考えられます。まぁ壊れている場合はどうしようもないのですが、関東圏のTOKYO MXを録画したTSファイルでは、頻繁にXBMCで再生できない(音声のみが流れ、映像が止まってしまう)ファイルが生成されます。
これは、CMと番組がまたがって録画されたTSファイルにおいて、CMと番組の解像度異なる場合にプレイヤーがデコードに失敗してしまう事が要因で、これはTOKYO MXのCMにちなんで「わかさトラップ」という俗称があるようです。このTSファイルは、Windows Media Playerをはじめとして、多くのプレイヤーで再生に失敗します。VLC等、一部再生できるソフトウェアも存在します。
なお、解像度が異なる事で何故このような問題が起こるのかといった点について細かい話ができるほど知識は無いのでご容赦を。

再生するための方針

XBMC自体は様々なコーデックが内蔵されたプレイヤーであり、それらを差し替えるといった事はできません(やるとすればコンパイル作業等が発生すると思います)。
ただし、非公式ではあるものの、WindowsにインストールされたDirectShowフィルタを使用して再生できるDSPlayer版XBMCというものが存在するので、これを利用します。(DSPlayer (DirectShow Player for XBMC) Eden build available
さらに、TSファイルを再生用のDirectShowフィルタを別途入手し、XBMCでTSファイルを再生する場合に、そのDirectShowフィルタを使用して再生させる、というのが主な流れとなります。

必要なソフトウェア

今回の作業でインストールするソフトウェアは以下の通りとなります。

DSplayer版XBMCに関しては、インストーラを実行すればXBMCと変わりなくインストールされるため、特に問題はないと思います。

DirectShowフィルタを利用する場合、XBMC内蔵のコーデックを使用しませんので、別途再生用のコーデックが必要となります。Windows標準のコーデック(Microsoft DTV-DVD Video decoder、Microsoft DTV-DVD Audio decoder)でも多分良いと思いますが、Windowsのバージョンやパッケージによって入ってたり入ってなかったりするので、ここでは別途インストールする事を想定しています。

そして今回で一番キモとなるのがTS用スプリッタです。わかさトラップのあるTSファイルを再生するためには、対応したスプリッタが必要になります。ここでは、まるも製作所さんで公開されている「Marumo ISDB Splitter」を利用します。なお、公開されているデータはAXファイル(isdbsplitter.ax)のみとなるため、インストールにはregsvr32コマンドを使用します(インストールするのはx86版です)。必要無いとは思いますが、一応インストール・アンインストール用バッチファイルを以下に置いておきます。isdbsplitter.axと同じフォルダに入れて、「管理者として実行」より実行してください。

isdbsplitter.ax インストール用バッチファイル

XBMCで再生するための設定

DirectShowフィルタを利用するために、XBMCの設定を変更する必要があります。この辺の設定はXBMC for Windows TIPS – 池デジを録画した MPEG-2 TS をヌルヌル再生する方法 « HBGamezに詳しく書かれていますが、ここではちょっとやり方をを変えて、「TSファイルの場合のみDirectShowフィルタを使用し、それ以外は通常のXBMC再生とする」とします。全ファイルに対してDirectShowフィルタを適用すると、それぞれの形式に対してDirectShowフィルタを設定する必要があり、とても面倒だからです。なお、ここではWindows 7を想定していますので、環境が異なる場合は適宜読み替えてください。

まず、DirectShowフィルタを適用する動画形式を設定します。
“C:\Users\ユーザー名\AppData\Roaming\XBMC\userdata\playercorefactory.xml”というファイルを作成し、以下の内容を記述します。

<playercorefactory>
	<rules action="prepend">
		<rule filetypes="ts|mpeg|mpg|m2ts" player="dsplayer" />
	</rules>
</playercorefactory>

次に、使用可能なDirectShowフィルタを設定します。これは使用可能なフィルタ候補を羅列するものです。
“C:\Users\ユーザー名\AppData\Roaming\XBMC\userdata\dsplayer\filtersconfig.xml”というファイル(&フォルダ)を作成し、以下の内容を記述します。インストールしたフィルタに応じて適当に追加・削除してください。

<filtersconfig>
	<filters>
		<!-- Microsoft -->
		<filter name="msvideo" type="videodec">
			<guid>{212690FB-83E5-4526-8FD7-74478B7939CD}</guid>
			<osdname>Microsoft DTV-DVD Video decoder </osdname>
		</filter>
		<filter name="msaudio" type="audiodec">
			<guid>{E1F1A0B8-BEEE-490D-BA7C-066C40B5E2B9}</guid>
			<osdname>Microsoft DTV-DVD Audio decoder </osdname>
		</filter>
		
		<!-- LAV -->
		<filter name="lavsource" type="source">
			<guid>{B98D13E7-55DB-4385-A33D-09FD1BA26338}</guid>
			<osdname>LAV Source</osdname>
		</filter>
		<filter name="lavsplitter" type="splitter">
			<guid>{171252A0-8820-4AFE-9DF8-5C92B2D66B04}</guid>
			<osdname>LAV Splitter</osdname>
		</filter>
		<filter name="lavvideo" type="videodec">
			<guid>{EE30215D-164F-4A92-A4EB-9D4C13390F9F}</guid>
			<osdname>LAV Video</osdname>
		</filter>
		<filter name="lavaudio" type="audiodec">
			<guid>{E8E73B6B-4CB3-44A4-BE99-4F7BCB96E491}</guid>
			<osdname>LAV Audio</osdname>
		</filter>
		
		<!-- ffdshow -->
		<filter name="ffdvideodec" type="videodec">
			<guid>{0B390488-D80F-4A68-8408-48DC199F0E97}</guid>
			<osdname>ffdshow Video Decoder</osdname>
		</filter>
		<filter name="ffdvideodxvadec" type="videodec">
			<guid>{0B0EFF97-C750-462C-9488-B10E7D87F1A6}</guid>
			<osdname>ffdshow DXVA Decoder</osdname>
		</filter>
		<filter name="ffdaudiodec" type="audiodec">
			<guid>{0F40E1E5-4F79-4988-B1A9-CC98794E6B55}</guid>
			<osdname>ffdshow audio decoder</osdname>
		</filter>
		
		<!-- Marumo -->
		<filter name="filesource" type="source">
			<guid>{E436EBB5-524F-11CE-9F53-0020AF0BA770}</guid>
			<osdname>File Source (Async.)</osdname>
		</filter>
		<filter name="marumosplitter" type="splitter">
			<guid>{B8CF9F40-3DE2-48CE-AE55-14A8C4016431}</guid>
			<osdname>Marumo ISDB Splitter</osdname>
		</filter>
	</filters>
</filtersconfig>

なお、DirectShowフィルタのguidの調べ方は色々あるかと思います。DSPlayer – XBMCでは、GraphStudioを使った方法が紹介されています。(コーデックイントール時に、Download K-Lite Codec PackのFullまたはMegaをインストールした場合、GraphStudioNextがインストールされます)
私の場合はMedia Player Classicでフィルタの優先度を適当にいじって、再生中の動画を右クリック→フィルタ→(フィルタ名)→Pin Infoを開き、画像の位置のIDを見てます。

dsfilter

最後に、再生時に使用するDirectShowフィルタを設定します。source、splitter、video、audioの4種類のフィルタについて、filtersconfig.xmlで定義したフィルタ名(name=””)を割り当てます。
“C:\Users\ユーザー名\AppData\Roaming\XBMC\userdata\dsplayer\mediasconfig.xml”というファイル(&フォルダ)を作成し、以下のような内容を記述します。インストールしたフィルタや、フィルタ名の定義によって適宜変更します。

<mediasconfig>
	<rules>
		<rule filetypes="ts|mpeg|mpg|m2ts">
			<source filter="filesource" />
			<splitter filter="marumosplitter" />
			<video filter="ffdvideodec" />
			<audio filter="ffdaudiodec" />
		</rule>
	</rules>
</mediasconfig>

XBMC上での設定

最後に、XBMC上から設定を変更します。
システム→設定→ビデオ→DSPlayerを開き「User as default video player」のチェックを外します(入っていれば)。また、もし「User system filter (DirectShow merits)」にチェックが入っていた場合も外します。

xbmc

以上で、設定は終わります。

まとめ

以上の作業が完了すると、TSファイルはDirectShowフィルタを使って、それ以外のファイルはXBMC標準の機能で再生されるようになる…はずです。多分。これにより、XBMC上でわかさトラップを回避してTSファイルの再生を行えるようになります。
なお、この結果XBMC標準再生より音量が小さくなる等の問題が起こると思われるため、その辺はフィルタの設定を調整する等の工夫が必要になります。

関連

XBMCを使ってみよう : DXVA
XBMC for Windows TIPS – 池デジを録画した MPEG-2 TS をヌルヌル再生する方法 « HBGamez
DSPlayer – XBMC
External players – XBMC

2013-12-23 追記

userdata.zip

自分が使用しているファイルを置いておきます。解凍するとuserdataフォルダが展開されるので、そのフォルダを同名のフォルダに上書きコピーすると、自分の環境と同様になるはずです。
XPの場合は、C:\Documents and Settings\ユーザー名\Application Data\XBMC\userdata\
Vista以降の場合は、C:\Users\ユーザー名\AppData\Roaming\XBMC\userdata\
になります。
ただ現在は、Windows 7標準のMicrosoft DTV-DVD Video decoder及びMicrosoft DTV-DVD Audio decoderを使用する設定となっているため、XPでは動かないと思います。

なお、適用が成功した場合はCodec info(キーボードの「o」キーを押すと表示されるコーデック情報)のFilterに、下記画像のように「Marumo ISDB Splitter」と表示されます。

Codec Info


Comments (2 件)

匿名 より:

OSXPでvistaコーデック入れた環境で色々試したのですができないのでもしよろしければ
上記のように説明してもらえたら幸いです><

Umisuika より:

XPは基本的に、Vista/7で「C:\Users\ユーザー名\AppData\Roaming\XBMC\userdata\」だったフォルダが「C:\Documents and Settings\ユーザー名\Application Data\XBMC\」に変わるだけです。
vistaコーデックというものが何なのかよく分からないのですが、「Vista Codec Package」( http://www.majorgeeks.com/files/details/vista_codec_package.html )の事でしょうか。使った事が無いのでよく分かりませんが、ffdshowとLAV filtersが含まれているようですね。
とりあえず、自分の使用してるファイルをアップロードして追記に書き加えておきました。が、XPではそのままでは動かないはずです。運が良ければmediaconfig.xmlの「video filter」及び「audio filter」を書き換えるだけで終わります。(lavvideo、lavaudio または、ffdvideodxvadec、ffdaudiodec)。
それでも動かない場合は、guidが異なる可能性があります。その場合は、自分で調べてください。自分の環境と異なるかもしれませんので。

コメントを残す

メールアドレスが公開されることはありません。