前回の投稿で、TVersityとREGZA Z9000で相互認識が可能になったため、あとはトランスコーディングの設定を行えば、色々なフォーマットの動画が視聴できると思ったのですが、設定を色々試しても、
「指定のファイルは再生できません」と表示され視聴できない状態でした。
まさかと思い、LAN共有でREGZAから視聴できる、MPEG2の動画ファイル:“テストムービー.mpg”を用意しTVersity経由のトランスコード(変換)無しで試してみても、視聴出来ないことが発覚!!。
ここで初めて、TVersityからのストリーミング配信そのものに問題があることに気づきました。
※トランスコードを停止
問題を切り分けて、MPEG2の動画がTVersity経由(トランスコード無し)でREGZAから視聴できない理由を探ることにしました。
TVersityとREGZA間の通信をWiresharkでパケット監視してみました。UPnPはHTTPプロトコルで、XML形式で情報のやり取りを行います。
“テストムービー”に関する情報を抜き出してみました。
以下は、REGZAからのリクエストにTversityが応答したXMLの情報です。
{code}
<?xml version=”1.0″ encoding=”utf-8″?>
<s:Envelope xmlns:s=”http://schemas.xmlsoap.org/soap/envelope/” s:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<s:Body>
<u:BrowseResponse xmlns:u=”urn:schemas-upnp-org:service:ContentDirectory:1″>
<Result>
<DIDL-Lite xmlns=”urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/” xmlns:dc=”http://purl.org/dc/elements/1.1/” xmlns:upnp=”urn:schemas-upnp-org:metadata-1-0/upnp/”>
<item restricted=”true” id=”0/3/9/12/687″ parentID=”0/3/9/12″>
<dc:title>テストムービー</dc:title>
<res protocolInfo=”http-get:*:video/mpeg:*” duration=”02:20:06.000″ size=”6508783616″>http://192.168.11.5:41952/getres/687/_file_.mpg</res>
<upnp:class>object.item.videoItem</upnp:class>
</item>
</DIDL-Lite>
</Result>
<NumberReturned>1</NumberReturned>
<TotalMatches>4</TotalMatches>
<UpdateID>1</UpdateID>
</u:BrowseResponse>
</s:Body>
</s:Envelope>
{/code}
例えば、<dc:title>タグの内容はREGZAの動画一覧に表示される文言です。
この情報の中で一番重要な役割を持っているのが<res>タグの情報になり、REGZAが“テストムービー”の動画を再生するために必要な情報が記載されています。以下の情報は、動画を視聴するためのアドレスになり、REGZAはこのアドレスにアクセスして動画を再生します。
{code}http://192.168.11.5:41952/getres/687/_file_.mpg{/code}
※プロトコルがHTTPなのでGETアクションで取得します。
<res>タグの属性として記述してある、[protocolInfo]、[duration]、[size]はコンテンツの再生に必要な付加情報です。
この辺の情報を頼りに調査を行っていたところ、どうもTVersityから返されたprotocolInfoの情報がREGZAでは識別しないっぽい事がわかりました。
{code}protocolInfo=”http-get:*:video/mpeg:*” {/code}
REGZAに識別させるには、以下の書式を
{code}DLNA.ORG_PN=MPEG_PS_NTSC;DLNA.ORG_OP=01;DLNA.ORG_CI=0{/code}
protocolInfoの最後が”*”(赤字)の場所と置換できれば動作するかもしれないことまではわかったのですが、さて、どうやって置換えるか・・・。
Intelの”UPnP Tool”を使ってTversityが対応する”ProtocolInfo”を調べました。
WMP12のProtocolInfoはこのような情報を出力します。
やはり、Tversity自体が対応していない?・・・。
ここで手詰まりかなぁ・・・。と関連ファイルを何気なく覗いてた時、Tversityでは、ライブラリフォルダ内に存在する、コンテンツの情報を”SQLite”というフリーのデータベースソフトを使用してファイルに格納していています。
その中にProtocolInfoの設定らしい文字を発見!!。
それを編集することにより、”ProtocolInfo”が拡張できるか試してみました。編集ツールとしてFirefoxのアドイン:”SQLite Manager”を使用しました
DBフォルダの”medialib.db”を開きます。
※C:\ユーザー\[自分のユーザー名]\AppData\Local\TVersity\Media Server\db
[Search]ボタンをクリックし、列:valueの検索条件を”contains”に変更し”http-get”で検索します。
見つかった”http-get:*:video/mpeg:*”を、
以下のように変更します。
“http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_NTSC;DLNA.ORG_OP=01;DLNA.ORG_CI=0”
サーバーを再起動して、MPEG2の動画ファイル:“テストムービー”を選択すると・・・、
視聴できました。 :o) よし、よし。
StatusにあるStreamingに“REGZAへ送ってます”情報が表示されます。
再度、パケットを監視してみると、protocolInfoが変更した内容になっています。
{code}
<?xml version=”1.0″ encoding=”utf-8″?>
<s:Envelope xmlns:s=”http://schemas.xmlsoap.org/soap/envelope/” s:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<s:Body>
<u:BrowseResponse xmlns:u=”urn:schemas-upnp-org:service:ContentDirectory:1″>
<Result>
<DIDL-Lite xmlns=”urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/” xmlns:dc=”http://purl.org/dc/elements/1.1/” xmlns:upnp=”urn:schemas-upnp-org:metadata-1-0/upnp/”>
<item restricted=”true” id=”0/3/9/12/687″ parentID=”0/3/9/12″>
<dc:title>テストムービー</dc:title>
<res protocolInfo=”http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_NTSC;DLNA.ORG_OP=01;DLNA.ORG_CI=0″ duration=”02:20:06.000″ size=”6508783616″>http://192.168.11.5:41952/getres/687/_file_.mpg</res>
<upnp:class>object.item.videoItem</upnp:class>
</item>
</DIDL-Lite>
</Result>
<NumberReturned>1</NumberReturned>
<TotalMatches>4</TotalMatches>
<UpdateID>1</UpdateID>
</u:BrowseResponse>
</s:Body>
</s:Envelope>
{/code}
REGZAは<res>タグに指定されたアドレスから、コンテンツをGETして再生します。
トランスコード無しですが、TVersityとREGZAでストリーミング配信が動作しました。”Protocolinfo”を適切に設定していないとREGZAからの視聴はできないようです。これはREGZAの仕様というよりも、DLNA対応機器の仕様なのでしょうか?。
「じゃあ、トランスコードを有効にしてMPEG2以外のファイルも同じような方法で!!」といきたいところですが・・・・。簡単ではなく、今のところ視聴できていません。 :-S
“PropValue”テーブルに存在する英字を日本語に変更すると、
できました!!!!
本当に私ひとりではできないことです!
非常にありがたい情報ありがとうございました。
26RE1 で TS も OK でした。
REGZA に認識させて選択するところまではたどり着いていたのですが、
“Protocolinfo” を変更するには Tversity 自体を変更するしかないと
あきらめていました。
なお、TS ファイルは、”medialib.db” 上では “http-get:*:video/mp2t:*”
となっており、同様に、
http-get:*:video/mp2t:DLNA.ORG_PN=MPEG_PS_NTSC;DLNA.ORG_OP=01;DLNA.ORG_CI=0
とすると再生できました。
情報とても有益でした。
コメントありがとうございます。 :o)
TSは”video/mp2t”になるのですね。 (Y)
こちらこそ有益な情報、ありがとうございます。
しばらく使っていたら問題が出ちゃいました。
”medialib.db” 変更後にファイルを追加すると、
“http-get:*:video/mp2t:*”が出来ちゃいました。
どうやら、http-get:*:video/mp2t:DLNA.ORG_PN=MPEG_PS_NTSC;DLNA.ORG_OP=01;DLNA.ORG_CI=0
に変更したため、ふたたび “http-get:*:video/mp2t:*” を作っちゃうんですね。
こうなっちゃうと “http-get:*:video/mp2t:*” を作り直さないとだめそうです。
そんな動きになってしまうのですね。。
SQLiteはトリガーが作成できるので
SQLiteのレコード追加終了時(コンテンツ追加時)に
protocolInfoを無条件で更新するようなトリガーを作成しておけば
自動でいけるかもしれないですね。 :o)
今度、試してみます。 :-$
とても素晴らしい記事で感服しています。ところで・・・
REGZA 19RE2で挑戦、REGZAとPC(WIN7)で
REGZAへMPEG2をストリーミング配信を挑戦しています。
やっとREGZAの画面に「TVersity」のFOLDERがでてきました。ありがとう御座います。
そのあと上記手順のとおり、なんども確認して、http-getの部分を書き換えましたが、
「TVersity」のStatusのところに、「error-can’t watch folder]と出て、streamingができません。
アドバイスいただければと思います。
どこか間違いやすいところや、確認方法があればご教授ください。
tetuharaki さん
こんばんは 管理人です。 :-$
デフォルトでは、ユーザー内とパブリック内のビデオフォルダが
公開されています。私もこのフォルダへコンテンツを格納しています。
エラーメッセージから推測するとセキュリティが関係しているかもしれません。
もし、デフォルト以外のフォルダへコンテンツを格納し、公開している場合は、
そのフォルダのセキュリティを変更する必要があるのかもしれません。
それ以外で注意すべき点として、
私が記載したProfileはトランスコーディングに関する記述を省いています。
ここの記事のようにトランスコードを使用しないように設定を変更しないと
コンテンツのフォーマットによってはTVersityが異常終了します。
あと、SQLiteManagerで変更を終了したら、念のためにデータベースを
閉じるようにします。
こんなところでしょうか。
今試してみましたが、問題なくMPEG2のストリーミングは成功しました。 (V)
バージョンは1.9.7です。
ありがとうございました。再度、忠実にやってみます。
「error-can’t watch folder]はでなくなりました。
まだmpegが再生できません。頑張ってみます。
アドバイスありがとう御座います。完全に手詰まりです。
もうひとつアドバイスを戴ければと思います。
REGZAの代わりに、NOTE PCをつなぎますと、NOTE PCから、
TversityのFolederがでてきて、画像JPEGを再生しますと、
サーバーのTversityのStatusにStreamingが表示され、つながりました。OKです。
同じ条件で、REGZAに設定しなおすと(IP アドレスをRGZAにあわす)、
FOLDERは表示されますが、画像はです、「検索中にエラーが発生しました」と出ます。
トランスコードは停止しています。
またmpeg2しかTVersityは対応しませんか、私はmpeg1の動画です。
知識がないのでご指導ください。
ちなみにhttp-getの書き換えで、”http-get・・・”の ” ”は不要ですね。
完全に手詰まりですアドバイス戴ければと思います。
tetuharaki さん こんばんは。 :-$
私がTVersityでJPEG画像を表示した際は、
動画と同じようにProtocolInfo(“http-get”)を書き換えました。
以下の記事を参考になさってください。
⇒ DLNAサーバーを試す[TVersity編] – 写真(jpeg)を見れるようにする
私が所有している”REGZA Z9000″はMPEG2フォーマットの動画しか視聴できません。
そのためMPEG2フォーマットのストリーミング配信を行っています。
ストリーミング配信でまず重要なのはクライアント(REGZA)が
どのフォーマットの動画が再生できるのかを調べることです。
REGZAで再生できる動画フォーマットは限られているので
再生できるフォーマットの動画を用意します。
TVersity側はREGZAからのリクエストに対し、
単純ファイルを配信しているだけなのでフォーマットは重要ではありません。
“http-get”を書き換えているのは、クライアント(REGZA)が
Tversity標準のProtocolInfo(“http-get”)ではコンテンツを認識しないためです。
例として記述した前後のダブルクォーテーションは不要です。 :-$