|
|
|||||
Как сделать таймеры в FLV плеере?
Здравствуйте! Вот есть у меня 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 Я немного разобрался и понял, что длинну выдает вот это: Но оно выглядит вот так "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, но это не катит, т.к. если скорость медленная у юзера, а ролик большой таймер не будет останавливаться когда воспроизведение начнет обгонять состояние загрузки. Я так понимаю, что это нужно делать гдето тут: А чкак не знаю... Ну посоветуйте Вы уже мне, хочть чтонибудь! Пожааалуйста!!!
__________________
Убейте меня! Последний раз редактировалось джонатан; 05.06.2008 в 21:41. |
|
|||||
Спасибо! Я сделал!
__________________
Убейте меня! |
|
|||||
Регистрация: Dec 2005
Сообщений: 113
|
Не подскажите как узнать текущее время у flv не подгружаемого из вне а изначально лежащего на в кадре?
|
Часовой пояс GMT +4, время: 23:03. |
|
« Предыдущая тема | Следующая тема » |
|
|