AIRやFLASHなどを表示するのに不便なので、ブログから自作サイトに移転します。

N2-Works移転先

今後はこちらで更新を行っていきます。


表題の通り、Airの開発も始めます。

デスクトップアプリケーション(大体ゲームですね)は普段ならVisualStudio 2005/C++/DirectXなどを使用して開発するのですが、Airの方が更に手軽に作れそうです。


個人の開発ですとこのぐらいの高級言語で色々と出来る方が開発効率が上がりそうなので移行したいと思ってます。


当然、仕事で行う場合はこの限りではありませんが、このブログでは基本的に小~中規模程度の物しか作る予定はありません。


Airランタイムがどの程度、吸収力があるのか幾つかアプリケーションを制作して試してみようと思います。


Flashと同じくActionScript3.0を使用することになるので、Airはその拡張版と捉えていただいて結構だと思います。


手始めにノベルゲームエンジンを制作する予定です。


FLVPlayerなどと同じような形式でブログに載せていく予定ですので、気になる方は楽しみにしておいて下さい。


AIRやFLASHなどを表示するのに不便なので、ブログから自作サイトに移転します。

N2-Works移転先

今後はこちらで更新を行っていきます。


今冬いろいろと騒がれている企業の派遣切り問題です。
雑談1回目にしてこんなテーマですが、自分がフリーのエンジニアという立場ですので、
この問題は当事者としての意識が僅かばかりですがあります。 

僅かばかりと書いたのは、なぜあれほど企業側・派遣会社側が
叩かれているのか理解できないからです。 

派遣と言えども契約というものがきちんとあります。
それを事前に提示されているなら、その契約内容に納得して契約しているはずなのです。
ごねるなら契約時点にごねるべきで、今更セーフティネットが
整備されていないとか言い出すのはおかしい気がします。 

また派遣会社側の中間搾取率を公表しないのも悪いという意見があると思いますが、
あれは派遣会社側と企業側のコネをその金額で買い取っていると思えば
妥当な金額だと思います。

 それが嫌なのであれば自分で就職・転職活動をして内定を勝ち取れば
いいのだと思います。はっきり言って派遣会社を通すのと通さないのでは、
仕事を取れる確率が全然違うと思うからです。 

それに見ていると寮に入っている派遣の方も多く見られます。
寮にかかるお金は個別で賃貸住宅を借りるよりもかかる経費は少ないはずです。
元々契約内容からすれば更新がなければいつ職を失ってもおかしくない状態ですから、
もっと普段から危機感をもっていなければおかしいのです。
貯金をするなりなんなりやりようは色々とあるはずです。 

それをいざ切られてみれば、自分の生活を保障しろなどと声高にうたうのは
間違っていると思います。 
どうもニュースで流れている現状を見ると、甘えているとしか思えないので
同情もできないのです。 

これらの人々を税金で救済するというのなら、まともに働くのは馬鹿らしくなりますよね。

もう少し派遣の皆さんは自己責任という言葉を噛み締める必要があると思います。
フリーで仕事をしてる立場としては、そんな風に感じるのでした。 

AIRやFLASHなどを表示するのに不便なので、ブログから自作サイトに移転します。

N2-Works移転先

今後はこちらで更新を行っていきます。


FLVPlayer制作第4回はMetaDataについてです。


FLVファイルには、その動画の情報を記載するMetaData領域が存在します。

といっても全てのFLVファイルにMetaDataが存在するわけではなく、あくまでその動画を作成した人が任意で挿入するものです。


MetaDataを動画作成の後に挿入したり、更新したりできるフリーソフトもあるようなので、興味のある方は試してみていかがでしょうか?


さて、今回なぜこのMetaDataが話題になっているかというと、動画のシーク機能に必要だからです。シークバーを使用して実現しますが、実際には次の画像のようなものです。


N2-Works-シークバー


赤い円のインスタンスをシークスイッチと呼ぶことにしますが、そのシークスイッチをドラッグ&ドロップすることによって、動画を任意の再生時間へスキップできる機能です。


このシークバーの幅が動画の再生時間を表しており、左端が0秒位置、右端が最終秒位置となります。つまり動画の総再生時間が事前に分かっていないと、シークスイッチの位置が動画のどの再生位置なのか分かりません。


前回の『FLV動画の再生 』で動画の再生方法を記しましたが、少なくともNetStream.playメソッドが実行される前には総再生時間を取得しておく必要があります。


その総再生時間ですが、前述したMetaDataで取得することができます。


MetaDataの取得方法は、再生対象のFLVファイルにMetaDataが含まれている場合のみコールされるコールバック関数「onMetaData」を使用して行います。


コールバックが起こるタイミングはテストしてみた結果、stream.play実行後、バッファが溜まるまでの間に発生すると思われます。


onMetaDataはイベントハンドラ関数と異なり、addEventListenerを使用して設定を行わず、コールバック先を指定し、その指定先(クラス)にコールバック関数「onMetaData」を自分で定義し、その中に処理を書きます。

具体的には以下のようなコードになります。

// コネクションのコールバック先を自分自身に設定
stream.client = this;

// コールバック関数定義
public function onMetaData(info:Object) : void
{
    // MetaDataをtraceして確認
    for (var ite:String in info) {
        trace(ite + " : " + info[ite]);
    }
}


コールバック関数定義で注意すべき点は、クラスの可視性をpublicレベルに、そして関数名をonMetaDataにしておくことです。そして引数Objectの中にMetaDataの中身が挿入されていますので、その値を利用します。上記のコードでその動画のMetaDataを全てtraceできますので一度確認してみて下さい。


その確認できるデータの中に「duration」というプロパティが存在すれば、それがその動画の総再生時間となります。値を見ていただければ分かりますが、int形式ではなくNumber形式で格納されていますので注意が必要です。単位は(秒)です。


ここまで読んでこられて次のような疑問をもたれた方もいるでしょう。

「MetaDataが存在しない場合はどうするのか」

「MetaDataが存在してもdurationプロパティが設定されていない場合はどうするのか」


実はFLVファイルの総再生時間を知る術は、上記のやり方以外、少なくともActionScript3.0で提供しているメソッドの中には存在しません。


NetStreamクラスのメソッドの中には動画の総バイト数を取得できるメソッドや、バッファリングしたバイト数などを取得できるものはありますが、総再生時間を算出する次のような式を満たすデータを全て取得することができないのです。


[総再生時間の算出式]
総再生時間 = (動画の総バイト数 * 8) / 1秒毎のbitrate(bit per second)


色々と調査してみましたがbpsを取得できるメソッドは存在しませんでした。

ではdurationが取得できない場合、シーク機能は利用できないのでしょうか。


効率を無視すればできないことはありません。

つまり、一度動画を全て再生すれば動画を再生し終えた時のイベントリスナーで、その時点の再生秒を取得することができます。


ただ、このやり方ですと100分ある動画ですと、総再生時間を取得できる時には100分経過していることになります。これではとても実用的とは言えません。


実はかなり強引なやり方ですが、この問題を解消する方法があります。

次回はそのやり方を書くことにしましょう。