2012年7月25日水曜日

epgrec BS/CSチャンネル変更追従(DVB) テスト

前に改造したやつ。
(設定メモ: epgrec BS/CSチャンネル変更追従(DVB))
 またCSチャンネルが変わったみたいなのでテスト。

s2scan -a 2  -c > cs_channels.txt

diff /usr/local/etc/cs_channels.txt cs_channels.txt
< 時代劇専門チャンネル:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1693000|DTV_ISDBS_TS_ID=0x7060:292
24d22
< テレ朝チャンネル:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1813000|DTV_ISDBS_TS_ID=0x70c0:303
27c25
< 朝日ニュースター:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1813000|DTV_ISDBS_TS_ID=0x70c0:352
---
> キッズステーション:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1813000|DTV_ISDBS_TS_ID=0x70c0:330
29a28,30
> 時代劇専門chHD:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1853000|DTV_ISDBS_TS_ID=0x70e0:292
> ファミリー劇場HD:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1853000|DTV_ISDBS_TS_ID=0x70e0:293
> スーパー!ドラマHD:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1853000|DTV_ISDBS_TS_ID=0x70e0:310
32d32
< スーパードラマ:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1893000|DTV_ISDBS_TS_ID=0x7100:310
43,44d42
< ファミリー劇場:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=2013000|DTV_ISDBS_TS_ID=0x7160:293
< TBSチャンネル:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=2013000|DTV_ISDBS_TS_ID=0x7160:301

sudo cp cs_channels.txt /usr/local/etc/
チャンネル追加と、前に変わったときの旧チャンネルが消えたみたい。
とりあえず、getepg.phpを実行。

キッズステーションが、同じ名前でダブってる。
同じ名前だけどチャンネル番号が違うからチャンネルでキーワード予約してたらやり直さないといけない。それ以外は大丈夫そう。

s2scanをcronで定期実行しようかとも思ったけど、
scan失敗したらチャンネル全部消えるみたいなことになりそうだから止めとこ。

2012年7月22日日曜日

PT2(DVB)安定化検討中

温泉行って血行がよくなったせいか、昨日の夜は何か頭痛がひどかった。
久々に早寝早起きだったので、pt2の検討。
 今は/dev/dvb/adapter?/dvr0から、ddで取り込んでいる。
(設定メモ: PT2(DVB), epgrec用do-record.sh)

dd -> b25 -> tssplitter_lite -> dd -> file
とりあえず最初のddにconv=noerrorを入れてあるので、途中で多少データが落ちても止まらない。
ただ、複数チャンネル録画とかすると、ちょくちょくデータを落とす。

dd: reading `/dev/dvb/adapter0/dvr0': Value too large for defined data type

で、負荷が高いときにドライバからのリードが追いつかないような気がしているので、
最初のddの優先度を高くして、後の処理はnice値大きめにしてある。

これでしばらく動かしてみたけど、闇雲に最初のddの優先度を高くしてみてもあまり効果がないようだった。
とくに一番最初にドライバからデータがとれない場合、完全にダメになってしまう。
どうもドライバの方が間に合って無いのかなという気がしてきた。
なのでreniceでカーネルのpt1ドライバのスレッドの優先度を上げてみることにした。

root       556  0.0  0.0      0     0 ?        S    Jul09   0:57  \_ [jbd2/sda1-8]
root       559  0.0  0.0      0     0 ?        S<   Jul09   0:00  \_ [ext4-dio-unwrit]
root       605  0.0  0.0      0     0 ?        S<   Jul09   0:00  \_ [hd-audio0]
root       723  2.1  0.0      0     0 ?        S<   Jul09 420:43  \_ [pt1]
root     29253  0.0  0.0      0     0 ?        S    Jul14   1:01  \_ [flush-8:16]
root     14602  0.0  0.0      0     0 ?        S    04:12   0:04  \_ [kworker/0:3]
root     28225  0.0  0.0      0     0 ?        S    07:34   0:00  \_ [kworker/1:1]

になっているから、

renice -n -20 -p 723
とやってみた。
ちょっとはマシになったような気もするけど。うーん。どうだろう。
あんまり変わらないような気もする。


録画はじめてしばらくすると大丈夫っぽいので、マシンスペックのせいでも無いと思うんだけど。

まだちょっと頭が痛いのでもう休もう。

2012年7月19日木曜日

screenでマウススクロール

~/.screenrcに以下を書いておくといいらしい。忘れないうちにメモ。
(http://osdir.com/ml/screen-users-gnu/2010-01/msg00005.html)

termcapinfo linux ti@:te@
termcapinfo xterm ti@:te@
termcapinfo xterm-color ti@:te@

ubuntu 12.04のbyobuはどうもデフォルトtmuxみたいだけど、エスケープキーが^Aから変えられない。
UIで変更できたように見せかけて実際は変わってなくてイラついたので (本当は何かやり方があるんだろうけど)

backendをscreenに変更して使用中。
12.04より前だとmake menuconfigとかが激しく崩れてたと思うけど、12.04では問題無し。

byobuでscreenつかってても~/.screenrcは読み込まれるみたいなので、
上の設定は~/.screenrcに書いておく。

2012年7月16日月曜日

epgrecの録画済みファイルをmplayerで見る

うちのPCだとvlcは重すぎでまともに見れない。
ローカルでしか見ない(見れない)のに、HTTP経由で見るのも負担。
なのでローカルで直接mplayerで見るように変える。

とりあえずダウンロードされるasxファイルを直接ローカルを指すように変える。
diff --git a/viewer.php b/viewer.php
index 4db8f17..fc4623c 100755
--- a/viewer.php
+++ b/viewer.php
@@ -37,8 +37,9 @@ try{
        echo "<ASX version = \"3.0\">";
        echo "<PARAM NAME = \"Encoding\" VALUE = \"UTF-8\" />";
        echo "<ENTRY>";
-       if( ! $rrec->complete ) echo "<REF HREF=\"".$settings->install_url."/sendstream.php?reserve_id=".$rrec->id ."\" />";
-       echo "<REF HREF=\"".$settings->install_url.$settings->spool."/".$rrec->path ."\" />";
+       #if( ! $rrec->complete ) echo "<REF HREF=\"".$settings->install_url."/sendstream.php?reserve_id=".$rrec->id ."\" />";
+       #echo "<REF HREF=\"".$settings->install_url.$settings->spool."/".$rrec->path ."\" />";
+       echo "<REF HREF=\"".INSTALL_PATH.$settings->spool."/".$rrec->path ."\" />";
        echo "<TITLE>".$title."</TITLE>";
        echo "<ABSTRACT>".$abstract."</ABSTRACT>";
        echo "<DURATION VALUE=";
@@ -49,4 +50,4 @@ try{
 catch(exception $e ) {
        exit( $e->getMessage() );
 }
-?>
\ No newline at end of file
+?>

asxファイルを受け取って再生させるスクリプトを作って適当な名前でパスを通す。
(邪魔なので見た後はasxファイルを消すようにした。)

listmplayer.sh
#!/bin/bash
mplayer -xy 720 -fs -playlist "$1"
DIRNAME=`dirname "$1"`
rm -f ${DIRNAME}/*.ts*.asx

firefoxとかでasxファイルを開くときに↑のスクリプトを関連付ける。
とりあえずこれで録画済一覧ページからクリックでmplayerで再生できる。


.mplayer/configは今のところ以下。なんでこうなったかは覚えてない。
つまんない番組は]キーで加速する。(見なきゃいいんだけど)
音の高さが変わって聞き取れなくなっちゃうのでaf=scaletempoをいれてある。


[default]
# Write your default config options here!
#hardframedrop=1
framedrop=1
#hardframedrop=1
cache=8192
lavdopts=fast=1:threads=2
noslices=1
quiet=1
nocorrect-pts=1
ao=pulse
af=scaletempo

TV録画しながらTV見ながらラジオ録音しながらrep2動かしたりしてると
さすがにATOMだと重いような気がしてきた。
とくにtssplitter_lite通すと録画開始してしばらくドロップが激しい時がある。
本当にPCスペックのせいかどうかは分からんけど、
ハードウェア支援のあるPCで低消費電力なやつをそろそろ探したい。


2012年7月10日火曜日

epgrecの録画済み一覧

epgrecの録画済み一覧にthumbnailがでるけど、
jpgが作られたり作られなかったり、作られててもphpから正しくリンクされなかったり、
怪しい。

とりあえずの調べてみた結果、

1. gen-thumbnail.sh
 OUTPUTファイル名がスペースを含むと、コマンドが失敗するのではないか。
 ということで、

${FFMPEG} -i "${OUTPUT}" -r 1 -s 160x90 -ss ${offset} -vframes 1 -f image2 "${THUMB}"
 と言う感じで、OUTPUTとTHUMBを""で囲った。
 まだあまり試してないので様子見。

2. urlencodeの問題
 ファイル名はurlencodeされてブラウザへ送られてくる。
 どうも、#つきのファイル等、記号を含んだファイル名のものは、jpgファイルがあるのに
 サムネイルが表示されない。

 サムネイルのURLの生成に使われているhtmlentities($r->path, ENT_QUOTES, "UTF-8")の結果、
 #記号が処理されずに途中で切れているように見える。
 とりあえず全部UTF-8なので、rawurlencode($r->path)とすることで、ある程度解決したかもしれない。
 まだあまり試してないので様子見。

2012年7月8日日曜日

epgrec BS/CSチャンネル変更追従(DVB)

CSは何かチャンネル変更が頻繁に起こるみたい。
chardev版は多分色々やる人がいるだろうけど、
DVB版でepgrec使う人はそんなにいないだろうから、自分で何とかする必要がある。

チャンネル情報は、s2scanでスキャンすればとってこれる。

s2scan -a 2 -b > bs_channels.txt
BS朝日1:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1049480|DTV_ISDBS_TS_ID=0x4010:151
BS朝日2:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1049480|DTV_ISDBS_TS_ID=0x4010:152
BS朝日3:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1049480|DTV_ISDBS_TS_ID=0x4010:153
BS−TBS:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1049480|DTV_ISDBS_TS_ID=0x4011:161
...

s2scan -a 2 -c > cs_channels.txt
TBSチャンネルHD:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1613000|DTV_ISDBS_TS_ID=0x6020:296
テレ朝チャンネルHD:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1613000|DTV_ISDBS_TS_ID=0x6020:298
朝日ニュースターHD:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1613000|DTV_ISDBS_TS_ID=0x6020:299
ザ・シネマ:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1653000|DTV_ISDBS_TS_ID=0x7040:227
ホームドラマCH:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1653000|DTV_ISDBS_TS_ID=0x7040:294
...

取ってきたファイルを/usr/local/etcに置くことにして、
とりあえず以下3つに対処が必要。
それぞれs2scanで取ってきたデータを使うように変更すればいいんじゃないか。

  • tune
  • epgdump
  • epgrec
tune/epgdump

どっちもcで書かれてて、チャンネルテーブルをコード直書きで定義しているだけなので、
s2scanで作ったファイルを読んでテーブルを置き換えればいい。
ただ、tuneはCSも読めるように改造する必要がある。

newtune.c
readchannels.c

epgdumpの方は、上のreadchannelsをリンクして、
ひととおりテーブルが読み終わった後にすげ替えればいい。

475     pStas = calloc(1, sizeof(STATION));
476     pStas->tsId = svtcur->transport_stream_id ;
477     pStas->onId = svtcur->original_network_id ;
478     pStas->svId = svtcur->event_id ;
479     pStas->ontv = arg_onTV ;
480     pStas->name = svtcur->servicename ;
481     staCount = 1;
482   }
483   read_channels_epgdump(arg_onTV, &pStas, &staCount);
484
485   fprintf(outfile, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
486   fprintf(outfile, "<!DOCTYPE tv SYSTEM \"xmltv.dtd\">\n\n");
487   fprintf(outfile, "<tv generator-info-name=\"tsEPG2xml\" generator-info-url=\"http://localhost/\">\n");

epgrec

epgrecもテーブルがあるだけなので、同じようにファイルを読んで置き換えればいいはずだけど、
正直phpは分からん。 文字コードの扱いがうまくいってない気がするけど、とりあえず動く状態。

readchannels.php

config.phpの$BS_CHANNELS_MAP, $CS_CHANNELS_MAPを作り終わった後に読み込んですげ替えればいい。

include_once( INSTALL_PATH . '/readchannels.php');

ontvjapan.comの番号はとくに意味ないみたいなのでBSは4000番台, CSは5000番台にした。

チャンネル番号はすべてプログラム番号に変えて、プログラム番号を受け取ったらtuneの方で対応する。
なので、BS/CSの取得チャンネルは以下のように変更。

// BS/CSでEPGを取得するチャンネル
// 通常は変える必要はありません
// BSでepgdumpが頻繁に落ちる場合は、受信状態のいいチャンネルに変えることで
// 改善するかもしれません

define( "BS_EPG_CHANNEL",  "211"  );    // BS
define( "CS1_EPG_CHANNEL", "CS55"  );   // CS1
define( "CS2_EPG_CHANNEL", "CS300" );   // CS2
チャンネルがガラッと変わるので、mysqlの方は旧チャンネルのデータを落とした。
どんなコマンドを実行したかは忘れた。

追記:とりあえずまとめて以下
http://tthhfugapiyo.blogspot.jp/2014/06/epgrecdvb.html

PT2(DVB), epgrec用do-record.sh

TVの録画にepgrecを使いたい。
ただ、chardev版はカーネルのバージョンアップごとに更新しないといけない(頻繁にUPするのでめんどい)し、
ubuntu 12.10でやってみたら入らなかったので除外。
DVB版で使うことにする。

DVB版でepgrecを使うには、do-record.shに工夫が必要。
まず、epgrecから渡されるTUNERは適当なので、無視する。
TYPEによって、/dev/dvb/adapter0-3のどれを使うか決め、同じadapterを使うことが無いように
排他制御をする必要がある。

TSの取り込み部分は、fuse_b25を使ってやってみた時期もあったけど、
0byteのファイルが出来る頻度が多くて動きが怪しいという印象。
よって、/dev/dvb/adapter?/dvr0からddで取り出し、b25コマンドで復号するというローテクで。
録画失敗率は下がったと思う。


シェルスクリプトで色々やってたが、細かい制御が面倒になったのでrubyでやることにした。起動まではrubyだけど、実際に録画に使用されるのはmkfifoで作ったfifoと各種コマンドなので
処理的には大丈夫だと思いたい。


https://sites.google.com/site/tthhfugapiyo/home/tv.rb

spawnを使っているのでruby1.9系が必要。
直接TVを見るときも排他が必要なので、コマンドラインからも実行できるようにした。

mplayerで見る。
 tv.rb 211 -p

mplayerで見ながらfileに落とす。
 tv.rb 211 -o file -p

do-record.shとして使う。
 ln -s tv.rb do-record.sh
 CHANNEL=211 DURATION=1800 TYPE=BS OUTPUT=file.ts do-record.sh

デフォルトでBSとCSはtssplitter_liteをかけるようにしたので、
epgdumpで使うときはMODE=-1になるようにgetepg.phpの方を改造する必要がある。

追記:色々変更したのでまとめて以下
http://tthhfugapiyo.blogspot.jp/2014/06/epgrecdvb.html

2012年7月7日土曜日

PT2信号レベル測定(DVB)3

天気悪すぎ。
電波が弱い。

信号レベル測定のプログラムを使って調整しようとおもったけど、
チューニングが成功しないと信号レベルが出てこないから使えないな。
あと値がふらふらするからいまいち分からない。一次遅れを入れよう。
(本当はalsamixerみたいな棒グラフにしたいけど)


で、調整しようとしたけど、天気が悪かったらいくら調整しても無駄だということが分かった。
あきらめた。

2012年7月6日金曜日

PT2信号レベル測定(DVB)2

今日大雨だったので動かしてみた。
(前回の投稿にリンクするのはどうやるんだろう)

激しい雨のとき
$ ./checksignal 2 CS333
Successfully tuned to AT−X .
     494,      494,      494
     451,      494,      451
     458,      494,      451
     472,      494,      451
     465,      494,      451
     398,      494,      398

ちょっと収まったとき


$ ./checksignal 2 CS333
Successfully tuned to AT−X .
    2529,     2529,     2529
    2529,     2529,     2529
    2533,     2533,     2529
    2527,     2533,     2527
    2524,     2533,     2524
    2515,     2533,     2515
    2516,     2533,     2515
激しく違う。

PT2の電源供給(DVB版)

今のところ以下のような構成。

アンテナ

分配器(両通電)
↓ ↓
TV PC

  • PT2を入れたPCは常時電源ONにしている。
  • TVはたまにしかつけないので電源OFF。

分配器の両通電タイプにしたので、問題ないと思ってたけど、
分配器の説明に、「両方電源入れたら壊れるかもしれんからやめて」みたいなことがかいてある。
TVつけたときにPC落としたりしないし。両通電の意味無いんじゃ。。

仕方ないから↓のようにする。

  • TVからは電源供給しない。
  • PCから常時電源供給。

 問題は、dvbでどうやって常時LNBをONにするか。
とりあえずtuneコマンドのioctlを改造して、ioctlでpt2のLNBをONにするものを作った?
(改造したのか、dvb-pt1-testの中に元々あったか忘れた。もしかしたら誰かが作ったものかも)
https://sites.google.com/site/tthhfugapiyo/home/pt2_lnb.c


ただ、プログラムを終わらせるとLNBがOFFになってしまう。
ずっと動かしっぱなしだとその間デバイスが使用中になるのでよくない。
よって、モジュールオプションdvb_powerdown_on_sleepでOFFにならないようにする。

/etc/modprobe.d/mod_dvb.conf:
 options dvb-core dvb_powerdown_on_sleep=0
つぎに、モジュール読み込み時にONにする方法。
/etc/rc.localに入れようかと思ったけど、いまいち確実でないので、udevを使う。

/etc/udev/rules.d/90-pt2-lnb.rules:
SUBSYSTEM=="dvb", ACTION=="add", ENV{DVB_DEVICE_TYPE}=="frontend", RUN+="/usr/local/bin/pt2_lnb 2"
これでOKになったはず。

2012年7月5日木曜日

PT2信号レベル測定(DVB)

もらったアンテナで衛星放送を見てるけど、ちゃんと設置してなくてただ置いているだけ。最近雨が多くてなんか電波が悪いようなそうでもないような。

アンテナの調整をしようと思ったけど、信号レベルの測定のためにテレビを持っていくのは面倒くさすぎる。
なんとかノートPCですませたい。

chardev版で信号レベルを測っている人はいる模様なのでやってみた。
(トラックバックのやり方がよくわからんけどおぼえてたら後でリンクする)
(Bloggerにはトラックバックというのはないらしいので参考URLhttp://blog.lwlv.net/archives/677)
 [  426.395992] lowmem_reserve[]: 0 0 0 0
[  426.396080] DMA: 5*4kB 7*8kB 5*16kB 5*32kB 1*64kB 1*128kB 1*256kB 0*512kB 1*1024kB 1*2048kB 0*4096kB = 3836kB
[  426.396112] Normal: 0*4kB 1*8kB 0*16kB 1*32kB 1*64kB 0*128kB 1*256kB 0*512kB 1*1024kB 0*2048kB 0*4096kB = 1384kB
[  426.396142] HighMem: 19*4kB 6*8kB 2*16kB 1*32kB 0*64kB 1*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 316kB
[  426.396172] 158201 total pagecache pages
[  426.396178] 49 pages in swap cache
[  426.396184] Swap cache stats: add 66, delete 17, find 3/4
[  426.396190] Free swap  = 9767276kB
[  426.396195] Total swap = 9767516kB
[  426.405931] 260016 pages RAM
[  426.405941] 32706 pages HighMem
[  426.405947] 5955 pages reserved
[  426.405952] 140035 pages shared
[  426.405957] 179903 pages non-shared
[  426.405965] PT1:DMA ALLOC ERROR
[  426.412817] pt1-pci: probe of 0000:02:00.0 failed with error -5
むりだった。
DMAの領域確保に失敗しているのか?
試しに減らしてみたらpanic状態になってsysrqキーに助けられる。(キーはよく知らないのであとでメモっとこう)
しかもロード失敗してるのに/dev/pt1video0とか残ってるし。

PT2はDVBで使ってるので、chardev版はさっと諦めて、DVBで何とか信号測定する方法を探す。

 recpt1/checksignal.c
249     if(ioctl(fd, GET_SIGNAL_STRENGTH, &rc) < 0) {
250         fprintf(stderr, "Tuner Select Error\n");
251         return ;
252     }
から調査、i2cで0x8c,0x8dあたりをどうのこうのしているらしい。
同じようにDVB版に入れれば何とかなりそうと思ったら入ってた。


pt1/va1j5jf8007t.cのva1j5jf8007t_read_snr関数でやっているようだ。
dvb_frontend_opsのread_snrに登録されている。
dvb_frontend.cを見るとioctlのFE_READ_SNRでいけそう。

~/work/dvb-pt1-test$ ./checksignal 2 CS333
Successfully tuned to AT−X .
    2855,     2855,     2855
    2832,     2855,     2832
    2839,     2855,     2832
    2815,     2855,     2815
    2814,     2855,     2814
    2799,     2855,     2799
いけた。(のかな?)
dbの計算式とかrecpt1と違うみたいなので数値の比較は出来なそう。
暇な時にアンテナ調整してみる予定。


Bloggerって添付ファイルはっつけらんねーのかな。
ファイル添付無理っぽい。他に作ってリンクするしかないようだ。面倒くさいな。



以下、dvb-pt1-testのtuneを改造したもの。使用頻度は低いので超適当。
地上波は岡山設定。
s2scanの結果を/usr/local/etc/cs_channels.txt, /usr/local/etc/bs_channels.txt
に置いておくと読むようにしたはず。

checksignal.c
readchannels.c


とりあえず

色々メモを記録していくことにしようかな。
忘れたときのために。
あとデータが飛んだときのために。

まずは最近PCの時計が10年くらいとんでfirefox syncで拡張が一部消えてしまったので再インストールメモ

  • Adblock Plus
    • 重い広告がおおいから
  • Clear Cache Button
    • niconicoとかでキャッシュを消せと言われたときに
  • Evernote Web Clipper
    • あんまりつかってない
  • FireGestures
    • 必須
  • Gmail Watcher
    • 一応
  • Google Reader Watcher
    • 必須
    • 会社用と家用でラベルフィルタで分けて見る(日本語ラベルは使えない)
  • QuickDrag
    • いちいち選択して右クリックして検索とかめんどくさいので
  • SearchBox Sync
    • 検索した時にgoogleのアドレスから検索ボックスへ検索ワードが入る。
    • googleが動的になったのでいまいち
    • google toolbarの代わり
  • SearchWP
    • 検索ボックスの単語をハイライト
    • google toolbarの代わり 
 リンクはまあ貼らなくていいか。

書き込みテスト

書き込みテスト