おれおれ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
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でくればいいのに。
サーバ更新その3
foltiaのインストール先/home/foltiaはまるごとrestoreしたけど、周りがいろいろ足りてない。。次にやるときのメモ。
pkg
# pkg install apache24 php72 php72-extensions mod_php72 # pkg install ja-p5-jcode p5-dbd-sqlite p5-schedule-at p5-libwww
smartyは、php56と紐づいちゃってたので、portsからインストール。
# cd /usr/ports/www/smarty ; make install
epgdump
# pkg install cmake $ git clone https://github.com/Piro77/epgdump.git $ cd epgdump $ cmake . $ gmake
mediainfo
なぜかpkg/portsは、MediaInfoDLL_Static.hをインストールしてくれないので、手で叩く。
# cd /usr/ports/multimedia/libmediainfo # make # cd work/MediaInfo_CLI_GNU_FromSource/MediaInfoLib/Project/GNU/Library # game install # cd /usr/ports/multimedia/libmediainfo # make install
at
起動間隔を1分ごとに
# vi /etc/crontab */1 * * * * root /usr/libexec/at-run
サーバ更新その3
recpt1で録画いけたー。しかしこれ、ぐぐると出てくる手順だけでは、configureでlibarib25、gmakeでpt1_ioctl.hが見つからんがな。。。一応貼っとく。
$ fetch http://hgotoh.jp/wiki/lib/exe/fetch.php/documents/freebsd/freebsd-019-recpt1_20170514.tar.gz $ tar xzf freebsd-019-recpt1_20170514.tar.gz $ cd recpt1 $ ./autogen.sh Generating configure script and Makefiles for recpt1. Running aclocal ... Running autoheader ... Running autoconf ... $ LDFLAGS=-L/usr/local/lib ./configure --enable-b25 checking for gcc... no checking for cc... cc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether cc accepts -g... yes checking for cc option to accept ISO C89... none needed checking for create_arib_std_b25 in -larib25... yes checking for log10 in -lm... yes checking for pthread_kill in -lpthread... yes configure: creating ./config.status config.status: creating Makefile config.status: creating config.h $ gmake CPPFLAGS='-I../driver -I/usr/local/include' LDFLAGS=-L/usr/local/lib revh="`git rev-list HEAD | wc -l 2> /dev/null`"; \ if [ -n "$revh" ] && [ "$revh" != "0" ] ; then \ echo "const char *version = \"rev.$revh by stz2012\";" > version.h; \ else \ echo "const char *version = \""c8688d7d6382_with_http_server_RC4 by stz2012"\";" > version.h; \ fi fatal: Not a git repository (or any parent up to mount point /) Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). cc -MM recpt1.c decoder.c mkpath.c tssplitter_lite.c recpt1core.c recpt1ctl.c recpt1core.c -I../driver -I/usr/local/include > .deps cc -O2 -g -pthread -I../driver -I/usr/local/include -c -o recpt1.o recpt1.c cc -O2 -g -pthread -I../driver -I/usr/local/include -c -o decoder.o decoder.c cc -O2 -g -pthread -I../driver -I/usr/local/include -c -o mkpath.o mkpath.c cc -O2 -g -pthread -I../driver -I/usr/local/include -c -o tssplitter_lite.o tssplitter_lite.c cc -O2 -g -pthread -I../driver -I/usr/local/include -c -o recpt1core.o recpt1core.c cc -L/usr/local/lib -o recpt1 recpt1.o decoder.o mkpath.o tssplitter_lite.o recpt1core.o -lpthread -lm -larib25 cc -O2 -g -pthread -I../driver -I/usr/local/include -c -o recpt1ctl.o recpt1ctl.c recpt1ctl.c:86:43: warning: format specifies type 'int' but the argument has type 'key_t' (aka 'long') [-Wformat] fprintf(stderr, "Pid = %d\n", key); ~~ ^~~ %ld 1 warning generated. cc -L/usr/local/lib -o recpt1ctl recpt1ctl.o recpt1core.o -lm cc -O2 -g -pthread -I../driver -I/usr/local/include -c -o checksignal.o checksignal.c cc -L/usr/local/lib -o checksignal checksignal.o recpt1core.o -lpthread -lm $
サーバ更新
録画サーバとして使い始めると、なかなか止められなくて、ハードもOSも変えずに使い続けてたわけですが、
例の年末セールの安鯖TX1310M1を手に入れて、お引越し中です。
ようやくOSを更新できるよ。。9.1-STABLE(2013-05-27)から、11.1-RELEASEへ。
インストーラでZFS rootできるやん。。なんて優しい世界。
HDDの移行が大変。。nfs mountしてcp、rsync+ssh より、たぶんzfs recv/send+netcatが最速じゃないかということで、
新サーバ# nc -w 120 -l 12345 | zfs recv -v zroot/home 元サーバ# zfs snapshot ztank/home@export 元サーバ# zfs send ztank/home@export | nc 新サーバ 12345
さて、一晩で終わるか?。。
問題は、PCIがないのよね。。入手してから数年?使ってなかったPT3が、ついに日の目を見る時がきた。。Piro77さんのドライバ使わせていただきます。なにはなくとも録画が動かないと、引っ越しどころではない。