●ローカルFLV→ストリーミングFLV
年末にサーバーに直置きのローカルFLVで再生するflvプレイヤーを納品したのですが、それがアクセスが多くなりサーバーに負荷をかけてしまったようです。
で、最近になって負荷分散を目的とし、某J社のFlashMediaServerによるストリーミングへ移行する運びとなり、合間でチクチク作業してました。
まず、前回のものはローカルFLVなんで
・NetStream.bytesLoaded と NetStream.bytesTotal でロード監視
・上記の数値で適宜に擬似ストリーミング。
・NetStream.timeでスライダーも動かせる仕様。
・音量はattachVideoしたインスタンスのSound.setVolumeでon/off調整。
・ビデオ終了や再生は、NetStream.timeの変化で検出。
・ビデオ自体の総時間はonMetaDataで取得
という感じでした。
で、実際、クライアント様が借りた某J社のFlashMediaSeverに合わせて移植するんです。
参考にしたのはコレ。
heteml | FLV ストリーム配信設定マニュアル
http://heteml.jp/support/manual/flv/
もちろん、そのまま流用はしないけど。
今回だけじゃなく簡単なflv接続テストには使ってます。
で、結果。
案外スムーズに移植が行ったかな。
ただ、変わったことといえば2つ。
一番はNetStream.bytesLoaded と NetStream.bytesTotal でロード監視ってのを、undefinedで取れなくなってしまったので、FlashMediaServerから勝手に通知される「再生しろ」っていう命令に任せるようにしました。ストリーミングの性質上、切り刻んでデータを渡すわけで、読み込み中のバイト数や全体のバイト数なんてのは意識してないだろうからね。
つまり、ここもNetStream.timeの変化に頼ったってこと。前フレームの再生時間(NetStream.time)と現フレームで変化があれば、ロード完了で再生中。
あと、スライダーが動かせる機能は操作できないようにしました。NetStream.timeをしっかりたたくものの、移動後に読み込んでいるのか映像のレスポンスが悪かったので。佳境でなければ原因究明するんだけどね。いつかうまく行くようにしないとな。
これもストリーミングの性質上しかたないんでしょう。たしかにWindowsMediaServerでストリーミング中にもスライダー移動すると33% 56% 88% 99% みたいな待ちが生じるもんね。
あと、ストリーミングFLVの音部分のSoundオブジェクトがどこに言ったのがわからなくなった。on/offがどうにもうまくいかない。attachVideoされたインスタンスにSoundオブジェクトないんかい。結局、new Sound( _root ) でやったらうまく行った。( _root )ならば無記名な()でもいいんだろうな。
あとは、微調整はあれど以前の挙動でちゃんといったかな。
だいたい半日くらいの実装で収まってくれてよかったです。