デジタル録画番組を除くビデオコンテンツを「DiXiM Digital TV plus for IO-DATA」で視聴するために、「TVersity」をDMSにして試してみました。
導入はWHSに行いました。以前にも別件で使用したことはあるのですが、すぐに使用をやめました。
今回は、前の記事の続編になります。
※インストール方法はウィザードに従うだけの簡単なものですので省略します。
※「TVersity codec pack」が付属しておりインストール時に自動で導入されてしまうようなので、インストール後にアンインストールしました。
※ffdshowやMP4 DirectShow Filterは別途、導入してあります。
「Tversity」フォルダ構成(Windows Home Serverの場合)
C:Program FilesTVersityMedia Server | インストール先フォルダ |
db | データベース用フォルダ |
web | WEBサービス用フォルダ |
data | トランスコード後のファイル一時保存先フォルダ |
「TVersity」で公開したパターンA~Gのビデオコンテンツが「DiXiM Digital TV plus for IO-DATA」で再生ができるか否かを検証します。
共有用に「ビデオ」フォルダーを作成し、パターンA~Gのファイルのみ保存しました。
※TVersityを起動すると、「MediaServer.exe」(TVersity Media Server サービス)と「TVersity.exe」が実行され、タスクトレイにアイコンが表示されます。
1.「ビデオ」フォルダーの公開
2.機器の認識
HTPCで「DiXiM Digital TV plus for IO-DATA」を起動すると、「Device」と表示されました。
2つあるのはHTPCにネットワークが2ポートあり同じネットワークアドレスで使用しているためです。
もう1つは、DMSの機能があるHVL-AVRが表示されています。
3.「DiXiM Digital TV plus for IO-DATA」から再生
再生するも一覧に何も表示されませんでした。
デフォルトのままだとこんなものでしょう。
「Device」と表示されている時点で事前に用意されている各機器個別の設定が使われていないということです。
「DiXiM Digital TV plus for IO-DATA」ではパターンC~E(MPEG4)が再生できることがわかっていますので、どのみちそれ以外のパターンA,B,F,Gの場合はトランスコードするようにカスタマイズが必要です。
迷わず「DiXiM Digital TV plus for IO-DATA」デバイス用に「profile.xml」を編集することにしました。
「DiXiM Digital TV plus for IO-DATA」専用の個別設定をするには、「DiXiM Digital TV plus for IO-DATA」を特定できなくてはいけません。
現状の様に「Device」として識別されているのはカスタマイズする場合には都合が悪い状態です。
Profileの編集
作業前には以下に留意してください。
※事前にオリジナルのバックアップコピーを作成し、いつでも元通りにもどせるようにしておいてください。
※profiles.xmlを置き換えるときは、「TVersity」のサービスを停止してから行ってください。
※記述にミスがあると、サービスが起動しなくなります。
「DiXiM Digital TV plus for IO-DATA」を特定するには、DLNAクライアントからDLNAサーバへ送られる情報をキーにして区別するようです。
デバイスを特定する箇所は、「<httpheader inuasubstr=””></httpheader>」の部分です。
DLNAクライアントからこれに一致するものが送られてくれば「TVersity」で識別してくれます。
それでは「DiXiM Digital TV plus for IO-DATA」の場合はというと、これについては「DiXiM Digital TV plus for IO-DATA」から「TVeristy」への通信をパケットキャプチャしないとわかりません。
そのためWHSにパケットキャプチャソフトを導入しました。
使用したのは「Wireshark」です。WinPcapのライブラリを使用するのでWinPcapも同時に導入されます。
※パケットキャプチャの方法については省略します。
(1)デバイス識別の設定
ほかのデバイスと区別するための設定です。
DMPからDMSへのSOAPメッセージ(アクション)を送信時にHTTPプロトコルが使用されますが、そのヘッダー部分にuser-agent: があります。
※アクションの送信にはヘッダーに「soapaction:」が使用されるので目印になると思います。
この部分の記述が「<httpheader inuasubstr=””></httpheader>」に入力する文字になります。
「DiXiM Digital TV plus for IO-DATA」の場合は、「DLNADOC/1.50」でした。
前半部分は以下のようにしました。(※見やすいようにコメントは削除してあります)
<profile id="f0a67c4c-67dd-11e0-8029-0024a584585e"> <friendlyName>DiXiM Digital TV</friendlyName> <manufacturerName>DiGiOn Inc.</manufacturerName> <modelName>DiXiM Digital TV</modelName> <icon>/images/device_icon_dtv.png</icon> <HTTPHeader inUASubstr="DLNADOC/1.50"/> <devicesIP value="192.168.124.XXX"/> <deviceDescription name="UPNP_AV_MediaServer_1.0.default.xml"/> <contentDirectory audio="null" photo="null" video="3"/>
“profile”のidは、パケットキャプチャソフトで調べた「callback:」の値です。ユニークな番号でよいと思うのですが・・・
その下の3行は「DiXiM Digital TV plus for IO-DATA」であることがわかるようにしました。
その下の3行は、本来、M-SEARCHで識別するための文字列を記述する箇所だと思われます。
“icon”はデバイス表示のアイコンが他と違ったほうが目立つので変えてみました。(※webimages以下に何通りかの画像があります)
“HTTPHeader”は、パケットキャプチャソフトで調べた「user agent:」の箇所と同じにしてあります。幸いにも他のデバイスとは重複していないようです。
“devicesIP”は、自動で識別できない場合に備えて念のため記述しました。(※逆効果の可能性もあるのでその時は削除します)
“deviceDescription”はデバイスディスクリプションなのですが、「TVeristy」には何種類かが用意されているようです。とりあえずdefaultを使用しました。
“contentDirectory”は、メニューの表示に影響があるものだと思います。今回は対象が「Video」のみなので他は非表示にしました。
「TVersity」の画面
(2)トランスコードに関する設定
前回の結果からパターンC,D,Eのビデオコンテンツはそのままトランスコードせずに配信して、パターンA,B,F,Gのビデオコンテンツはトランスコードする設定をしたいわけです。
※フォルダを公開時には「When needed」にしてあります。
何にトランスコードするかは、確実に再生できるとわかっているパターンC,D,Eとおなじ、MPEG-4(映像:H264、音声:AAC)にしたいのですが、「TVersity」のトランスコードでMPEG4への変換が可能であるのか疑問です。
※ffmpegが付いているようなのですが、インストールフォルダーにみつかりませんし、コーデックパックの中にもみあたりません。
具体的な設定についてはどう書けばよいのかいまいちなところがあります。
参考にしたのは「Tversity WiKi」のA Technical Specification of a Device Profile です。
1点わからないのがファイルの拡張子とMime-Typeのどちらで判断するのかです。
パターンFのファイルは拡張子:mp4、Mime-Type:video/x-matroska になります。
なぜこのようなイレギュラーなことをしているのかというと、前の環境ではWindows Media Center(WMC)ですべて行っていました。
このWMCで一覧表示されるのはあくまでWindowsがサポートしているファイル拡張子のものだけです。この頃はまだmp4はOS標準では利用できませんでしたので、MP4 DirectShowフィルタを別途導入し併せてコーデックなども導入して再生できるようにする必要がありました。
それでも、WMC上では表示できないのでレジストリを編集して拡張子がmp4のファイルが一覧表示されるように変更しました。
この作業をmkvでもするのが面倒だったので、すでに登録してあるmp4の拡張子をそのまま使用するようにしました。
このまま設定して、ダメなら動画ファイルの拡張子をmkvに変更してみることにします。
整理すると公開したい「ビデオ」フォルダのファイルは「TVersity」では以下のようになります。
ビデオファイル | Mime-Type | Videoコーデック | audioコーデック |
パターンA | video/x-msvideo | LIBXVID | MP3 |
パターンB | H264 | ||
パターンC | video/mp4 | H264 | AAC |
パターンD | |||
パターンE | |||
パターンF | video/x-matroska | H264 | AC3 |
パターンG | video/x-ms-dvr | MPEG2VIDEO | MP2 |
これのなかでMime-typeが「video/mp4」以外をすべてトランスコードするようにします。
他のプロファイルを参考にトランスコードは「video/mpeg」にしました。
記述は以下のようにしました。
<profile id="defd8fb0-c85c-11df-bd3b-0800200c9a66"> <friendlyName>DiXiM Digital TV</friendlyName> <manufacturerName>DiGiOn Inc.</manufacturerName> <modelName>DiXiM Digital TV</modelName> <icon>/images/device_icon_dtv.png</icon> <HTTPHeader inUASubstr="DLNADOC/1.50"/> <devicesIP value="192.168.XXX.XXX"/> <deviceDescription name="UPNP_AV_MediaServer_1.0.default.xml"/> <contentDirectory audio="null" photo="null" video="3"/> <transcodeTarget audio="audio/mpeg" video="video/mpeg" photo="image/jpeg" onlineAudio="audio/mpeg" onlineVideo="video/mpeg2" onlinePhoto="image/jpeg"/> <maxVideoInfo width="1900" height="1080" bitrate="500000000" fps="60"></maxVideoInfo> <minVideoInfo width="0" height="0" bitrate="0" fps="0"></minVideoInfo> <maxImageInfo width="1900" height="1080"></maxImageInfo> <minImageInfo width="0" height="0"></minImageInfo> <maxAudioInfo sampleRate="48000" bitsperSample="16" nchannels="6" bitrate="1536000"></maxAudioInfo> <minAudioInfo sampleRate="11025" bitsperSample="16" nchannels="1" bitrate="32000"></minAudioInfo> <mimetypeList> <mimetype value="video/mp4"><!-- MPEG4 video format--> <codec name="MPEG4"/><!-- XVID, h263, DIVX version 4/5 and any mpeg4 ASP (layer 5) compliant stream (H264, AKA MPEG4 AVC or MPEG4 layer 10 or MPEG4.10, is not included here)--> <codec name="H263"/><!-- h263--> <codec name="H264"/><!-- H264, AKA MPEG4 AVC or MPEG4 layer 10 or MPEG4.10 --> <codec name="MP2" maxBitrate="320000"/><!-- MPEG2 Audio--><!-- never tested--> <codec name="PCM_S16LE"/><!-- Uncompressed PCM Audio--> <codec name="PCM_S16BE"/><!-- Uncompressed DVD PCM Audio--><!-- never tested--> <codec name="AC3"/><!-- Dolby Digital AC3 Audio--> <codec name="DTS"/><!-- DTS Audio--> <codec name="AAC"/><!-- MPEG4 AAC--> <codec name="MP3" maxBitrate="320000"/><!-- MPEG1 Layer 3 Audio--> </mimetype> <mimetype value="video/MP4V-ES" rename="video/mp4"/><!-- MPEG4 video format--> <mimetype value="video/h264" rename="video/mp4"/><!-- MPEG4 video format--> <mimetype value="video/mp4v" rename="video/mp4"/><!-- MPEG4 video format--> </mimetypeList> </profile>
(3)その他の変更
以下のサイトを参考に設定しました。
DLNAサーバーを試す[TVersity編] ? REGZAと相互認識させてみる
DLNAサーバーを試す[TVersity編] ? REGZAへMPEG2をストリーミング配信
ProtocolInfoを以下のように変更しました。(video/mp4のみ)
video/mp4:DLNA.ORG_PN=AVC_MP4_MP_SD_AAC_MULT5;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000"
「DiXiM Digital TV plus for IO-DATA」の画面
7パターンすべて一覧表示されました。
パターンGとパターンFはトランスコードでエラーになり再生できませんでした。
気になるのはプレイヤーのメニューボタンです。再生と停止・一時停止しかできません。
video/mp4は早送り・巻き戻しも表示されます。
※ProtocolInfo内の”DLNA.ORG_OP=01;DLNA.ORG_CI=0”の箇所がその表示非表示をコントロールするようです。
「TVersity」の画面
パターンAを再生した際のコンソールのステータス画面です。
AVIからMPEGへトランスコードされてストリーミング配信されているのがわかります。
気になった点
「MediaServer.exe」と「TVersity.exe」が稼動していますが、Stop Sharedで「MediaServer.exe」が停止しますが、「TVersity.exe」を停止するためにタスクトレイアイコンをクリックしても反応しません。仕方なくタスクマネージャを起動してプロセスをKillしていました。
これ以降の作業は後にして、「Serviio」のほうを試行することにしました。