メイン コーダーズルーム【スクリプト系】 flv制御について | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
みみみぃ | Åê¹ÆNo.36330 投稿日時: 2007-11-18 18:27 |
新米 居住地: 埼玉県 投稿: 10
使用環境:
WinXP,Flash8 |
flv制御について こんばんわ、お世話になります。
初めて質問させていただきます。 現在flashで外部flvを読み込み、シークバーによって再生位置を制御する、という動作をやりたいのですが、上手くいきません。 流れとしては、以下のようになります。 ●FLVを読み込む、以下のソースの用に読み込んでます。 flv01 = "01.flv"; //ローカル接続を確立 connect_obj = new NetConnection(); connect_obj.connect( null ); //ストリーミングの準備 stream_obj = new NetStream( connect_obj ); flv_view.attachVideo( stream_obj ); //メタデータを取得 stream_obj.onMetaData = function( meta:Object ) { //メタデータから全体の長さを取得 total_time = meta.duration; }; //動画の読み込み stream_obj.setBufferTime( 5 ); stream_obj.play(this.flv01); ●シークバーを作成する、seekというMCの中にbarというMCとmarkerというMCをそれぞれ作って配置しています。全体の長さと現在の再生時間に合わせてmarkerが横に動いていく、という仕組みです。 onClipEvent(enterFrame) { var pos; marker._x = 0; if( _root.total_time != 0 ) { pos = _root.stream_obj.time /_root.total_time; marker._x = bar._width * pos; } } これで一応動作はするんですが、加えてmarkerをクリックしてx軸移動させた時に対応する座標によってflvの再生時間を設定したいのですが、上手くいきません・・・。 (やりたいことはyoutubeのようなシークバーです) 解決法をお分かりになる方ご教授お願いします・・・。 開発環境:WinXP Flash8Professional 確認環境:WinXP |
あにぃ | Åê¹ÆNo.36337 投稿日時: 2007-11-19 12:04 |
職人 居住地: 北海道 投稿: 250
使用環境:
Flash8 FlashCS3 WinXP FlashLite1.1 / 2.0 |
Re: flv制御について 引用:
これで一応動作はするんですが、加えてmarkerをクリックしてx軸移動させた時に対応する座標によってflvの再生時間を設定したいのですが、上手くいきません・・・。 なにがうまくいかないのでしょうか? ・markerをクリックしてx軸移動させられない。 ・対応する座標によってflvの再生時間を設定できない。 どちらですか? ・markerをクリックしてx軸移動させられない。
・対応する座標によってflvの再生時間を設定できない。
|
みみみぃ | Åê¹ÆNo.36342 投稿日時: 2007-11-19 14:38 |
新米 居住地: 埼玉県 投稿: 10
使用環境:
WinXP,Flash8 |
Re: flv制御について わかりづらい質問で申し訳ありません、もう少し詳細に書くべきでした・・・。
今やりたいことは markerをクリックした時(on press)にflvの再生を一時停止 ↓ クリック時だけmarkerを横に移動出来るようにする ↓ markerを離した時(on release)にそのx軸の位置によってflvの再生時間を設定する です。 昨日、少しソースを付け加えましてmarkerのMCに on (press) { _root.stream_obj.pause(); this.startDrag(false, 0, 0, 133, 0); _root.marker = false; } on (release, releaseOutside) { this.stopDrag(); _root.marker = true; _root.stream_obj.play(); } onClipEvent (enterFrame) { _root.stream_obj.seek(_root.stream_obj.time = this._x); } onClipEvent (mouseMove) { updateAfterEvent(); } seekのMCに onClipEvent(enterFrame) { if(_root.marker){ var pos; marker._x = 0; if( _root.total_time != 0 ) { pos = _root.stream_obj.time /_root.total_time; marker._x = bar._width * pos; marker = marker._x } } } を、それぞれ追記しました。 markerは押された時にflvを停止し、0?133の間でドラッグを可能にして、markerフラグをfalseにする処理を(markerフラグはフラグがfalseの時にseekの動きを停止しています)、markerを離した時にmarkerフラグをtrueにし、flvを再生させる処理付け加えました。 そしてMCを読み込むたびに動画をmarkerのx軸に対応させた位置から再生したいのですが、markerを離した時にその位置から再生されず、seekに設定してある自動でmarkerが動く動作も働かなくなってしまいました。 何度試しても正常に動作してくれません。 seekに設定してある、markerを再生時間に合わせて動かすというコードがおかしいのでしょうか・・・。 引き続きよろしくお願いします。 |
あにぃ | Åê¹ÆNo.36344 投稿日時: 2007-11-19 15:19 |
職人 居住地: 北海道 投稿: 250
使用環境:
Flash8 FlashCS3 WinXP FlashLite1.1 / 2.0 |
Re: flv制御について seekに入る値は0~133のようですが、flvはかならず133秒のものしか再生されないということでよろしいでしょうか?
seekのenterFrameでは再生時間でmarkerの位置を変更し、 markerのenterFrameではmarkerの位置で再生時間を変更する。 お互いがお互いをけん制しあっているため、動きませんね。
とし、release時のみseekさせてみてはいかがでしょうか? あと、_root.markerをtrueおよび、再生開始にするタイミングは、シーク処理が終わった後のほうがいいかと思います。
|
みみみぃ | Åê¹ÆNo.36371 投稿日時: 2007-11-20 14:27 |
新米 居住地: 埼玉県 投稿: 10
使用環境:
WinXP,Flash8 |
Re: flv制御について ご丁寧にありがとうございます。
さっそく試して見たところ、動作はしました。 ですが、this.startDrag(false, 0, 0, 133, 0);のコードの影響か、133秒以上の動画だと動きが不確定になってしまいました・・。 this.startDrag(false, 0, 0, 133, 0);はseekのMCの幅が133の為、markerをonPressした時に0?133間の間でドラッグ可能にするという処理だと思って記述しているのですが(markerのMCはseekの中の0座標に配置してます)、間違っているのでしょうか・・・。 度々の質問申し訳ありませんが、よろしくお願いします。 |
あにぃ | Åê¹ÆNo.36372 投稿日時: 2007-11-20 15:01 |
職人 居住地: 北海道 投稿: 250
使用環境:
Flash8 FlashCS3 WinXP FlashLite1.1 / 2.0 |
Re: flv制御について seek(n)とすると、動画のn秒目に飛ぶことになります。
なので、現在のスクリプトでは133秒の動画でしか正常の動きをしないと思われます。
ではないでしょうか? startDragの第一引数は、ターゲットインスタンスへのパスだったような気がします。最近つかってないのでうろ覚えです。
|
ひろゆき | Åê¹ÆNo.36374 投稿日時: 2007-11-20 15:18 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: flv制御について 引用:
あにぃさんは書きました: loadMovie と同様に、startDrag には、 グローバル関数である startDrag() と MovieClip のメソッドである MovieClip.startDrag() があります。 なので、両方使えます。
|
みみみぃ | Åê¹ÆNo.36375 投稿日時: 2007-11-20 16:31 |
新米 居住地: 埼玉県 投稿: 10
使用環境:
WinXP,Flash8 |
Re: flv制御について あにぃさん、ひろゆきさん
ご丁寧にありがとうございます。 133秒までの動画しか正常に稼働しないのは _root.stream_obj.seek(_root.stream_obj.time = this._x); によって、markerの位置の0?133までしかはかれないから、ですね・・。 すみません、勉強不足でした・・・。 this._xの箇所を修正して、再度調整してみます。 |
みみみぃ | Åê¹ÆNo.36376 投稿日時: 2007-11-20 17:38 |
新米 居住地: 埼玉県 投稿: 10
使用環境:
WinXP,Flash8 |
Re: flv制御について すみません、再度質問です・・・。
133秒以外の動画に対応したく、前回ご回答を頂いたソースを若干修正しています。 seekのMCを、 onClipEvent(enterFrame) { if(_root.marker){ var pos; if( _root.total_time != 0 ) { pos = _root.stream_obj.time /_root.total_time; marker._x = Math.ceil(bar._width * pos); } } } に変更し、marker._xの位置を整数化することは出来たのですが、 (markerのほうのthis._xは整数で取ってしまっている為です) markerのほうの on (press) { _root.stream_obj.pause(); this.startDrag(false, 0, 0, 133, 0); _root.marker = false; } on (release, releaseOutside) { this.stopDrag(); _root.stream_obj.seek(_root.stream_obj.time = this._x); } onClipEvent (mouseMove) { updateAfterEvent(); } の_root.stream_obj.seek(_root.stream_obj.time = this._x);の部分をどう変更したらがいいかわかりません・・・。 this._xのままでは当然133までしか計れず、困ってしまいました。 色々考慮しstream_obj.timeなどを逆算したりしてみたのですが結局対応は出来ませんでした・・・。 初歩的な質問かもしれませんが、どなたかご教授頂けたら幸いです。 |
あにぃ | Åê¹ÆNo.36379 投稿日時: 2007-11-20 18:22 |
職人 居住地: 北海道 投稿: 250
使用環境:
Flash8 FlashCS3 WinXP FlashLite1.1 / 2.0 |
Re: flv制御について メタデータよりトータルの時間を取得している様ですので、
等でいけそうな気がします。
|
(1) 2 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |