トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     flv制御について
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
みみみぃ
Åê¹ÆNo.36512
投稿日時: 2007-11-28 14:22
新米
居住地: 埼玉県
投稿: 10
使用環境:
WinXP,Flash8
Re: flv制御について
お返事が遅れてしまってすみません・・。

ご指摘を受けた箇所を修正、若干調整したところ思い通りの動作が実現できました。

おつきあいいただいてありがとうございました。
あにぃ
Åê¹ÆNo.36383
投稿日時: 2007-11-20 20:21
職人
居住地: 北海道
投稿: 250
使用環境:
Flash8
FlashCS3
WinXP
FlashLite1.1 / 2.0
Re: flv制御について
seekのMC側の処理が

pos = _root.stream_obj.time / _root.total_time;
marker._x = Math.ceil(bar._width * pos);

で切り上げているのに対し、


on (release, releaseOutside) {
    this.stopDrag();
    _root.stream_obj.seek(Math.floor(_root.total_time * (this._x / 133)));
}

で切り捨てているためかと思います。


_root.stream_obj.seek(Math.ceil(_root.total_time * (this._x / 133)));

にしてみてはいかがでしょうか?


----------------
質問する際には、ご自分でできる限り調べてから投稿して下さい

P・S 職人おめでとう。(08/10/09)

みみみぃ
Åê¹ÆNo.36382
投稿日時: 2007-11-20 20:07
新米
居住地: 埼玉県
投稿: 10
使用環境:
WinXP,Flash8
Re: flv制御について
度々のご回答、ありがとうございます。

さっそく試して見た所、しっかり移動した位置で再生されました。

ですが、つまみ(marker)をbarの最後(133の位置)まで一気に移動すると、若干前の位置に戻ってしまったり、つまみを話してもflvが再生されない場合が発生してしまいました・・・。

私の書き方がおかしいのでしょうか、申し訳ありませんがご教授頂けると幸いです。


1フレーム目
//動画変数
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);
stream_obj.onStatus = function(infoObject:Object):Void {
if(infoObject.code =="NetStream.Seek.Notify"){
_root.stream_obj.play();
_root.marker = true;
trace("シーク後のフラグ" + _root.marker);
}
};


//再生ポジションナビゲータ
total_time = 0;

//マーカーフラグをオン
marker = true;

1フレーム目のステージにはstream_objというビデオオブジェクトが配置してあります。

同ステージにseekというMCを配置し、中にはbar、markerというMCをそれぞれ配置してあります。


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のMCには

on (press) {
_root.stream_obj.pause();
this.startDrag(false, 0, 6, 133, 6);
_root.marker = false;
trace(_root.marker);
}

on (release, releaseOutside) {
this.stopDrag();
_root.stream_obj.seek(Math.floor(_root.total_time * (this._x / 133)));
Math.floor(_root.total_time*(this._x/133)));
}

onClipEvent (mouseMove) {
updateAfterEvent();
}

と記述してあります。


現在おかしくなってしまっている箇所は

markerをonReleaseしているはずなのにFLVが停止したまま。
markerを動かすと稀に動かした位置より少し前に戻ってしまう。(seekのほうで指定しているmarkerのx座標指定とmarkerをドラッグした時のx座標指定が食い違ってしまっているから?)

何度も試してみたのですが、どうしてもわかりません。
どうか、よろしくお願いします。
あにぃ
Åê¹ÆNo.36379
投稿日時: 2007-11-20 18:22
職人
居住地: 北海道
投稿: 250
使用環境:
Flash8
FlashCS3
WinXP
FlashLite1.1 / 2.0
Re: flv制御について
メタデータよりトータルの時間を取得している様ですので、

on (release, releaseOutside) {
    this.stopDrag();
    _root.stream_obj.seek(Math.floor(_root.total_time*(this._x/133)));
}

等でいけそうな気がします。


----------------
質問する際には、ご自分でできる限り調べてから投稿して下さい

P・S 職人おめでとう。(08/10/09)

みみみぃ
Åê¹Æ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.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.36374
投稿日時: 2007-11-20 15:18
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: flv制御について
引用:
あにぃさんは書きました:
startDrag(this, false, 0, 0, 133, 0);

ではないでしょうか?
startDragの第一引数は、ターゲットインスタンスへのパスだったような気がします。

loadMovie と同様に、startDrag には、
グローバル関数である startDrag() と
MovieClip のメソッドである MovieClip.startDrag() があります。

なので、両方使えます。
startDrag(target);
target.startDrag();


----------------
質問する際は、回答者に具体的な情報を与えてください。

あにぃ
Åê¹ÆNo.36372
投稿日時: 2007-11-20 15:01
職人
居住地: 北海道
投稿: 250
使用環境:
Flash8
FlashCS3
WinXP
FlashLite1.1 / 2.0
Re: flv制御について
seek(n)とすると、動画のn秒目に飛ぶことになります。
なので、現在のスクリプトでは133秒の動画でしか正常の動きをしないと思われます。

startDrag(this, false, 0, 0, 133, 0);

ではないでしょうか?
startDragの第一引数は、ターゲットインスタンスへのパスだったような気がします。最近つかってないのでうろ覚えです。


----------------
質問する際には、ご自分でできる限り調べてから投稿して下さい

P・S 職人おめでとう。(08/10/09)

みみみぃ
Åê¹Æ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.36344
投稿日時: 2007-11-19 15:19
職人
居住地: 北海道
投稿: 250
使用環境:
Flash8
FlashCS3
WinXP
FlashLite1.1 / 2.0
Re: flv制御について
seekに入る値は0~133のようですが、flvはかならず133秒のものしか再生されないということでよろしいでしょうか?



marker
onClipEvent (enterFrame) {
    _root.stream_obj.seek(_root.stream_obj.time = this._x);
}

seek
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
        }
    }
}

seekのenterFrameでは再生時間でmarkerの位置を変更し、
markerのenterFrameでは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();
}

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
        }
    }
}

とし、release時のみseekさせてみてはいかがでしょうか?

あと、_root.markerをtrueおよび、再生開始にするタイミングは、シーク処理が終わった後のほうがいいかと思います。

stream_obj.onStatus = function(infoObject:Object):Void  {
  if (infoObject.code == "NetStream.Seek.Notify") {
    _root.marker = true;
    _root.stream_obj.play();
  }
}


----------------
質問する際には、ご自分でできる限り調べてから投稿して下さい

P・S 職人おめでとう。(08/10/09)

(1) 2 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops