2009年2月2日 星期一

Red5 - onBWDone Error

用 Flex 寫了個將視訊和語音傳到 Red5 的小程式,結果卻發生了 ReferenceError: Error #1069: Property onBWDone not found on StreamTest and there is no default value 的錯誤訊息,Google 了一下,還好有人提供了解決方法,省了我這個 Flex 新手許多時間。

參考資料 : http://www.toybot.nl/blog/?p=28
( 雖然文中方法是用在正統的 Flash Media Server 上,但是理念是相同的。)

簡單來說,這個錯誤發生的原因是因為串流傳送到伺服器時,會對用戶端的頻寬進行測試,並給予適當的傳輸限制。因為我是將串流傳送到 webapps/oflaDemo 下,看了一下原始碼,果然...


public boolean appConnect(IConnection conn, Object[] params) {
// Trigger calling of "onBWDone", required for some FLV players
measureBandwidth(conn);
if (conn instanceof IStreamCapableConnection) {
IStreamCapableConnection streamConn = (IStreamCapableConnection) conn;
SimpleConnectionBWConfig bwConfig = new SimpleConnectionBWConfig();
bwConfig.getChannelBandwidth()[IBandwidthConfigure.OVERALL_CHANNEL] =
1024 * 1024;
bwConfig.getChannelInitialBurst()[IBandwidthConfigure.OVERALL_CHANNEL] =
128 * 1024;
streamConn.setBandwidthConfigure(bwConfig);
}
}

解決方法也很簡單,只要對你的 NetConnection 物件的 client 屬性指到 this,

var nc:NetConnection = new NetConnection();
nc.client = this;


和實作下面這個方法就行了


public function onBWDone():void
{
//codes...
}

沒有留言: