2008/08/01 ■ cap_hdus 0.08 Twitterでつぶやくこのエントリーをブックマークに追加このエントリーを含むはてなブックマーク

cap_hdus 0.08を公開しました。なんかものすごいいろいろ変わってます。

この方向(単なる単機能ツールからある意味リッチ化?)に持っていくのは正直かなり迷いがあったのですが、複数チューナの連携や、視聴と録画を両立させるにはある意味やむをえないかなとちょっとゴリゴリと書いてみました。
「複数チューナの連携」(複数チューナ使用時の動作の強化)というのがいったいどういうことなのか、軽く説明してみたいと思います。そういう使い方をしようという人はあまりいないような気もするんですけれども。

たとえばSegTVを起動して、NHKの視聴をはじめるとこんな感じになります。
1番目のチューナが起動して、残りのチューナは電源が切れています。

録画することにします。録画ボタンをぽちっと押すと、記録を開始します。このときSegTVではそのままNHKが表示されています。
と、ここでNHK教育が気になったのでチャンネルを変えると…

NHKの録画はそのままに、二番目のチューナが起動して(同じUDPポートの設定を引き継いで)NHK教育の送信を開始します。ユーザ側ではどのチューナがどう動いているのか気にする必要はありません。

ここでチャンネルを再度NHKに戻すと、(2番目のチューナのチャンネルを切り替えるのではなく)、2番目のチューナから離脱し、既にNHKのデータを垂れ流している1番目のチューナを使い始めます。「視聴用のチューナ」は必要なく、必要なチャンネルにチューニングされたチューナが既にあればそれを自動的に使います。つまりどういうことかというと、全チューナ録画中で埋まっていても、録画中のチャンネルであれば視聴モードで選局できる、ということです。

こうやって「使わなくなった」チューナは一定時間このまま電源をONしておき、ある程度以上使わなかった場合に電源を落とします。そして電源が入っているチューナは(表示されていませんが)選局されたままの状態でしばらく保持されます。
別のチャンネルを選択すると、既に選局されているチューナを優先して使います。から、たとえば2局を交互に切り替えるザッピング視聴をする時にはチューニングのタイムラグ分早く切り替えられたりします。(ま、微々たるものというか結局はMPEGのデコードで時間がかかるのでそれでも快適な選局というわけにはいかないのですが)


今回のバージョンでやりたかったのは、つまりこういうこと(協調動作)だったんですね。完全な自己満足の世界ですが。

最初は「24時間フルセグ野郎」をやりたくて制御部分を書き始め、
せっかくなので単機能ツールでも作っておくかとcap_hdusを書き、
「なんだよ視聴できないのかよ」と言われてSegTVをでっちあげ、
「録画中のプレビューは?」と言われて気がついたらこうなってました(><)

なんか途中から結構これはこれでオモシロくなってきちゃったのでいろいろ付け足したいところもある…の、ですが…。
有給まで使って家族ほったらかしで夢中になってたのでそろそろペースダウンしないといろいろな方面(特に家庭方面)がまずいことに。。。。

というわけでしばらくペースを落とします。細かい修正くらいはすると思いますが。
SegTVの使い勝手が大不評みたいですが(笑)、これはあくまでコンセプトサンプルということであんまり直すつもりはありません。cap_hdus008ベースならSegTunerControl.dllを呼べばすごく簡単に同等のものが作れると思いますので誰かやってください ^^;

…と、この場を借りて簡単にこれも解説しておきます。
SegTuner_SendUDPを呼んでHandleを受け取るだけでUDP送信が始まります。MaxTimeoutに設定した秒数が経過すると自動的に止まってしまうので(ウォッチドグタイマというか)止まらないよう定期的にHandleを引数にしてSegTuner_UpdateTimeoutを呼び出してください。そして終わったらSegTuner_Stop。
録画したい場合は同様にSegTuner_SaveFileを呼びます。SendUDPは視聴としてカウントされ、どうしてもチューナが足りない場合は強制的にチャンネルが変更される可能性があります(視聴中に録画が始まった場合など)。逆にSaveFileは録画としてチャンネルがロックされます。SendUDPを使用して(受け取るアプリ側で)録画する場合は、SendUDPのほかにSaveFileのファイル名を空にして同時に呼んでください。ダミーの録画指令として扱い、該当のチャンネルをロックします。

このDLLはたぶん普通のstdcall規約で呼べると思います。引数はSegTunerManager\SegTunerManager_Intf.pasを参考に。PChar→(char *)、var Handle:DWORD→(DWORD *)Handle、の意です。



…と、最後にどうしても書きたかったことを。

今回は大騒動になり、正直本意でない状況になってしまいました。
以前にも同じことを書きましたが、フルセグの世界は超凄腕のHackerがごろごろいて、ほぼ彼らの成果で凄いことになっています。その中で、cap_hdusが普通に「録画(記録)して再生できる」地点まで到達するにあたって、私の果たした役割というものは本当に本当に本当に微々たるものでしかありません。って書くのも恥ずかしいレベルです。

ARIB STD-B25の処理を確立したまるも氏、TSのデコードやプレイヤ・ドライバなど体系的に整備してきた拡張ツールの中の人氏、そのほかツール類の蓄積、チューナ改造方法の経験の蓄積、そしてなによりもなによりも、今回のHDUSのHack方法を開発したYN_JP40___9 ◆UNFyHWN3Jg氏。
これらの成果・実績はどれを取っても「俺には絶対出来ねぇっす><」と断言できるものばかりです。みんなスキル凄すぎます。
そんな中、妙に私のページが参照される事態になってしまって、正直恥ずかしいのです。というわけで、この場を借りてあらためて、御礼を申し上げたく思います。そして、SKNETさんごめんなさい

そして、こういう蓄積の上に自分が立っていることを自覚しつつ、自分には自分の出来ることをしたいなと思っているわけです。(とりあえず、24時間?) Related Posts with Thumbnails