recpt1更新その2
先週の続き。
BSの周波数変更を取り込んだrecpt1、チェックしたらいきなりひっかかった。NHKBSプレミアムが映らない。
ぐぐっても周波数変更後にトラブった話が出てこないので、おま環?と久しぶりにPT1/2とPT3のドライバソース読んだりしたけど、最終的にrecpt1だった。。
というか、わたしのせいです。ごめんなさい。元のLinux chardev版がioctl制御だったのを、なんとなくsysctl制御に変えたせい。recpt1のFreeBSDパッチを作られた方が対応されてたのだけど、ioctlの引数(struct FREQUENCY {int freqno, int slot})を、sysctlの引数(int)にそのまま渡してるので、slotが消えちゃう。
ただ、これだとBSプレミアムは移動前から映ってなかったはずや。。とりあえず貼っときます。
続きを読むrecpt1更新
FreeBSDでPT2/PT3を使う [努力したWiki] からいただいた、FreeBSD版recpt1 2017/05/14を使わせてもらってます。
そのベースのSTZ版
https://github.com/stz2012/recpt1 で対応されている周波数変更を取り込みたかったのだけど、毎度手パッチするの面倒なので、git環境を作っとこうかということでメモ。
$ git clone https://github.com/stz2012/recpt1.git Cloning into 'recpt1'... remote: Counting objects: 203, done. remote: Compressing objects: 100% (16/16), done. remote: Total 203 (delta 9), reused 22 (delta 9), pack-reused 178 Receiving objects: 100% (203/203), 144.01 KiB | 556.00 KiB/s, done. Resolving deltas: 100% (96/96), done. $ cd recpt1
recpt1 2017/05/14は「Latest commit 00df64e への差分適用」だそうなので、FreeBSDブランチ作って、その状態を再現。
$ git checkout -b freebsd 00df64e Switched to a new branch 'freebsd' $ git branch * freebsd master $ tar xzf ../../../work/recpt1/freebsd-019-recpt1_20170514.tar.gz $ git status On branch freebsd Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: recpt1/checksignal.c modified: recpt1/pt1_dev.h modified: recpt1/recpt1.c modified: recpt1/recpt1core.c modified: recpt1/recpt1core.h no changes added to commit (use "git add" and/or "git commit -a") $ git add -u $ git commit -m 'apply freebsd patch' [freebsd 9655703] apply freebsd patch 5 files changed, 200 insertions(+), 90 deletions(-)
STZ版最新(本日時点で 36a3f40)を取り込み
$ git rebase master First, rewinding head to replay your work on top of it... Applying: apply freebsd patch Using index info to reconstruct a base tree... M recpt1/pt1_dev.h M recpt1/recpt1.c M recpt1/recpt1core.c M recpt1/recpt1core.h .git/rebase-apply/patch:266: trailing whitespace. warning: 1 line adds whitespace errors. Falling back to patching base and 3-way merge... Auto-merging recpt1/recpt1core.h Auto-merging recpt1/recpt1core.c Auto-merging recpt1/recpt1.c Auto-merging recpt1/pt1_dev.h
最後にbuild。gitになったのでversion.hで怒られなくなった。
$ ./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 config.status: config.h is unchanged $ 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 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
おれおれDLNAサーバその2
うーん、細かいところがいろいろおかしい。
REGZA
突然browseで「コンテンツ情報取得中にエラーが発生しました」と出て、アクセスできなくなってしまった。メディアプレイヤーを起動するとM-SEARCHが飛んできて、機器選択はできるけど、選択してもMediaServerへのリクエストが飛んでこずに、いきなり上のエラー画面。
MediaServer側はちくちく変えてるけど、SSDPの内容は変えてなくて、なんでリクエストが飛んでこないのかわからん。。MiniSSDPDの再起動でもだめ。
エラーになる前は普通に、ブラッククローバーを観てたのだけど。次のを見ようとして止めたらおかしくなった。TVをリセットしないとだめかなあ。
VidON
ソート順を指定しても再リクエストが飛んでこないので、内部でリストをソートしてるっぽい。タイトル順はよさそうだが、日付順が効いてない。dc:dateの中身を間違ってるのか、dc:date以外の何かが要るのか?
おれおれ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 $