Недавно, на работе, столкнулся с такой задачей. Надо было:
- Сделать прелоадер видео - файла.
- Запустить видео только тогда когда оно полностью будет загружено.
- По окончанию видео, проиграть его снова.
Казалось бы, все просто. Импортировал класс flash.net.NetStream, а дальше работай с ним как тебе угодно. Но есть несколько подводных камней.
Первым камешком стало то, что у flash.net.NetStream нету прослушчиков на события загрузки. Вторая проблема возникла при попытки узнать состояние, проигран ли ролик. Но немного почитав Help я написал вот такой маленький класс
- package{
- import flash.display.MovieClip;
- import flash.text.TextField;
- import flash.text.TextFieldAutoSize;
- import flash.events.Event;
- import flash.events.NetStatusEvent;
- import flash.net.NetStream;
- import flash.net.NetConnection;
- import flash.media.Video;
- public class VideoExample extends MovieClip{
- private var _duration:uint;//продолжительность, если вдруг понадобится
- private var _videoStream:NetStream;//поток видео
- private var _TextPreloader:TextField;// типа текстовый прелоадер
- public function VideoExample(){
- _TextPreloader = new TextField();
- _TextPreloader.background = true;
- _TextPreloader.autoSize = "left";
- //Создаем видео поток и загружаем видео фаил все просто
- var videoConnection:NetConnection = new NetConnection();
- videoConnection.connect(null);
- this._videoStream = new NetStream(videoConnection);
- var video:Video = new Video();
- video.height = 200;
- video.width = 220;
- addChild(video);
- addChild(_TextPreloader);
- var client:Object = new Object();
- this._videoStream.client = client;
- video.attachNetStream(this._videoStream);
- client.onMetaData = onMetaData;
- this._videoStream.play('get_video.flv');
- //Ставим видео на паузу, чтобы запустить после поной его загрузке
- this._videoStream.pause();
- //прослушка для предлоадера, обычный ENTER_FRAME
- this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
- }
- private function onMetaData(data:Object):void{
- this._duration = data.duration;
- }
- private function onEnterFrame(event:Event):void{
- if(this._videoStream.bytesLoaded < this._videoStream.bytesTotal){
- //Собственно проценты для прелоадера
- _TextPreloader.text = Math.round(this._videoStream.bytesLoaded / this._videoStream.bytesTotal * 100)+"%";
- }
- else if(this._videoStream.bytesLoaded == this._videoStream.bytesTotal){
- //Если полность загружено видео
- _TextPreloader.text = "Видео полность закачано";
- //прослушка состояния видеоклипа
- this._videoStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
- this._videoStream.resume();//Запускаем видео проигрываться
- this.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
- }
- }
- private function netStatusHandler(event:NetStatusEvent):void{
- if(event.info.code == "NetStream.Play.Stop"){
- //Если NetStatusEvent.NET_STATUS выдает NetStream.Play.Stop
- //То видеоклип проигрался до конца
- //Начинаем его проигрывать с начала
- event.target.seek(0);
- //Конечно же можно было написать this._videoStream.seek(0);
- //Но я хотел показать что event.target == this._videoStream
- _TextPreloader.text = "Видео перемотано";
- }
- }
- }
- }
Вот что получилось:
Досмотрев ролик до конца вы увидете надпись - “Видео перемотано”.
flash.events.NetStatusEvent - хороший помошник для отслеживания состояния видеоклипа, у него всего одна предопределенная константа NET_STATUS, но очень много значениев статуса. Весь список есть здесь flash.events.NetStatusEvent
RSS Feed
Twitter
Posted in
Tags: 
Óтлично,но вот как сделать что бы на плеере показывал адрес сайте?
всмысле подписать как бы плеер.Как это сделать?
Если не сложно подскажи инфу где можно найти.Блог прикольный,интересный!
Спасибо за похвалу:)
Ответ на ваш вопрос я написал в новом посте выше
http://www.merlinds.com/aricles/actionscript-articles/159.html