おれおれDLNAサーバ

最後にcommitしたのが2016/9/10だったので、いじるの2年近くぶりかー。

ずーっとfoltia+PT2でTS録画、2018/01からはPT2をPT3に変えた。
これを観るのはBravia KDL-40ZX1で、ここに自家製DLNAサーバで配信。たまにKindleのVidON Player HDも使うけど、DLNAサーバは特にいじらなくても見えてた。

先日、REGZA 50Z810Xをお迎えしたので、こいつのメディアサーバからアクセスしてみると、「このコンテンツは再生できません」。。なにー。
というわけで、REGZAに対応してるというPMS for REGZAの通信を真似ながらいじって、ようやくうまくいった気がするのでメモ。

res@protocolInfo

BraviaとVidON

video/mpeg:DLNA.ORG_PN=MPEG_TS_HD_60_L2_ISO

REGZA

video/mpeg:DLNA.ORG_PN=MPEG_PS_NTSC

PMSはvideo/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_NA
なんてのも返してるけど、これが無くても見えてる。

おまけ

BraviaREGZAは1つのprotocolInfoにカンマ区切りで並べて書いてもOK、VidONは別のにしないとダメだった。

30秒スキップ

Bravia

res@protocolInfoでDNLA.ORG_OP=11;DLNA.ORG_FLAGS=61100000000000000000000000000000 として、さらにHEAD/GETのgetcontentFeatures.dlna.org: 1 に応じてcontentFeatures.dlna.org: DLNA.ORG_PN=MPEG_TS_HD_60_L2_ISO;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=61100000000000000000000000000000 を返してやると、再生中に上キーが押せるようになる。

押すと、GETでTimeSeekRange.dlna.org: npt=30.773- みたいなのが飛んでくるので、これに合わせて30.773秒あたりからのデータを返してやればOK。

REGZA

Braviaと同じres@protocolInfoを返しても、TimeSeekRange.dlna.orgじゃなくRangeリクエストで来る。getcontentFeatures.dlna.org: 1は付いてない。まあこっちのほうが簡単なのでOK。

VidON

30秒スキップがないのでシークバーの適当なところをtapすると、GETアクセスは来るけどRangeの値がおかしい。その通りのデータを返すと、以降の再生が壊れる。
bitrateからbyte rangeの計算するとこがoverflowしてるんじゃないかなあ。TimeSeekでくればいいのに。

ソート

これがいけてない。。

Bravia

SortCriteriaを -dc:date みたいに指定してくるので、結果をソートして返してやればOK。

REGZAとVidON

SortCriteriaが空で、日付ソートして返しても表示はばらばらになる。。見づらい。。

そのほか

Bravia

コンテンツを選択するたびにHEADが1回、GETが2回飛んでくる。HEADはともかく、30分で4GB近くなるファイルを2つ開かなくてもよかろうに。。

REGZA

HEADの代わりに先頭1443040byteのRange付きGET1つと、普通のGET2つが飛んでくる。
しかもタイトルをフォーカスすると画面左上に小さいサイズのpreviewが出るけど、ここについてもコンテンツアクセスが来るので、タイトル選択を上下に動かすたびにGETが3回くる。。

VidON

コンテンツ選択ごとにGET1回だけ。しかもKeep-Aliveでくる。エコだ。