2014年10月23日木曜日

wineで体験版

wineでなんかのゲームの体験版を動かそうとした

普通に使うwineにいろいろやってしまうと面倒なことになるので、
playonlinuxで別に作って入れる。(wine-1.6.2)

1.playonlinuxでインストールの時に新しくGameとかを作る。
2.そのままインストール
3.ショートカットを登録
4.実行

画面が出ない。
Debugで起動すると以下のようなエラーが見える。fixme:win:EnumDisplayDevicesW ((null),0,0x329518,0x00000000), stub!
fixme:win:EnumDisplayDevicesW ((null),0,0x329d68,0x00000000), stub!
その他D3Dなんたらかんたらとかいうエラーが出る。

5.とりあえずdevenumとd3dx9を入れる。
  「設定」→「Install components」でd3dx9, devenumをインストール


画面は出るようになったが、
ムービーの再生をしようとするらしく死ぬ。
 err:quartz:GetClassMediaFile Media class not found
err:ole:apartment_getclassobject DllGetClassObject returned error 0x80040111
err:ole:CoGetClassObject no class object {da4e3da0-d07d-11d0-bd50-00a0c911ce86} could be created for context 0x1
fixme:gstreamer:GST_QueryInterface No interface for {37d84f60-42cb-11ce-8135-00aa004bb851}!
fixme:thread:__hook_pthread_create most thread attributes ignored!
fixme:thread:start_thread Started native thread 00000038
fixme:gstreamer:unknown_type Could not find a filter for caps: video/x-wmv, wmvversion=(int)3, width=(int)1280, height=(int)720, codec_data=(buffer)4ff1080100, pixel-aspect-ratio=(fraction)1/1, formatfixme:gstreamer:watch_bus decodebin20: GStreamerはプラグインを見つけることができません
fixme:gstreamer:watch_bus asfdemux0: 内部データストリームエラー。
fixme:gstreamer:GST_Connect GStreamer could not find any streams
wine: Unhandled page fault on read access to 0x00000000 at address 0x4584f1 (thread 0009), starting debugger...


6.とりあえずquartzという文字が見えるのと、 ムービー関連っぽいので、以下を入れてみる。
 quartz
 wmp9
 wmpcodecs
 ffdshow

7.動いた。多分ffdshowが大きかったのではないか。
8.たまに死ぬけど、動かすことができたということでOKとする。

2014年8月10日日曜日

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

台風が通り過ぎた。
うちの場合アンテナはただ置いてあるだけなので
ズレてないかチェックしておく。

設定メモ: epgrec(DVB)用のツール類

前に測った時:
http://tthhfugapiyo.blogspot.jp/2012/07/pt2dvb2.html

今日:
$ checksignal 0 CS333
    3010,     3010,     3010,     3010
    3009,     3009,     3010,     3009
    3040,     3012,     3012,     3009
    3048,     3015,     3015,     3009
    3026,     3016,     3016,     3009
    3022,     3016,     3016,     3009

前とあまり変わってないので、大丈夫そう。

2014年7月25日金曜日

radikoをひらくスクリプト

radikoをコマンドから開きたい。
なんか世の中にはrtmpdumpとかいうプログラムでダウンロードできる
プログラムがあるようだが、動かなかった。

ということでwatirで開くrubyスクリプト。

https://sites.google.com/site/tthhfugapiyo/home/radiko.rb?attredirects=0&d=1



radikoのページってエリア選択を開くのが異常に遅い気がする。
ホントは一気にTBSを開きたいんだが。


これをcronで毎週月曜1:00〜3:00に動かす。
画面が邪魔なので、Xvfb :99とかして、仮想X上で動かす。

internet <-- firefoxとなっているのを、
internet <-- rtmpsuck <-- dchroot(IPを127.0.0.1に) <-- firefox
として、rtmpsuckを通してファイルにし、
avconv -i "ファイル" -b 32k hogehoge.mp3
みたいな感じにつかっている。

ここまでやれば月額500円(350円の間違い)払うだけの価値がある。

追記メモ:
internet <-- rtmpsuck <-- dchroot(IPを127.0.0.1に) <-- firefox
???.smartstream.ne.jpに行くつもりのものを
127.0.0.1に置き換えるためにdchrootでhosts作ってやっていたが、
HOSTALIASESでもOKなのかもしれない。

追記メモ2 2017/9/17:
なんかHLSになって録音できなくなってた。
退会しようかな

ubuntuとNetworkManagerとdnsmasq

ubuntuでローカルのdnsを動かそうとした時のことを
うろおぼえだけどメモっておく。

とりあえず以下のような感じで4.で詰まった。

1. NetworkManagerが勝手にdnsmasqを動かしてしまう。
2. 勝手に動かされているので、/etc/dnsmasq.confの設定で動いてくれない。
3. もう動いているのでデーモンとして動かそうとすると動かない
4. NetworkManagerがdnsmasqを使わないように設定して、dnsmasqデーモンを有効にすると、
 なぜか起動時のみデーモン起動が失敗する。(起動後手動で動かすと問題なし)

NetworkManagerはdnsmasqを使わないだけでいいのに、
勝手に終わらせたりしてるんじゃないか?
→そのため/etc/init.dで動かしているdnsmasqが終わらされる?

という予想をしてみたが、
これ以上追いかけるのがめんどくさくなったので、別の方法を模索した。

要はNetworkManagerが勝手に動かすdnsmasqの設定がやりたいように変えられればいい。

/etc/NetworkManager/dnsmasq.d/0-server
みたいなファイルを作ると、それで動くようだった。
他になんかやったような気がするけど忘れた。

ps afxでみて、↓のようになっていればいいはず。
NetworkManager
\_/usr/sbin/dnsmasq 〜〜〜 --conf-dir=/etc/NetworkManager/dnsmasq.d

2014年6月28日土曜日

epgrec(DVB)用のツール類

○録画用ツール類
epgrec BS/CSチャンネル変更追従(DVB) テスト
PT2の電源供給(DVB版)
PT2信号レベル測定(DVB)
PT2(DVB), epgrec用do-record.sh
epgrec dvb: Value too large for defined data type

とりあえず↑のあたりでやった結果を↓においておく


https://sites.google.com/site/tthhfugapiyo/home/dvb-tools.tar.gz
make installして./tv.rb 「チャンネル」とかやる

○epgrecの改造
epgrec録画済みのグループ化epgrecの録画済みファイルをmplayerで見る
epgrecの録画済み一覧

↑のあたり変更をしたので一応web上においておく↓
https://sites.google.com/site/tthhfugapiyo/home/epgrec.tar.gz
viewer.php, viewer_all.php, programgroupTable.phpあたりが違うところ。

これで一応バックアップのかわりとする。

設定メモ: epgrec dvb: Value too large for defined data type

設定メモ: epgrec dvb: Value too large for defined data type



とりあえずカーネルのリングバッファサイズを増やしたら

現象が起こりにくくなるように思える。



ただ、根本的な原因は出力先が遅いことだと思われる。

出力先が遅いために書き出しができなくて、

バッファから出て行かないために読み出しも行われない。

readが行われないのでカーネル内のバッファが溜まっていき、

上記のメッセージが出るということだと思う。



とくにtssplitter_liteが遅いっぽい。

(tssplitter_liteはwriteを待っている間にreadしないから。 )



なんか変に重い処理とかしてないのであれば

バッファを思いっきり大きめにとっておけば大丈夫そう。



つくったものは別途まとめる。

2014年4月27日日曜日

jack & rakarrack & pulseaudio

jackとpulseaudioを使い、マイク入力はrakarrackを使いつつ
line入力はarecordでラジオ録音に使うためのメモ

○前準備
apt-get install linux-lowlatency
apt-get install qjackctl jackd
apt-get install pulseaudio-module-jack

まず、物理的にスピーカ、マイク入力を司っているのはALSAである。
そしてpulseaudioがそのALSAを握っている。

 ALSA(スピーカ) <== pulseaudio <== mplayerなど

line入力の方はarecordは直接ALSAを使うっぽい

 ALSA(マイク) ==> arecordなど

○とりあえず、ALSAがpulseaudioに握られていてはjackが使えないのでunloadする。

pactl unload-module module-alsa-sink
pactl unload-module module-alsa-card

○qjackctlでjackdを開始する。
qjackctlの設定はドライバをalsaにして、以下のように設定。
・出力デバイスhw:0
・入力デバイスhw:0,2
  入力デバイスの1つ目はline入力で、ラジオ録音に使うので、
 jackとしては2つ目のマイク入力を使うようにする。
 (arecord -Lで、hw:CARD=PCH,DEV=0と hw:CARD=PCH,DEV=2がある)

とりあえずjackが使われるようになるが、
このままだと、pulseaudioをぶった切ってjackをつなげただけなので、
jackが使える代わりに色んな音が鳴らなくなる。

ALSA(スピーカ) <== jack <== rakarrack
                          ×<== pulseaudio


○pulseaudioでjackを使うようにする。

pulseaudioのjackモジュールをロード

pactl load-module module-jack-source channels=2
pactl load-module module-jack-sink

多分以下のような感じになる。

ALSA(スピーカ) <== jack <== rakarrack
                          ↑<== pulseaudio(module-jack-sink) <== mplayerなど

ALSA(マイク入力) ==> jack ==> rakarrack
                          ==> pulseaudio(module-jack-source) ==> 何につかわれるのやら?

とりあえずこれで、jack経由でpulseaudioを鳴らすことができる。

○rakarrack

jackも使えるようになったはずだが、
マイク入力に何かつないで、rakarrackを動かしてみても反応なし。
ここでしばらく悩んだけど、
ALSAのマイク入力がキャプチャモードになってないからということに気づいた。

alsamixerで、 CaptureとCapture 1があるが、Captureの方はラジオ録音に使うので、
Capture 1を録音に設定、 Input Source 1をマイク入力に設定する。
コマンドでやるなら amixer -- sset なんとかかんとか で行けるはず。

これで動いた。

○終わらせ方

1.qjackctlでjackdを終わらせる。
2.pulseaudioのjackモジュールをunload
 pactl unload-module module-jack-sink
 pactl unload-module module-jack-source
3.pulseaudioのダミーがロードされるのでunload
 pactl unload-module module-null-sink
4.pulseaudioのalsaモジュールをload
 pactl load-module module-alsa-card
 pactl load-module module-alsa-sink

○結論

とりあえずは上記をやればいいっぽいので、
qjackctlに以下のように設定

・スタートアップ時にスクリプトを実行
 pactl unload-module module-alsa-sink; pactl unload-module module-alsa-card
・スタートアップ後にスクリプトを実行
 pactl load-module module-jack-source channels=2; pactl load-module module-jack-sink
・シャットダウン時にスクリプトを実行(追記: シャットダウン後じゃなくて前にやる。)
 pactl unload-module module-jack-sink; pactl unload-module module-jack-source
・シャットダウン後にスクリプトを実行
 pactl unload-module module-null-sink; pactl load-module module-alsa-card; pactl load-module module-alsa-sink

alsaのキャプチャは使わない場合はノイズがうるさいので、
使う時だけalsamixerでONにする。

・D-BUSインターフェース
jackを開始すると、jackdbusというのが走りっぱなしになるので、
jackを停止したら使わないようにしたい。
よって、qjackctlの設定:その他のD-Busインターフェースの有効化をやめる。

2014年4月26日土曜日

epgrec dvb: Value too large for defined data type

epgrecをpt2(dvb)で使っててたまに以下のようなエラーが出る。
 dd: reading `/dev/dvb/adapter0/dvr0': Value too large for defined data type

これが出るとデータがドロップされているので、動画がちょっと飛ぶ。
なんとかしたい。

ちょっと調べた限りでは、ファイルサイズ32bitの壁みたいな情報があったけど、
多分それが原因では無さそう。
(ちゃんと64bitを指定してるし。)

メッセージを調べると、errornoのEOVERFLOWの時に出るメッセージのようだ。
どうもdd内のreadがEOVERFLOWで失敗しているっぽい。
となると原因はドライバ内と思われる。

で、pt2に関係ありそうなところで、EOVERFLOWがあるのは、kernelソース内
drivers/media/dvb/pt1/dvb-core/dmxdev.c
dvb_dmxdev_buffer_writeで、

        free = dvb_ringbuffer_free(buf);
        if (len > free) {
                dprintk("dmxdev: buffer overflow\n");
                return -EOVERFLOW;
        }

という感じでリングバッファにデータを詰め込もうとしているところくらいか。
どうもカーネル内のリングバッファが足りてないのではないか?

と思ったので、カーネルのリングバッファサイズを増やしたい。
カーネルソースを眺めた結果、ioctlのDMX_SET_BUFFER_SIZEで動的に変更できそうだ。

結果はまたあとで書く。

ubuntu 13.10とepgrec

OpenSSLの問題でアップデートしようとしたら、
ubuntu 12.10のサポートが切れたっぽいので、しかたなく13.10にアップデート。

1. 毎度のことながら、phpで問題が起きる。(いい加減にしてほしい)
今までは、以下でタイムゾーンを設定していた。
 /etc/php5/conf.d/5-timezone.ini

今回から、以下になったようだ。
最初、cgiに移動しただけかと思っていたが、両方やっとかないと
多分getepg.phpと時間がずれるから問題が起きる。
 /etc/php5/cgi/conf.d/ /etc/php5/cli/conf.d/

タイムゾーンなんてcgiとcliで共通にするだろうに
なんで今まで読んでたファイルを無視するのか?
 あと上記を調べるのにphpinfoをやろうとして動かなかった。
微妙に変更になっている。
前:<? phpinfo(); ?>
後:<?php phpinfo(); ?>

userdirとphpmyadminでうまく動かないのは前と同様。
設定メモ: ubuntu 12.10とphpmyadmin

2.日本語が入らない

以下のサイトを参考にfcitxにした。色々書いてて毎度ありがたい。
http://www.k5.dion.ne.jp/~r-f/sicklylife/memo/ubuntu1310/

まだ他にもあるかもしれないが、とりあえずはOK。
録画はdvb使っているので問題無さそう。

2014年3月12日水曜日

録画失敗

久々に録画が失敗してたのでログをメモっておく

error - failed on ARIB_STD_B25::put() : code=-4
0+0 records in
0+0 records out
0 bytes (0 B) copied, 3.14809 s, 0.0 kB/s
604 (process ID) old priority 0, new priority -15