2011-10-14 28 views
-1

我有一點想用一個內部flash播放器完全緩衝來自Wowza媒體服務器預先錄製的RTMP流的麻煩。完全預緩衝視頻的要求來自管理層。必須可以離線查看整個視頻。的Flex/Flash的全緩衝RTMP流從Wowza

當NetConnection對象獲取創建NetStream對象的連接,爲其設置一個元數據的事件處理程序,設置NetStream.maxBufferTime到視頻的全部時間。另外,在創建NetStream時,我將一個Event.ENTER_FRAME監聽器添加到視頻組件,以便它檢查視頻何時被加載(它有一個寬度),因此它會在第一幀暫停。

然後我開始播放網絡視頻。當接收到元數據事件時,設置緩衝區,當第一幀被下載並顯示在視頻對象上時,播放器在第一幀上暫停,但繼續將視頻加載到緩衝區中。現在,當我追蹤緩衝區(NetStream.bufferLength)時,我注意到以下現象對我來說是主要悲傷的根源:

如果將NetStream.maxBufferTime設置爲視頻長度的100%,則視頻爲完全緩衝,大約4秒後播放頭(NetStream.time)移動到視頻的末尾。但是,當我在Linux系統上恢復播放時,視頻顯示正常,但播放頭保持100%(這對定製提示點處理造成嚴重破壞)。在Windows系統上,播放頭也保持100%,但視頻播放速度爲正常速度的100倍。

當緩衝區達到100%時,事件NetStream.buffer.flush和NetStream.play.stop(?!?!)被觸發,但玩家對兩者都沒有反應,所以對我來說這似乎是一個閃存NetStream或Wowza中的錯誤。

但是,如果將NetStream.maxBufferTime設置爲(視頻的長度爲0.4),緩衝將在流結束之前停止,並且NetStream.Play.stop不會被觸發,並且播放頭會保持在第一個框架,但這感覺有點過於駭人的解決方案。

漸進式下載不覺得自己是解決的辦法,至少一些,如果不是所有的視頻必須至少從某種程度上覆制保護。

任何指針? Wowza是2.something,flex是4.1來支持flash 10.1,這些數據流用flex/flash記錄器記錄或上傳到服務器並轉換爲h.264(兩者都表現出這種行爲),而flash版本範圍從10.1到11.0。

編輯:看來,我們會在這個問題上的最終路徑將是需要被保護的將擔任RTMP流與最小的緩衝和公共視頻的任何視頻將服務器作爲漸進式下載。正如在評論中提到的,rtmp不應該做緩衝,所以我們所做的基本上是錯誤的。以供將來參考:不要緩衝rtmp流超過幾秒鐘。

回答

1

我不太清楚你的答案 - 但是,我的第一個問題肯定會,爲什麼你想以緩衝流視頻的整個長度?我不明白答案 - 只是想獲得更多信息!

+0

呀,不能夠發表評論,直到50代表吸**** S,提高了屏障索要額外的信息。 – JNissi

+0

無論如何,一個有效的問題。將整個視頻加載到緩衝區的要求來自管理。必須可以離線觀看。 – JNissi

+0

有趣。我認爲在這種情況下,我根本不打擾流媒體根。 – netrowillh