perlrtmpの中の人が配布している OneSeg24forLinux_1.0.0.1.tar.gzにはrec.plというOneTwoFour.exeと互換のTSディレクトリを 生成するPerlスクリプトが同梱されている。
# (TVK録画) # dvbstream -c 0 -f `expr 18 \* 6000 + 395143` 8192 -o | perl rec.pl -h 18 -d ./ts
しかし上記のような実験をしてたら、ときどき不正なファイルが生成されることに気付いた。 OneTwoFourのストリームファイル名は YYMMDDhh_ChNN.ts である。hhの部分が 時(hour)な訳であるが....
-rw-r--r-- 1 root root 6309 1月13日 15:59 09011315_Ch18.idx (正しい) -rw-r--r-- 1 root root 185247444 1月13日 15:59 09011315_Ch18.ts (正しい) -rw-r--r-- 1 root root 9 1月13日 15:42 09011355_Ch18.idx -rw-r--r-- 1 root root 260192 1月13日 15:42 09011355_Ch18.ts (55時?)
しかも不正ファイルが生成されてから、またすぐに09011315_Ch18.tsへの書き込みが 再開されるのだ。
不審に思って手元のワンセグチューナに接続している、 ワニグチクリップをグリグリしてみた。
-rw-r--r-- 1 root root 9 1月13日 15:48 09011375_Ch18.idx -rw-r--r-- 1 root root 260004 1月13日 15:48 09011375_Ch18.ts -rw-r--r-- 1 root root 9 1月13日 15:48 090113146_Ch18.idx -rw-r--r-- 1 root root 520196 1月13日 15:48 090113146_Ch18.ts
なるほど。不正なストリームをTOTパケット(時刻情報)として拾ってしまうのだな。 受信状態が良ければ関係ないのか。
とか上に書いたら、さっそくperlrtmp氏が TOTのCRCチェックを追加した対策版を公開 してくれたので、 それを含んだLinux初期化スクリプトを公開します。要するに、 昨日のドライバをインストールしたLinuxサーバに、 ワンセグチューナを差して、コレをインストールすれば、 起動時から録画サーバになる というわけね。
昨日も書いたがLOG-J200は設計が悪すぎる。
最初VMWare上でドライバを開発してて パケット取りこぼし過ぎて 頭抱えていたのは内緒だ(笑)。 おおざっぱに見ても BULKコマンドを毎秒1000回以上 やりとりしなきゃならないデバイスってどうよ?と。 こういうのは「じゃ俺このタイミングで流しとくから」「ういー」ってハンドシェイクしたら、 後は何も言わなくてもデータが規則正しく流れてくるアイソクロナス転送を使うべき。
計算すると、2msに7回以上割り込みを処理できないと取りこぼすから、仮想マシンではもちろんNGだ。 WindowsのOneTwoFour.exeはシステム負荷が高まると良く 例外吐いて止まって たが、アレは一概にOneTwoFourの せいとは言えないのよ。いくらRTスケジュリングで動くようになってても、ユーザランド(アプリとDDL)にドライバの 機能が含まれてるようなもんだからな...。
こうなると、ドライバを開発したはいいものの、やはり 不安なのは同時起動。 果して7本同時とか動くものなのか??? 昨日今日でお膳立は整えたつもりなので誰かチャレンジしてください(^^;