Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как сделать таймеры в FLV плеере? (http://www.flasher.ru/forum/showthread.php?t=112706)

джонатан 05.06.2008 19:18

Как сделать таймеры в FLV плеере?
 
Вложений: 1
Здравствуйте! Вот есть у меня FLV плеер, надо сделать:
1.Чтобы были одни часики, которые показывает текущее время воспроизведения.
2. Другие часики, на которых написана общая длина файла.

Вот код плеера:
Код:

// Stream FLV-player by Jonathan
// Разрешение видео - 320 x 240

var src:String = "letstalk.flv";

var flv_connect:NetConnection = new NetConnection();
flv_connect.connect(null);
var motionStream:NetStream = new NetStream(flv_connect);
var soundControll:Sound = new Sound(_level0);
var duration:Number = 0;
// длина ролика. ее мы будем получать по событию onMetaData
var seeker:Number = null;
// переменная для setInterval - для ускорения перемотки
var timePressed:Number = 0;
// таймер фиксирующий время нажатия клавиши перемотки
var onTheRun:Boolean = false;
// состояние плеера - проигрывается видео или нет
//////////Чтобы проигрывать видео необходимо создать экземпляр типа Video (Делается это в библиотеке)
motion_mc.motion_vid.attachVideo(motionStream);
motionStream.setBufferTime(2);
/// Указывает сколько секунд видео должно загрузиться чтобы началось воспроизведение. В процессе проигрывания, если первые 2 секунды уже проигрались, а вторая порция еще не подгрузилась происходит остановка, до тех пор пока не подгрузятся следубщие 2 секунды.
motionStream.onMetaData = function(meta:Object):Void  {
        duration = meta.duration;
        /*событие возникает, когда плеер связывается с видеоФайлом, и получает от него Мета_данные в виде объекта.
        Чтобы трассировать эти данные необходимо раскомментировать код.*/
        //for (var prop in meta) {
        //        trace(prop+" = "+meta[prop]);
        //}
};
motionStream.onStatus = function(motion_status:Object):Void  {
        //for(var prop in motion_status) {
        //trace(prop + ": "+motion_status[prop]);
        //};
        //// Событие помогает отслеживать состояния воспроизведения - ошибки загрущки, остановку, начало, перемотку - читаем хелп, там все написано. Вот тут возможен момент - если готовить flv  в Макромедиа Флеш8Видео энкодере - и подрезать там длину ролика - то это неблагоприятно сказывается на статусе СТОП. Вывод - не резать длину ролика в энкодере.
        if (motion_status.code == "NetStream.Play.Stop") {
                motionStream.seek(duration);
                motionStream.pause(true);
                play_btn._visible = true;
                pause_btn._visible = false;
        }
};
/*****КНОПКИ*****/
//PLAY
play_btn.onEnterFrame = function() {
  if(this.direct) this.nextFrame();
  else this.prevFrame();
}
play_btn.onRollOver = function() {
        this.direct = true;
}
play_btn.onRollOut = function() {
this.direct = false;
}
play_btn.onRelease = function():Void  {
        this._visible = false;
        pause_btn._visible = true;
        if (onTheRun) {
                if (vt_mc._width == 320) {
                        motionStream.seek(0);
                }
                motionStream.pause(false);
        } else {
                onTheRun = true;
                motionStream.play(src);
        }
};
//PAUSE
pause_btn.onEnterFrame = function() {
  if(this.direct) this.nextFrame();
  else this.prevFrame();
}
pause_btn.onRollOver = function() {
        this.direct = true;
}
pause_btn.onRollOut = function() {
this.direct = false;
}
pause_btn.onRelease = function():Void  {
        this._visible = false;
        play_btn._visible = true;
        motionStream.pause(true);
};
//STOP
stop_btn.onEnterFrame = function() {
  if(this.direct) this.nextFrame();
  else this.prevFrame();
}
stop_btn.onRollOver = function() {
        this.direct = true;
}
stop_btn.onRollOut = function() {
this.direct = false;
}
stop_btn.onRelease = function():Void  {
        motionStream.seek(0);
        onTheRun = false;
        pause_btn._visible = false;
        play_btn._visible = true;
        motionStream.close();
        motion_mc.motion_vid.clear();
};
rew_btn.onPress = function():Void  {
        clearInterval(seeker);
        timePressed = 0;
        seeker = setInterval(changePos, 100, -2);
};
fwd_btn.onPress = function():Void  {
        clearInterval(seeker);
        timePressed = 1;
        seeker = setInterval(changePos, 50, 1);
};
fwd_btn.onRelease = rew_btn.onRelease=function ():Void {
        clearInterval(seeker);
        timePressed = 1;
};
//////////seek
function changePos(dir:Number):Void {
        timePressed++;
        dir *= Math.ceil(timePressed/10);
        var dest:Number = motionStream.time+dir;
        if (dest<0) {
                dest = 0;
        }
        if (dest>duration) {
                dest = duration;
        }
        motionStream.seek(dest);
}
///////////////// volume
volumes.vd_mc.onPress = function():Void  {
        this.startDrag(false, 1, 5, 44, 5);
        this.onMouseMove = changeVolume;
};
volumes.vd_mc.onRelease = volumes.vd_mc.onReleaseOutside=function ():Void {
        this.stopDrag();
        delete this.onMouseMove;
};
function changeVolume():Void {
        var val:Number = Math.floor((this._x-7)*2.7);
        soundControll.setVolume(val);
        this._parent.vi_mc._x = this._x;
        updateAfterEvent();
        if (this._x < 2) {
                _root.vol_ico.gotoAndStop(2);
        }
        if (this._x > 1) {
                _root.vol_ico.gotoAndStop(1);
        }
       
}
////// инит графики
vt_mc._width = 0;
// vt - индикатор времени
vl_mc._width = 0;
// vl - индикатор загруженного контентая
motion_mc.onEnterFrame = function():Void  {
        var proc:Number = Math.floor(motionStream.bytesLoaded/motionStream.bytesTotal*320);
        vl_mc._width = proc<320 ? proc : 320;
        var timer:Number = Math.ceil(motionStream.time/duration*320);
        vt_mc._width = timer<320 ? timer : 320;
};
//volumes._y = 256;
volumes.vi_mc.setMask(volumes.vm_mc);
pause_btn._visible = false;

+ Креплю исходник.

Очень надеюсь на вашу помощь! Спасибо.


///////////////// MESSAGE 2

Я немного разобрался и понял, что длинну выдает вот это:
Код:

_root.ostal.ostal_clock.text=meta.duration+ "sec";
Но оно выглядит вот так "40,464 sec", а как мне сделать, чтобы писало в формате (МИНУТЫ : СЕКУНДЫ )

Спасибо.


///////////////// MESSAGE 2

Короче разобрался с тем который Считает сколько всего времени занимает ролик. Сделал это так:
Код:

function Ocruglenie(nbr:Number):String {
                if(nbr < 10) {
                        return "0"+Math.floor(nbr);
                } else {
                        return Math.floor(nbr).toString();
                }
        };

motionStream.onMetaData = function(meta:Object):Void  {
        duration = meta.duration;
       
        /*событие возникает, когда плеер связывается с видеоФайлом, и получает от него Мета_данные в виде объекта.*/
       
        for (var prop in meta) {
        _root.ostal.ostal_clock.text=Ocruglenie(duration/60)+":"+Ocruglenie(duration%60);
        }
};

А как теперь мне сделать, читобы таймер показывал текущее время воспроизведения???
Я думал сначала сделать обычный тамер, который начинает считать при нажатии на кнопку play, но это не катит, т.к. если скорость медленная у юзера, а ролик большой таймер не будет останавливаться когда воспроизведение начнет обгонять состояние загрузки.

Я так понимаю, что это нужно делать гдето тут:
Код:

motionStream.onStatus = function(motion_status:Object):Void  {
        for(var prop in motion_status) {

А чкак не знаю...

Ну посоветуйте Вы уже мне, хочть чтонибудь! Пожааалуйста!!!

silin 05.06.2008 21:47

а что за паника?
duration ты получил в onMetaData
текущее время см. NetStream.time
сколько секунд в минуте тоже известно

каких еще советов ты ждешь?

джонатан 05.06.2008 22:43

Спасибо! Я сделал!

tov_diatel 12.05.2011 19:31

Не подскажите как узнать текущее время у flv не подгружаемого из вне а изначально лежащего на в кадре?


Часовой пояс GMT +4, время: 09:21.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.