2009-11-05 68 views
3

我想在我的網站上播放一個flv視頻文件。考慮到客戶端機器的互聯網連接速度,視頻將開始播放,以便視頻不會暫停顯示用於緩衝的加載圖像。如何播放視頻(.flv)而不顯示播放時用於緩衝的加載圖像?

緩衝/流將首先完成然後播放或視頻將在短暫延遲後開始播放,同時將完成緩衝。 40%和其他緩衝將同時進行,以便視頻不會暫停並顯示加載圖像。

如何做到這一點?有可能實現嗎?

請幫助實現這一點。

回答

0

最簡單的方法是使用Pre load asset manager。 有一個例子:

import gs.dataTransfer.PreloadAssetManager; 
var preloader_obj = new PreloadAssetManager(["myFile1.swf","myFile2.swf"]); 
this.onEnterFrame = function() { 
    myPreloader_mc.bar_mc._xscale = preloader_obj.percentLoaded_num; 
    if (preloader_obj.percentLoaded_num == 100) { 
     gotoAndPlay("start"); 
    } 
} 

隨着percentLoaded_num您可以設置需要打前裝載量。 而不是swf使用你想要預先加載的flv。我沒有使用它的flv的,但它應該工作。檢查文檔以獲取更多信息。

另外它不是一個好主意,當不預先加載整個flv時不允許緩衝。互聯網速度是可變的。

0

您可以創建自定義緩衝動畫。如果你不想展示任何東西,我想你可以創建一個沒有任何內容或沒有框架的動畫。見here for a video tutorial

1

您應該閱讀Eight Fallacies of Distributed Computing [wikipedia]。 「從長遠來看,所有這些都被證明是虛假的,都會造成很大的麻煩和痛苦的學習經歷。」

簡言之:

  • 恆/定速不是。
  • 可靠的網絡不是。

這是很多計算機的基礎,實際上,它們是對較低級別概念的抽象。這是一件好事(tm),因爲它使我們能夠完成更多的工作;當抽象泄漏時它就成了一個問題。

我要去哪裏?你不會知道你永遠不需要顯示緩衝窗口,只是因爲電影的初始部分在X時間內加載。當然,大多數情況下,你可以測量並獲得可觀的結果,但每過一段時間,孩子就會從比喻上或字面上的插座中拔出以太網電纜。當發生這種情況時,您不希望崩潰或以其他方式丟失用戶的數據。

解決方案很簡單:設計您的設置,以便大多數用戶看不到緩衝窗口,但不要在需要時嘗試阻止它。

+0

尼斯切線,但它確實沒有回答他的問題。 – 2009-11-17 20:15:51

+1

這聽起來像是你正在考慮來自Sun的一些人的「分佈式計算的八大謬誤」......雖然你可能讀過這篇文章,解釋他們來自http://www.rgoarchitects.com/Files/fallacies.pdf(維基百科http://en.wikipedia.org/wiki/Fallacies_of_Distributed_Computing總結) – Stobor 2009-11-18 23:37:37

+0

謝謝! [15chars] – 2009-11-19 04:51:31

0

試試這個。獲取視頻持續時間,並設置你的緩衝時間:

var netConn:NetConnection = new NetConnection(); 

// Create a local streaming connection 
netConn.connect(null); 
// Create a NetStream object and define an onStatus() function 
var netStream:NetStream = new NetStream(netConn); 
netStream.onStatus = function(infoObject) { 
    status_txt.text += "Status (NetStream)" + newline; 
    status_txt.text += "Level: "+infoObject.level + newline; 
    status_txt.text += "Code: "+infoObject.code + newline; 
}; 
// Attach the NetStream video feed to the Video object 
my_video.attachVideo(netStream); 
my_video.onMetaData = function(videoMetaData:Object):Void { 
    var videoDuration = videoMetaData.duration; 
} 
// Set the buffer time 
netStream.setBufferTime(videoDuration); 
// Begin playing the FLV file 
netStream.play("http://www.mydomain.com/myvid.flv"); 
2

一件事,真的可以幫助你是對視頻在不同的比特率編碼。沒有人知道有些人只是沒有足夠的帶寬來持續保持良好的視頻播放。幸運的是,Flash允許您根據檢測到的客戶端帶寬進行動態流切換。要使用此功能,不是直接播放FLV,而是向播放器提供SMIL文件播放列表,其中列出了不同的流。的FLVPlayback內置了這個功能,下面是一個示例SMIL文件,從here被盜:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 2.0//EN" 
    "http://www.w3.org/2001/SMIL20/SMIL20.dtd"> 
<smil xmlns="http://www.w3.org/2001/SMIL20/Language"> 
    <body> 
     <switch> 
      <video src="video2.flv" system-bitrate="512000" /> 
      <video src="video1.flv" system-bitrate="256000" /> 
      <video src="video0.flv" /> 
     </switch> 
    </body> 
</smil>