[BlueLeaf1336]> PROBLEMS> MediaSkipper>

30秒スキップのできるプレイヤー MediaSkipper > ぎりぎり実用的

historyTOP

2008/01/10:作成

ソースコードと実行ファイルです。20080110MediaSkipper.zip(275,236bytes)

はじめにTOP

今までかなり長い間、A Player というプレイヤーを使っていました。ちゃんとバージョンアップもされるし、プレイリストをコンボボックスにしていて非常にコンパクトだし、フォルダをドボっと落とすとちゃんと中に入っているファイルを拾い出してくれたり、MediaPlayer で再生できる動画に加えて RealPlayer で再生できるものも何とかしてくれたりと、なんかこうつぼにはまっていました。

ただ、早送りできない動画を早送りしようとすると、多分何とかして早送りしようとしてくれてるんだと思うんですが、結局早送りできないようでしばらく固まってしまうのが残念でした。

また、そういう方面の動画を飽きるほどダウンロードしてくると見ている途中でゴミ箱に捨てたくなったりするわけで。で、再生している動画の入っているフォルダをプレイヤーの横に並べておいて捨てにいくことになるわけで。で、そういう方面の動画は結構ファイル名が適当でどうしようもないぐらい見つけにくかったりするわけで。

文句言ってる暇に作ればええやんと Delphi の恵みを知っているものとしてつくって見ることにしました。もちろん動画のフォーマットから勉強するのもひとつの手ですが、死ぬまでやっても終わりそうにありません。ところで WindowMediaPlayer をインストールするともれなく Delphi で TWindowMediaPlayer というコンポーネントが使えるようになります。せっかくなのでこれを利用することにします。

今までにも何回か、TWindowsMediaPlayer について勉強してきたのでそのとき調べたことを再利用することにしました。 また、WindowMediaPlayer で再生できないファイルも結構あるんだと思うんですが、

すでに、上に上げたようなリンクをたどって結構な量のコーデックをインストール済みなので、今のところ個人的には問題ないです。

目標TOP

「はじめに」がえらく長くなったので、次にいきます。目標です。TWindowsMediaPlayer - 003 - 再生画面のサイズを Form のサイズに合わせる で書いたことに重複しますが、こんな感じです。それから、A Player がすでにやっていることも当然自作しないといけないわけで。

ぎりぎり実用化TOP

というのが、これまでの経緯でした。いかにも今からはじめるみたいな感じて書いてみましたが、上の目標にそってそれなりにプログラムを作ってみました。で、タイトルにもあるようにぎりぎり実用的になったような気がするので、サイトに公開してモチベーションを高めてやろうと。

以下、スクリーンショットと簡単な説明をつけます。自分のために。

1.再生画面(が隠れるほどのプレイリストをたらした状態)

こんな画面です。マイドキュメントの中にあるマイビデオフォルダをドロップしてみました。

プレイリストっていうかコンボボックスに一気に追加します。ただ、サブフォルダまでの検索を一途にやってしまうと落とすフォルダによっては大変なことになります。しかし普通ドロップされたフォルダやファイルの数だけならそれほど多くないので、ドロップされた数個のファイルやフォルダを記憶だけして、検索そのものは別スレッドにさせています。そのため思ったよりも早く再生が始まって少しだけうれしいです。

また、フォルダが続く限り検索し続けるので、途中で検索をやめたくなったときは ESC キーでキャンセルもできます。

ついでに画面の真ん中付近をクリックすると、再生/一時停止を切り替えられます。

2.「操作」メニューの中身

ただ単にアクセラレータキーを設定するためだけにメニューを作っています。

目標に挙げたとおりの巻戻しと早送りです。画面の下に並んでいる4つのボタンも同じです。ただほとんど押したことありません。左右の矢印キーと CTRL キーで十分です。

それから再生する動画の切り替えです。上下の矢印キーでも切り替えられます。

ソレカラゴミ箱に捨てる、です。今見ている動画を大体捨てることができます。※1

※1 DivX か何かがファイルをつかんで離さないことがあります。その場合は、本家 MediaPlayer(以下、本家) でも捨てられないのでよしとします。ちなみに A Player でも無理のようです。

[関連する不具合] このメニューを実行(CTRL+DEL キーでもOK)すると、確認画面を表示しますが、この画面は Windows が出している画面なので、横着して「はい」が押されたのか「いいえ」が押されたのかを判定していません。つまり、「いいえ」を押して結局捨てなかったとしても無条件にプレイリストから削除すると思います。今までに「いいえ」を押したことがないので確かめてないのですが、絶対にそうなります。

今気づいたんですが、swf ファイルも再生できるみたいです。何かをインストールしたのか?
それともうひとつ。再生内容のスクリーンショットが取れてます。BBS で教えていただいた方法を使うと wmv ファイルでもできましたが、少なくとも swf ファイルは何も工夫しなくても取れるようです。

それ以外に、画面下のスライダーを使ってステレオバランスを調整できるのと、スピーカーっぽいボタンを押すと Windows のボリュームコントロールを表示します。

また、ステータスバーの左から3つ目には再生中の動画のサイズを表示します。この数字が大きいときにゴミ箱に捨てるとかなりうれしくなれます。

3.バージョンとか設定とか。

何も付け加えることはありません。

4.ありがちなプロパティ確認画面

以前に TWindowsMediaPlayer の使い方を調べたときにテストしたプロパティの列挙の処理がもったいないのでつけてます。

5.このプログラムを一気に実用的なレベルに引き上げた画期的な設定画面(いいすぎ)

ところで、かなり悩んだのがドロップされたファイルが動画かどうかどうやって判断するか、ということでした。

レジストリを覗いてみて、本家が標準対応してるっぽい拡張子のリストを見つけたんですが、コーデックを追加できるので意味なしです。

また、本家で未対応かもしれない拡張子のファイルをドロップしたときに表示される画面で「はい」を押したときに記録される場所もレジストリの中に見つけたんですが、上と同じ理由でだめです。図では、結局「いいえ」を押したので、「.rm」は記録されてません。

逆に、完全に無視して全部プレイリストに追加すると、さっきの未対応拡張子確認画面がいやになるほど出てきてどうしようもなくなります。この問題に対する本家の答えは、未対応拡張子のファイルはドロップさせないというものです(多分)。

で、結局たどり着いたのがこれです。

見たとおり、サイズです。普段みる動画はたいてい 1MB 以上あります。TV を録画したのを DVD にダビングした日には 4GB 超にさえなります。じゃあそれで縛ればええやん。と思ってやってみたらこれがかなり効果ありでびっくりです。それに、普通に使う分にはほとんど動画ばっかり入ってるフォルダしかドロップしないし。
そういえば、4GB ファイルは再生したことないです。やってみないと。

また、念のため隠しファイルやシステムファイル(って何か不明ですが)をはじけるようにしているのと、特定のファイル名でもはじけるようにしています。

できることは以上ですが、しょうもないプログラムの割りに説明してみるとうっとしいぐらい長くなってしまいました。

すでにわかっている気になる点、または仕様TOP

挙げだすときりないけれども、個人的に致命的じゃないと思ってるものばかりです。ただ、RealPlayer ファイルは何とか再生したいなあと思います。

ほんとは、無理矢理な処理をやっているソースコードを載せて、そのコードを書いたときの気持ちもメモっておきたかったのですが、やめときます。

EOFTOP