Showing posts with label 24時間ワンセグ野郎. Show all posts
Showing posts with label 24時間ワンセグ野郎. Show all posts

Wednesday, June 23, 2010

player.pl 派生版 100623

インクリメンタルサーチ版、やはり問題があって「時間を指定して番組抽出」と「番組表から検索して抽出」の'Day'のオプションが空になってしまっていたため、修正した。
  1. onLoad まわりを変更。(上の問題の解決のため)
  2. define.pl 内で $isearch を設定することで、インクリメンタルサーチをON/OFF するようにした。
  3. インクリメンタルサーチ用の大きなデータをhtmlの最後の方で読み込んで、番組表の表示を先にして、読み込みが遅いのをわかりにくくした。
  4. 「■番組検索 」と「インクリメンタル検索」ボタンを同じ行にした。
同梱の isearch.pl を player.pl と同じフォルダに置くこと。
define.pl の311氏関連のあたりに $isearch が加わっていることに注意。

Monday, June 21, 2010

player.pl 派生版 100620 および 331氏インクリメンタルサーチ統合

player.pl 派生版
  1. css を分離して css/player.css からロードするようにした。
    試してみる人は、同梱のcss/player.css を設置するのを忘れないように。
  2. $ShotE が設定されていない場合は autostart を指定して即再生スタートするようにした。
  3. 画面ショットは thm.pl で作成するので、player.pl内の画面ショット作成を削除した。
さらに331氏のインクリメンタルサーチをマージした player-is.pl を作ってみた。
面白いけど、データベース中のすべての番組情報を投げてくるので、読み込みが遅い。
また、ただただ放り込んだだけなので、何かまずいことになるかも。
ドキュメントを付けていないので、以下に設置法の説明を。
  1. 331氏のインクリメンタルサーチ単体を動くようにする。
  2. player-is.pl を player.pl と同じところに置くか、player.pl と入れ替える。
  3. $OpenNewWindow=1; にしている人は js/suggest.js を 同梱の suggest.txt にしたがって変更する。(suggest.js のライセンスがわからなかったので)
  4. 試用ではなくまじめに使う人は一時間に一度 create_inc.pl を実行する。
検索窓の開閉は手動でボタンを押してください。

# suggest.data.item.js をダイナミックに生成する方法も試したけど、やたら時間がかかるのでやめた。 番組表で表示している時間だけを検索対称にするとちょっと速くなるかもしれない。

Friday, June 18, 2010

player.pl 派生版 100619

player.pl 差し替え版、SQLite対応版が本家に吸収されたので、ここでの改造は派生版。
  1. データベースに持っている情報なので、定数 @iepg_chan を使わないようにした。
  2. サブルーチン内サブルーチンになっていたdummy_program を外に出した。
  3. mp4ファイルがある場合、番組表にその旨アイコン表示することにした。クリックでダウンロード。
  4. 「時間を指定して番組抽出」でも再生ウインドウで番組名等を表示するようにした。(首都圏以外ユーザがlivegraph_new.htmで再生する場合、番組名で、全国放送かどうか判断するため)
  • img/mp4.gif, img/ipod.gif が必要。アイコン例をダウンロードして使用するか、自分で用意すること。
shrinkdb.pl 修正
  1. da_ganre に番組から参照されないゴミが入る場合があるので削除するようにした。
  2. 未来のゴミ番組が登録されてしまう場合があるので削除するようにした。
しっかり受信できている方には関係ないです。試す場合はデータベースファイルのバックアップをとってからにしてください。失敗して再構築するのは1日仕事ですからね。(やっちまった)

例によってwindows用だがWindowsでの使用は自信なし。プログラム使用による被害は補償しかねる。
こちらから

playre.pl SQLite対応版はoneseg24forLinuxのepg.cgiplyer.pl差し替え版のマージです。

Thursday, June 10, 2010

player.pl 差し替え版の高速化

SQLite 対応版がメインストリームに吸収されてから、動作が遅いということがばれて、どうしたものかと思っている間もなくP差し替え中の人が速くしてくれました。perl の switch はやたら遅いらしい。
それでもまだATOM330で3~4秒かかるということで、チャンネルごとに取得していた番組情報を一度に取得するようにしてみました。チャンネル数+1回のクエリが2回になった分速くなるようです。ただし、すでに1秒ぐらいで動作する環境をお持ちの御大尽には効果ありません。
player.pl windows用だけですが、こちらから。

# MSNクイックハック版を使っていたので、遅いとか気がつかなかった。
追記:メインストリームにマージされましたので、削除しました。

Thursday, June 3, 2010

thm.pl SQLite対応版

油断している間にmsnがiEPGサービス終了し、player.pl差し替え版が使えなくなったようです。
で、あれよあれよ言う間にSQLite版がメインストリームに組み込まれたようで、サムネイルやら勢いグラフやらがマージされたようです。
それではthm.plのSQLite対応版が要りますね、とおもって書いてみたのですが、すでにできているようで二番煎じになりました。
でも、せっかく書いたのでこちらで
使い方
define.plの場所とsegwrapper.pmの場所を指定する必要があります。
サムネイルのサイズは$thm_sizeで指定。
$all_in_db を0以外にするとデータベース内にある番組全てのサムネイルを作ろうとします。
define.pl内の$ShotSは5秒単位で指定するのがよいでしょう。

改変、再配布自由、自己責任で使用ください。windowsで動くかは不明。
追記、使用する ffmpegによっては動くかもしれないけど、基本WINDOWSでは動かないそうです。

データベース開けっ放しをやめた。6/3版
broken pipe の処理を変更した。(速くなった)6/3_2版
binmodeが要るらしかったので付けた。6/4版

Thursday, March 4, 2010

TSConverter patch の bug

以前 TSConverter のUNIX系パッチは linux(debian/lenny) ではセグメンテーション違反で落ちるというコメントがあった。
最近、coLinux で lenny を動かしてみたので、コメントにあったように _file を _fileno に変更し、コンパイルして試してみると確かに落ちる。コマンドラインオプションの処理がいい加減だったため、ファイル名を指定しないと strncpy に NULL ポインタが渡され落ちるようだ。
もしやと思い FreeBSD でもファイル名を指定しないで動かしてみると、落ちた。なぜ気づかない!!!かなり荒っぽく移植したものの、はずかし。
ご使用中の皆さんは、気になるようなら argv[optid] が NULL なら文句言って終了するようにしておいてください。

strncpy(mp4boxpath,pt,PATH_MAX);
+ if(argv[optind]==NULL){
+ fprintf(stderr,"no input file\n");
+ exit(-1);
+ }
strncpy(lpFile,argv[optind],PATH_MAX);
- if(strlen(lpFile)==0){
- fprintf(stderr,"no input file\n");
- exit(-1);
- }

そのうちパッチファイルを9/1版にするときにこっそり修正しておきます。

ファイル名さえ指定すれば lenny でも動いたんですけど、どこか他にも問題あるんでしょうかね?

Tuesday, March 2, 2010

rec.pl フルセグストリーム対応(多分)

recBone.exe をフルセグチューナーで使ってみた人がいたらしい。
フルセグストリームでも perlrtmp は pid 0x1FC8 の PMT からストリームの PID を探してきてビデオとオーディオを送信してくれそうなものだが、多分 IDX ファイルのポインタの方が long 型を超えてしまうので、正しく動作しないようだ。
そんな人のために OneSeg24forLinux 付属の rec.pl を改造してフルセグストリームからワンセグ関連のみ抽出して IDX ファイルと共に保存するパッチを作ってみた。
ついでに、来るべきフルセグ野郎時代のために、フルセグ野郎 IDX 形式勝手に暫定版対応を行った。
IDX ファイルはポインタのビット数を増やすか、TS ファイルを1時間より短くして、IDX はそのままなど、やりかたはいろいろ考えられるが、勝手に暫定版ではファイルポインタではなく、パケット数を記録して、ビット数を増やさず、 TS も1時間のまま。188倍すればオリジナル IDX と同様に使用可能とした。
使用方法は rec.pl と同様。デフォルトでワンセグ野郎形式で保存 -f オプションでフルセグ野郎形式も同時に記録するという改造を行った。当然ながらフルセグ野郎形式対応ソフトは存在しない。
recFS.patch
ただ残念ながら、現在フルセグストリームを取り出す環境がないので...
recBoneFS.exe はまたの機会に。ってどっちも需要ないか。

Sunday, January 17, 2010

ワンセグチューナー用BonDriverで24時間ワンセグ野郎

recBone
# OneSeg24 for Linux の rec.pl の移植 BonDriver oneseg版使用。

player.pl sqlite対応版のオマケとして添付していたBonTsDumpが使いにくいということで、誰かがGUIの使いやすいプログラムを公開してくれるまでのつなぎとして、rec.plとBonTsDumpをくっつけたプログラムを作りました。 (Windowsに疎いのでCUIです)

24時間ワンセグ野郎形式のTSファイルとIDXファイルを1チャンネル分だけ作成します。
複数チャンネルで使用する場合は複数起動してください。
VGA_TV1Sタイプのチューナーしか持っていませんので、他のもので動くかどうかは知りません。
MonstarTV 1DR とか DT-007V でも使えるようでしたらお知らせください。

録画するだけですから、古いファイルを消していく機能はありません。放っておくと、ハードディスクが満タンになります。タイムスタンプを見てファイルを削除するようなプログラムを併用してください。
さっきちょっと検索してみたら fdel とかありましたが、サブディレクトリも削除してくれるのでしょうか。

Wednesday, September 30, 2009

アクセシビリティ、または24時間ワンセグ野郎字幕対応

jw flv player のページを見ていて、プラグインで字幕を表示できることを知った。
字幕 xml ファイルを用意して試してみると、UTF-8 を用いれば日本語も問題ないようだ。
正攻法では、ぱぱネット(仮)様製作によるdumpeitを改造して、標準入力からTSファイルを流し込むと字幕XMLを吐くプログラムをつくり、segwrapper.pmで切り出したTSファイルを流し込むというところだろうが、根性と技術の問題で断念。

dumpeitをそのまま使い、TSファイルから前もってSUBファイルを作成しておく。
一時間に一度TSファイルを処理するようにしておくとよいでしょう。EITファイルは不要。
caption.plにファイル名を渡してキャプションを受け取るようにplaye.pl差し替え版を改造。
改造箇所は、
print "s1.addParam('flashvars','file=$request.flv&streamer=rtmp://$ENV{'SERVER_NAME'}/vod&fullscreen=true&plugins=captions-1&captions.file=caption.pl?file=$request.xml');\n"
みたいなところ、何箇所かある、いつも使っている部分だけでもOK、どこを使っているかわからない人は全部書き加える。

caption.pl はここ。 caption.090930.pl を caption.pl と改名して、player.plと同じディレクトリにおく。
caption.pl の最初のほうの設定を環境に合わせて変更する。
  • $TSFOLDER : SUBファイルの置き場所
  • $Tadj : 字幕表示開始時刻の調整
  • windowsの人はパス名の/を\にするなどの工夫が必要。($TSFOLDERと$subfileのところ)

時間跨ぎ、日付跨ぎなどは、未確認。
字幕表示時間は有無を言わせず5秒。
同一時刻の字幕は行を増やして表示。
# 日付跨ぎ字幕番組を発見してちょっと試してみたらだめだった。
# 多分サブルーチンで手抜きをしたのが原因。
# 軽く修正 090930a版
# mod_perlを使っていない人はCGI.pmがやたら重いらしいのでCGI.pmを省いた。
# さらに修正、および特殊文字の辞書ファイルを用いるように改変091001版
# SUBファイルの途中から番組が開始する場合、頭のほうを読み飛ばせない問題を修正.091001a版
# さらに修正091002版

Saturday, September 26, 2009

Thursday, September 24, 2009

player.pl差し替え版sqlite3対応版090924

もうそろそろ安定でしょうか。
ジャンル検索の複数条件をORで結んでいるがANDにするか思案中。
-090924-
streamdisp() からのファイルダウンロード時に、ファイル名にアイコン名などが入る問題を修正。
地味にジャンル検索を変更。
ActivePerl 5.10.0 build 1004 以前ではうまく動かない可能性があるようです。
DBD-Sqlite を1.25に上げてみて、それでもだめなら ActivePerl 5.10.0 build 1005 以上を使ってみてください。


090924a 版

# 番組内容のアイコンが表示されない問題をこっそり直した。
# アイコン名をこっそり変更した。
# define.plのアイコン辞書もこっそり一文字変更した。

090924b版
# 検索結果の番組詳細でアイコンが出なかった問題を修正
## 上記は修正されていなかった。

segwrapper.pm の脱 inverse_julian_day 化

player.pl 差し替え版から呼び出される segwrapper.pm はTime-modules の inverse_julian_day を使うため、ActivePerlで使う場合にややこしい手続きが必要らしい。
OneSeg24ForLinux の rec.pl の一部を移植して脱 inverse_julian_day できるはず。

*** segwrapper.pm.orig Wed Sep 23 00:00:00 2009
--- segwrapper.pm Wed Sep 23 00:00:01 2009
***************
*** 4,10 ****

use strict;
use Time::Local;
! use Time::JulianDay;
use Fcntl;


--- 4,10 ----

use strict;
use Time::Local;
! #use Time::JulianDay;
use Fcntl;


***************
*** 37,43 ****
my $totcode = shift;
my($mjd,$y,$m,$d,$h,$n,$s,$ch,$cn,$cs);
($mjd,$ch,$cn,$cs) = unpack("nCCC",$totcode);
! ($y,$m,$d) = inverse_julian_day($mjd+2400000.5+1); # @@@ +1?
$h = (($ch >> 4) & 0x0F) * 10 + ($ch & 0x0F);
$n = (($cn >> 4) & 0x0F) * 10 + ($cn & 0x0F);
$s = (($cs >> 4) & 0x0F) * 10 + ($cs & 0x0F);
--- 37,54 ----
my $totcode = shift;
my($mjd,$y,$m,$d,$h,$n,$s,$ch,$cn,$cs);
($mjd,$ch,$cn,$cs) = unpack("nCCC",$totcode);
! # ($y,$m,$d) = inverse_julian_day($mjd+2400000.5+1); # @@@ +1?
!
! $y = int(($mjd - 15078.2) / 365.25);
! $m = int(($mjd - 14956.1 - int($y * 365.25)) / 30.6001);
! $d = int($mjd - 14956 - int($y * 365.25) - int($m * 30.6001));
! if (13 < $m) {
! $y = $y + 1;
! $m = $m - 12;
! }
! $y = $y + 1900;
! $m = $m - 1;
!
$h = (($ch >> 4) & 0x0F) * 10 + ($ch & 0x0F);
$n = (($cn >> 4) & 0x0F) * 10 + ($cn & 0x0F);
$s = (($cs >> 4) & 0x0F) * 10 + ($cs & 0x0F);

Wednesday, September 23, 2009

player.pl差し替え版sqlite3対応版090923

寝る前までの修正 こちら
-090923-
<player.pl>
【ほげ】をすべてアイコンに変換する野望は捨てた。
system()が残っていたので、Win32::Process::Create()に戻した.
放送局名をgoogleのI'm Feeling Lucky機能にリンクした。
番組表をキャッシュするようにした.
- 当日はキャッシュしない.
- Cacheファイルは放送日のタイムスタンプが付くので, define.pl の $ExpireCache を ($start_date-2)*24 にすると、丁度,最初の日以前をexpireする。
表の最後を揃えて放送局名を入れた。
<defin.pl>
「絵」アイコン追加。icon_e_b.gif
「SS」アイコン追加。icon_ss_b.gif
「シリーズ構成」アイコン追加。icon_kousei_b.gif
「終」アイコン追加。icon_end_b.gif
「声の出演」を「声」アイコンに関連付け。
「リポーター」アイコンを変更。
キャッシュ化に伴い$ExpireCache = ($start_date-2)*24;に。
<omake/ts_epg.pl>
ts_proc.pl はパイプを使うのでepg.plを改造して
直接ファイルを読んで処理するようにした。
キャッシュ化したので、設定を変更した場合はcache\の内容を削除することを忘れずに。
ジャンル検索でSQLのエラーが出ることがあるようですが、いまのところ原因不明。

Sunday, September 20, 2009

player.pl差し替え版sqlite3対応版090920

-090920-
$startHを跨ぐ番組を表頭にも表示するようにした。

Saturday, September 19, 2009

player.pl差し替え版sqlite3対応版090919

寝る前までの修正。
-090919-
$startHを跨ぐ番組が表示されない問題の修正。(epg.cgiのせいではなく、改造時のエンバグだった。)
本家09/14版から、
streamdisp_mobileでmp4ダウンロードできるようにした。
海の日の修正。
-090918-
検索での時刻指定に関するバグ修正。
ts_proc.plのTSファイル名生成に関するバグ修正。

Wednesday, September 16, 2009

ニッカンスポーツコムの番組表終了

ニッカンスポーツコムのテレビ番組表が9月末で終了するらしい。
player.pl差し替え版が使えなくなるので、あわててサボっていたepg.cgiに検索、エンコード機能を付加しようと思ったが、player.pl差し替え版をsqlite対応にすることにした。(そのほうが楽そうだったから)
どうして動いているのかわからないほどのスパゲッティ具合だが、普段使うところは完成! と思ったらplayer.pl差し替え版がMSN TVに対応したようで、またMSN TVが使えなくなるまでは放置。
sqlite版の弱点は受信状態が悪いと番組表が阿鼻叫喚の地獄絵図となること。
また、ニッカンのジャンル分けとワンセグ放送付加情報のジャンル分けが少々異なっているので混乱する。ニッカンの「バラエティ」の「バラエティ」って何?
ニッカンでは「趣味・教育」で「旅」と「釣り」が分かれているがワンセグでは「旅・釣り・アウトドア」となっている。「歴史」「科学」はワンセグにはなく「ドキュメンタリー」の方に「宇宙・科学・医学」と「歴史・紀行」がある、ただし「歴史・紀行」はニッカンの「ドキュメンタリー」にも存在する。などややこしい。

# これを機会にデータベースファイルの古い情報を消去するスクリプトも書いた。

#!/usr/bin/perl
use DBI;
$start_date = 28;
@tm = localtime(time-86400*($start_date-1)-3600);
$timestring = sprintf("%04d-%02d-%02d %02d:00:00",$tm[5]+1900,$tm[4]+1,$tm[3],$tm[2]);
my $dsn = 'DBI:SQLite:dbname=/media/disk/oneseg24/epg.db';
my $dbh = DBI->connect($dsn, undef, undef, {RaiseError => 1, AutoCommit => 1});
$dbh->do("delete from da_genre where dv_id IN (select dv_id from da_event where dv_start_time < '$timestring')");
$dbh->do("delete from da_event where dv_start_time < '$timestring'");
$dbh->do("vacuum");
$dbh->disconnect();

Wednesday, September 2, 2009

TSConverter_9_01

テルミンさんのTSConverterがバージョンアップ。0426版のパッチがリジェクトなしで当たったが、重要な変更がコメントアウトしてしまったコード内にあるかもしれないので不安。一応動いたが、不具合に遭遇していないのでなんとも。

Friday, August 28, 2009

ぱぱネット(仮)さんのperlrtmp改造

perlrtmpに複数から使用していて、一方が無線LANで通信が滞りがちになると、他方の接続にも影響する。
なので、perlrtmpをinetd対応に改造しようかと思っていたところ、ぱぱネット(仮)様が、接続ごとに子プロセスに分ける改造をされていたので、いただいた。多謝。
その他にもいろいろ改造されたようだが、とりあえず子プロセスの部分だけ頂くことに。必要なのはperlrtmp.pl のみ。これを少々書き換えてserver.plとして使用すると、一方の接続の停滞に影響されないようになったようだ。いまのところゾンビも発生せずうまくいっている。多分接続数増加への耐性も上がっているだろう。

--- perlrtmp.pl 2009-07-25 09:51:05.000000000 +0900
+++ server.pl 2009-08-28 23:46:31.000000000 +0900
@@ -8,15 +8,14 @@
use POSIX ":sys_wait_h";

my $dir = $ARGV[0];
-my $port = $ARGV[1];
-my $dbn = $ARGV[2];

-if ($dir eq '' || $port eq '') {
- die "Usage: $0 <document> <server> <session>\n";
+if ($dir eq '') {
+ die "Usage: $0 <document>\n";
} else {
$dir =~ s/\/$//;
}

+my $port = '1935';
my $lsn = new IO::Socket::INET(Listen => 1, LocalPort => $port, Reuse => 1) or die;
my $sel = new IO::Select($lsn);

@@ -31,7 +30,7 @@
warn "[socket] connect from ", $new->peerhost, "\n";
$pidtable{$pid} = 1;
} elsif (defined $pid) {
- my $rtmp = RTMP->new($new, $dir, $dbn);
+ my $rtmp = RTMP->new($new, $dir);
my $cosel = new IO::Select($new);

while (1) {

Monday, August 10, 2009

perlrtmpバージョンアップとBonDriver対応ワンセグチューナー

  1. perlrtmpがflashplayer10のバージョンアップに伴いバージョンアップしたようです。入れ替えるだけでOK. なんらかの都合でlib/segwrapper.pmを使用している人はコピーしておくことを忘れずに。
  2. BonDriver対応のワンセグチューナーをたまたま持っていたのでWindowsでts.pl,rec.plを使って「ワンセグ野郎形式」ファイルをつくってみた。オリジナルよりサイズがちょっと大きくなるけどperlrtmpで使用できた(BonDriverが何かを加えているらしい)。 Windowsではパイプの処理をCMD.EXEが担当するようで、ts.plからbonDriverを使ってtsを吐くプログラムを動かすとDOS窓がチューナー分開いたままになるのが不細工。CMD.EXE互換で窓を開かないプログラムはないものか。

Sunday, May 31, 2009

player.pl差し替え版の動画切り出しについて。

24時間ワンセグ野郎で動画を切り出す場合、たいていは番組の一部だけなので、時刻を5秒単位で指定して切り出したいのだけれど、player.pl差し替え版では分単位でないと切り出せないようになってる。
そこでplayer.pl 167行目
$stim = "$h:$m:00";

$stim = "$h:$m:$s";
に、169行目
$etim = "$h:$m:00";

$etim = "$h:$m:$s";
にしてみた。 $s をわざわざ計算しながら0秒にしているのは何か理由があるのかもしれないが、いまのところ不具合はない。