技巧:自制Flash FLV視頻播放器_Flash教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:FLASH的場景,圖層(lawyer)和層(level)的理解
      對初學者來說,FLASH(這里一FLASH8為例)的場景、圖層(lawyer)和層(level)很輕易引起困惑的3個概念,今天看到大家在討論涉及這個主題,我覺得有必要做一個比較系統

      大家好,前不久筆者將CenFun Music Player加入flv視頻播放功能,這里單獨拿出來給大家做一個Flash FLV播放器(僅ActionScript控制,不使用 FLVPlayback 組件),如有不當之處還望指正。
      下面就打開您的Macromedia Flash Player 8(推薦)開始吧!

      首先新建文檔,設置背景色黑色,其他默認,然后建四個圖層。

      第一層用來放視頻元件,方法如下:

      1,在"庫"面板("窗口">"庫")中,從"庫"彈出菜單中選擇"新建視頻"。
      2,在"視頻屬性"對話框中,命名視頻元件并選擇"視頻"(由 ActionScript 控制)。
      3,將視頻對象從"庫"面板拖到舞臺正中間,以創建視頻對象實例。
      4,對此視頻元件取實例名為 "my_video"。

      第二層用來放視頻地址輸入欄,方法如下:

      1,在舞臺左下方用文本工具(快捷鍵T)畫一個地址輸入文本框,類型選擇"輸入文本"類型。
      2,在"線條類型"彈出菜單中選擇"單行",并確認"在文本四周顯示邊框"處于選中狀態。
      3,對此文本框取實例名為"url"。

      第三層用來放播放開始按鈕,方法如下:

      1,在"庫"面板("窗口">"庫")中,新建元件按鈕,按鈕樣式自行制作好,暫時能用就行。
      2,將新建的按鈕對象從"庫"面板拖到舞臺地址輸入框后面,以創建播放開始按鈕。
      3,對此播放開始按鈕取實例名為"play_bt"。

      第四層用來放所有的ActionScript:

      //首先初始化
      //創建一個 NetConnection 對象
      var my_nc:NetConnection = new NetConnection();
      //創建一個本地流連接
      my_nc.connect(null);
      //創建一個 NetStream 對象
      var my_ns:NetStream = new NetStream(my_nc);
      //寫一個播放函數playflv()
      function playflv(flv) {
      //參數flv是要播放的flv視頻地址
      //trace(flv);//測試用
      // 將 NetStream 視頻輸入信號附加到 Video 對象,即視頻元件my_video
      my_video.attachVideo(my_ns);
      // 設置緩沖時間,單位秒,下面設置3秒即可
      my_ns.setBufferTime(3);
      // 開始播放 FLV 文件
      my_ns.play(flv);
      }
      //點擊開始播放按鈕開始播放
      play_bt.onRelease = function() {
      playflv(url.text);
      //獲得url輸入框的視頻文件地址,并調用播放函數播放url對應的flv視頻文件
      }; //////////////////////////////////////////////////////////////////////////////
      //至此一個最簡單的播放器已經做完了,下面要做的都是對其進行更多的控制和表現工作。
      //這里就其幾個重要的方面進行制作,其他的還需要大家發揮自己的想象去進行更好的設計制作。
      //注重,以下代碼非必要,未經測試,望大家一個一個嘗試實現。非凡注重路徑和實例名的對應。

      //*********************************
      //1,播放的控制,暫停和停止的實現
      //新建兩個按鈕,一個暫停(pause_bt),一個停止(stop_bt),原理和播放按鈕一樣。

      pause_bt.onRelease = function() {
      my_ns.pause();
      };
      stop_bt.onRelease = function() {
      my_ns.seek(0);
      //搜尋從0開始播放
      my_ns.pause(true);
      //參數true表示暫停,若是false則表示從暫停變為繼續播放,若沒有參數則為在暫停/播放中切換。
      };//*********************************
      //2,視頻下載進度
      //這個比較簡單,和一般的下載進度類似,原理就是播放時將已下載的和總共文件大小進行百分比,然后顯示出來。
      //新建顯示百分比的靜態文本(info)和進度條(bar),其初始狀態、位置自行調整

      this.onEnterFrame =function () {
      var loadedbytes = my_ns.bytesLoaded;
      //獲得已經下載字節
      var totalbytes = my_ns.bytesTotal;
      //文件總大小
      if (totalbytes == undefined || totalbytes<4000) {
      info.text = "0%";
      bar._width = 1;
      } else {
      var nowLoadPercent = Math.round(loadedbytes/totalbytes*100);
      if (isNaN(nowLoadPercent)) {
      info.text = "0%";
      bar._width = 1;
      } else {
      info.text = nowLoadPercent "%";
      bar._width = nowLoadPercent*35/100;
      if (nowLoadPercent == 100) {
      delete this.onEnterFrame;
      }
      }
      }
      } //*********************************
      //3,視頻尺寸修正或調整
      //這個比較重要,因為視頻尺寸比例一般都不一樣,故播放時要進行調整,以免失真變形。
      //原理就是獲得flv的尺寸,然后重新調整my_video的尺寸,最后將位置居中,必要時還可進行縮放處理(這里省略)。

      //首先寫個改變尺寸函數changesize(w, h),w為要改變為的寬度,h為要改變為的高度
      function changesize(w, h) {
      //改變到傳進來的參數尺寸
      my_video._width = w;
      my_video._height = h;
      //trace("w:" w "h:" h);//測試用
      //位置居中處理,假如你的視頻舞臺寬550,高400
      my_video._x = 550/2-w/2;
      my_video._y = 400/2-h/2;
      }
      //然后獲得flv的固有尺寸,并調用以上函數改變它
      //此處理函數在調用 my_ns.play() 方法后而在視頻播放頭前進之前觸發
      my_ns.onMetaData = function(infoObject:Object) {
      //獲得FLV文件中嵌入的描述性信息,這里獲得寬/高
      var flv_width = infoObject.width;
      var flv_height = infoObject.height;
      //改變尺寸
      changesize(flv_width, flv_height);
      }; //*********************************
      //4,播放時間和進度
      //原理和下載進度類似,先獲得總持續時間,然后獲得當前時間對其進行百分比,也可做進度條。

      // 定義總持續時間全局變量,并獲得其值。
      var flv_duration;
      my_ns.onMetaData = function(infoObject:Object) {
      //獲得FLV文件中嵌入的描述性信息,這里獲得獲得總持續時間(單位:秒)
      var flv_duration = infoObject.duration;
      };
      //注重:這里可以和獲得寬高寫在一起。
      //獲取當前播放時間
      var flv_thistime = my_ns.time;
      //然后便可制作播放進度了,和下載進度類似,大家自己制作,此處略。 //*********************************
      //5,音量的控制

      //這個復雜一點,必須先將音頻從 FLV 文件附加到舞臺上的影片剪輯,然后對其進行控制
      //新建影片剪輯my_ns_mc,并附加音頻
      my_ns_mc.attachAudio(my_ns);
      //為影片剪輯創建新的 Sound 對象
      var my_ns_sound = new Sound(my_ns_mc);
      //初始化音量(此處默認80)
      var flv_volume = 80;
      my_ns_sound.setVolume(flv_volume);
      //最后對flv_volume的大小(0到100間)進行控制即可改變音量大小
      //這部分制作也省略,大家自由發揮,還可以制作靜音功能,即flv_volume為0 //*********************************
      //還有,像快進,快退,緩沖顯示等等,都可以實現,大家自行研究。

      ////////////////////////////////////////////
      最后,一個Flash FLV播放器的制作基本完成了,推薦想學flash的朋友親自動手去實現,不要老是想去下載什么源碼然后修改一通,那樣就體會不到其中的很多奧妙了!

      補充一個相關問題:flv播放沒有圖象,只有聲音,這是因為這個flv文件用flash 8的編碼格式壓縮,而你發布的flash播放器為flash 7或更低的版本,故升級為版本8即可,或者將flv文件采用flash 7的編碼格式壓縮。 作者:大圣 來源:菲特網

      分享:遮照及文字遮照的幾個概念和事例
      今天剛好有2個帖子發了關于遮照的問題。這個教程是針對今天的帖子和初學者講一些概念,做法和事例。請大家多多討論,或許會有所提高。遮照(MASK),也被被稱為

      來源:菲特網//所屬分類:Flash教程/更新時間:2008-03-05
      相關Flash教程