Работа с Видео. Класс NetStream и NetStatusEvent

Недавно, на работе, столкнулся с такой задачей. Надо было:

  1. Сделать прелоадер видео - файла.
  2. Запустить видео только тогда когда оно полностью будет загружено.
  3. По окончанию видео, проиграть его снова.

Казалось бы, все просто. Импортировал класс flash.net.NetStream, а дальше работай с ним как тебе угодно. Но есть несколько подводных камней.

Первым камешком стало то, что у flash.net.NetStream нету прослушчиков на события загрузки. Вторая проблема возникла при попытки узнать состояние, проигран ли ролик. Но немного почитав Help я написал вот такой маленький класс

  1. package{
  2. import flash.display.MovieClip;
  3. import flash.text.TextField;
  4. import flash.text.TextFieldAutoSize;
  5. import flash.events.Event;
  6. import flash.events.NetStatusEvent;
  7. import flash.net.NetStream;
  8. import flash.net.NetConnection;
  9. import flash.media.Video;
  10.  
  11. public class VideoExample extends MovieClip{
  12.  
  13. private var _duration:uint;//продолжительность, если вдруг понадобится
  14. private var _videoStream:NetStream;//поток видео
  15. private var _TextPreloader:TextField;// типа текстовый прелоадер
  16.  
  17. public function VideoExample(){
  18.  
  19. _TextPreloader = new TextField();
  20. _TextPreloader.background = true;
  21. _TextPreloader.autoSize"left";
  22.  
  23. //Создаем видео поток и загружаем видео фаил все просто
  24. var videoConnection:NetConnection = new NetConnection();
  25. videoConnection.connect(null);
  26.  
  27. this._videoStream = new NetStream(videoConnection);
  28. var video:Video = new Video();
  29.  
  30. video.height = 200;
  31. video.width = 220;
  32. addChild(video);
  33. addChild(_TextPreloader);
  34.  
  35. var client:Object = new Object();
  36. this._videoStream.client = client;
  37. video.attachNetStream(this._videoStream);
  38.  
  39. client.onMetaData = onMetaData;
  40.  
  41. this._videoStream.play('get_video.flv');
  42. //Ставим видео на паузу, чтобы запустить после поной его загрузке
  43. this._videoStream.pause();
  44. //прослушка для предлоадера, обычный ENTER_FRAME
  45. this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
  46. }
  47.  
  48. private function onMetaData(data:Object):void{
  49. this._duration = data.duration;
  50. }
  51.  
  52. private function onEnterFrame(event:Event):void{
  53. if(this._videoStream.bytesLoaded < this._videoStream.bytesTotal){
  54. //Собственно проценты для прелоадера
  55. _TextPreloader.text = Math.round(this._videoStream.bytesLoaded / this._videoStream.bytesTotal * 100)+"%";
  56. }
  57. else if(this._videoStream.bytesLoaded == this._videoStream.bytesTotal){
  58. //Если полность загружено видео
  59. _TextPreloader.text = "Видео полность закачано";
  60. //прослушка состояния видеоклипа
  61. this._videoStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
  62. this._videoStream.resume();//Запускаем видео проигрываться
  63. this.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
  64. }
  65. }
  66.  
  67. private function netStatusHandler(event:NetStatusEvent):void{
  68. if(event.info.code == "NetStream.Play.Stop"){
  69. //Если NetStatusEvent.NET_STATUS выдает NetStream.Play.Stop
  70. //То видеоклип проигрался до конца
  71. //Начинаем его проигрывать с начала
  72. event.target.seek(0);
  73. //Конечно же можно было написать this._videoStream.seek(0);
  74. //Но я хотел показать что event.target == this._videoStream
  75. _TextPreloader.text = "Видео перемотано";
  76. }
  77. }
  78.  
  79. }
  80. }

Вот что получилось:

Досмотрев ролик до конца вы увидете надпись - “Видео перемотано”.

flash.events.NetStatusEvent - хороший помошник для отслеживания состояния видеоклипа, у него всего одна предопределенная константа NET_STATUS, но очень много значениев статуса. Весь список есть здесь flash.events.NetStatusEvent

You can leave a response, or trackback from your own site.
(Еще не оценили)
Загрузка ... Загрузка ...

2 Responses to “Работа с Видео. Класс NetStream и NetStatusEvent”

  1. Alexander пишет:

    Óтлично,но вот как сделать что бы на плеере показывал адрес сайте?
    всмысле подписать как бы плеер.Как это сделать?
    Если не сложно подскажи инфу где можно найти.Блог прикольный,интересный!

  2. Merlin пишет:

    Спасибо за похвалу:)
    Ответ на ваш вопрос я написал в новом посте выше
    http://www.merlinds.com/aricles/actionscript-articles/159.html

Leave a Reply

Powered by WordPress | Visit BestInCellPhones.com for Free Verizon Cell Phones | Thanks to iCellPhoneDeals.com, MMORPG Games and Conveyancing