MediatombをビエラのDLNAサーバとして使用しはじめて1年以上になるが、どうしても解決できない問題が1点だけあった。
それは、Mediatombでトランスコードをするように設定した場合、ビエラ側に映像のサムネイルが表示できないのである。というより、サムネイルは表示されるのだが映像がトランスコードされず、映像を選択すると、サムネイルが表示されてしまうのである。
他のデバイス(PS3やレグザ、ブラビアなど)では問題がないようで、ビエラ特有の問題のようである。また、ビエラ特有のバグなのかと思い、いろいろとググってみたが誰も問題視しておらず解決方法も載っていなかった。
仕方が無いので、Mediatombとビエラのパケットをキャプチャして色々なテストを繰り返すことでビエラの挙動がわかってきた。
まず、ビエラからMediatombにコンテンツ一覧の要求があった場合、以下のようなXMLデータが返される。
トランスコードのみ |
トランスコードとサムネイル |
最初、ビエラ側のバグで3つの<res>タグがあると受け取れないのかと思い、いろいろ調べるとMediatombのconfig.xmlの設定でオリジナルリソースを表示させないようにできることがわかった。
<hide-original-resource>yes</hide-original-resource>
上記のように設定すると以下のようなXMLデータが返される。
オリジナルリソースを削除 |
次に、<res>タグの順番が問題なのかと思い、Mediatombのconfig.xml設定で以下のようにしてトランスコードの<res>タグが一番下にくるように設定した。
<first-resource>no</first-resource>
この場合、以下のようなXMLデータが送られる。
タグの順番を変更 |
もう、原因がわからなかったので、しばらく放置していたが、あることに気がついた。DLNA.ORG_OP=XXの記述である。
オリジナルリソースの場合は、バイトシークなので DLNA.ORG_OP=01;DLNA.ORG_CI=0 である。
トランスコードの場合は、タイムシークなので DLNA.ORG_OP=10;DLNA.ORG_CI=1 (タイムシークで無ければ、DLNA.ORG_OP=00;DLNA.ORG_CI=1)である。
で、サムネイルを見てみると、DLNA.ORG_OP=01;DLNA.ORG_CI=0 となっている。
そこで、サムネイルにも、DLNA.ORG_OP=10;DLNA.ORG_CI=1 で送信するようにソースを変えてみると、サムネイルも表示されて映像も見れるようになった。
以下が、その場合のXMLデータです。
ORG_OP=10とした場合 |
で、ORG_OP=01のjpeg画像があって、ORG_OP=10の映像があっても、ORG_OP=01のjpeg画像を優先して再生してしまうようである。
<upnp:class>object.item.videoItem</upnp:class>とし指定して、ビデオ映像であると指定されているにも関わらず、jpeg画像を表示しているのである。
う~ん、やっぱりパナソニックのSEのレベルと言うか考え方が良くわかりません。バイトシークの32bitバグの件にしても、今回の件にしてもパナはいまいちですね。
上記のような挙動になるようにするには、Mediatombのソースを改造する必要があります。パッチは、(ここ)に置いておきます。私の場合、タイムシーク対応パッチを当てているので、それとの差分となります。一応、標準のトランスコードとタイムシーク対応トランスコードとオリジナルでのパケットが正しくなっているのを確認しましたが、我が家にはビエラ1台しかないので、その他のデバイスでは動作確認できませんでした。
また、サムネイルのキャッシュ対応パッチを当てると(サムネイル表示が高速になり)非常に快適な環境を作ることができます。
私の場合、<res>タグの順番は、1.オリジナル、2.サムネイル、3.トランスコードの順番のままにしています。というのは、PCからXBMCなどで再生する場合、先頭の<res>タグしか見ていないようで、そこにトランスコードのタグがあると、トランスコードされてしまいシークバーが使用できないからです。先頭にオリジナルタグがあれば、直接再生するのでシークバーも使用可能になります。
以上です。
後は、レジューム機能があればいいな~って思ってます。
0 件のコメント:
コメントを投稿