2013年11月20日水曜日

mediatomb 設定(忘れないうちに)

さて、 mediatomb 関連の設定について、忘れないうちに。

●Firewall

Fedoraのいつからかは知りませんが、 iptables から firewalld にかわった模様です。
個人的には、慣れた(?) iptables の方がわかりやすいですが
それこそ慣れの問題だろうということで。

該当の Fedora19 はホームネットワーク上にあり、公開もしていませんが
なぜか firewalld 上は DMZ ゾーンに設定しています。

該当 zone に設定している mediatomb 関連のポートは以下の3点
50500/tcp ,  50500/udp,   1900/udp

50500 は mediatomb で使用 (udp はいるかいらないかわかりませんがとりあえず設定)
1900 は UPnP です。

● config.xml
mediatomb のメイン設定。 基本的なところは検索すればすぐに出てくるので
主なところ、躓いたところだけ。
。。とは言いつつも、テスト的に入れた設定があれこれ混ざっていて整理されていませんが…

・Protocol Info
<protocolInfo extend="yes"/>

PS3 向け設定、という感じで config.xml にも mediatomb の Documentation にも記載されています。
ただし、これを yes に変更しないと viera のリモコンでの 早送り、30秒スキップ、一時停止操作などを行った際に”操作はできません”というような内容のメッセージがテレビに表示されてしまいました。

・ MIMEタイプマッピング
<map from="avi" to="video/divx"/>
たまたま手持ちの動画の形式が  ファイル:avi ,  映像:DivX,  音声:mp3 だったので
この設定を追加(というかコメントを外して有効化)
他にもネット情報に基づきいろいろ追記。

・トランスコード設定
<transcode mimetype="video/divx" using="ffmpeg-viera"/>

video/divx の MIME タイプが来たら ffmpeg-viera という Profile を使用する設定

・プロファイル設定
      <profile name="ffmpeg-viera" enabled="yes" type="external">
        <mimetype>video/vnd.dlna.mpeg-tts</mimetype>
        <accept-url>no</accept-url>
        <first-resource>yes</first-resource>
        <hide-original-resource>yes</hide-original-resource>
        <agent command="/xxx/bin/ffmpeg-viera" arguments="%in %out %seconds" can-seek="yes"/>
        <buffer size="14400000" chunk-size="512000" fill-size="1024000"/>
      </profile>

mimetype は Viera で受け付けるという(どなたかのページで見た)情報をもとに
vnd.dlna.mpeg-tts を指定。  video/mpeg でも動いた記憶あり。
ここで、 DLNAの Profile ID など (DLNA.ORG_PN=MPEG_PS_NTSC;DLNA.ORG_OP=10;DLNA.ORG_CI=1 など) を指定するという情報もあったものの
それを追加すると 「再生できないフォーマットです」 の病気にかかるため
結局記載せず。 
DLNA.ORG_* については少し調べたものの結局全く分からず…

agent については、 ffmpeg-viera というスクリプトを指定。
引数には %in, %out 以外に、 タイムシーク用の  %seconds と can-seek="yes" を追加

buffer については、サンプル等を見ながら指定。 fill-size と chunk-size の大小関係が
これでよいのかよくわからないがとりあえず。。

first-resource や  hide-original-resource も、細かくはいろいろありそうですが
ネット上のほかの人ほど詳しくもないのでとりあえず yes 指定。

●トランスコーディングスクリプト
トランスコードのスクリプト自体は省略。 これもこの先細かく調整していこうと思っています。
コアな部分だけ。

exec "/bin/ffmpeg"
   -threads 2
   -ss "プロファイルの%seconds"
   -i "プロファイルの%in"
   -vcodec mpeg2video
   -b:v 4096k
   -aspect 16:9
   -acodec mp2
   -b:a 192k
   -ac 2
   -f mpegts
   - > "プロファイルの%out" 2>>${LOGFILE}

※改行しています。
オプションは ffmpeg のマニュアル等を参照。 (結構変わるらしい)
ポイントとしては以下のとおり
・ exec で実行 (終了時に mediatomb から kill できるように)
・ -ss は -i の前 (シーク時にデコードしながらシークしないように)
・ -f で指定するフォーマットはトランスコードプロファイルで指定した mimetype と形式が一致するように

その他
・ -thread 2 : たまたま 2 thread 実行できる環境なので
・ 2>>${LOGFILE} : ログは取得する派です。そこそこ出るので消すのもお忘れなく。
・ 当然実行権限要 (1度ぐらいは必ず忘れる)

ここまで来るのにもネット上の色々な方のページを参考にさせていただきました。
ありがとうございます。

次はようやくタイムシークのための再コンパイルについて。

0 件のコメント:

コメントを投稿