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ファイル名生成に関するバグ修正。

Thursday, September 17, 2009

player.pl差し替え版sqlite3対応版一応公開

player.pl差し替え版の作者の方が、スクリプトに手を入れることを歓迎ということで、手を入れて無茶苦茶にしてしまったスクリプトをきれいにしてくれる人歓迎ということで、公開してみることにした。こちら

player.pl sqlite対応版

player.pl 差し替え版に OneSeg24forLinux の epg.cgiの番組表生成部を移植しました。
どうしてうごいているのか分からないほどのスパゲッティになりましたが、
一応、Unix系では普段使うところは動いています。
windows用に書き戻しましたが、作成者はwindowsで使用していません。
windowsで動かすのに必要な事項が抜け落ちている可能性がありますので、
なんとか対応して結果を知らせてください。

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版のパッチがリジェクトなしで当たったが、重要な変更がコメントアウトしてしまったコード内にあるかもしれないので不安。一応動いたが、不具合に遭遇していないのでなんとも。