2011-10-20 99 views
2

我有一個自定義的FMS應用程序和Flash Player廣播,它使用帶寬檢測到設定的質量,如:直播視頻質量vs下降?

camera.setQuality(detected_bandwidth, 0); 

這個作品非常好,以避免與緩慢的上傳速度廣播丟幀,但現在我想贊成丟棄視頻質量的幀。問題是,無論任何其他setQuality命令,如:

camera.setQuality(detected_bandwidth, 90); 

camera.setQuality(0, 90); 

我得到更好的畫面質量與丟幀的期望,但掉幀的方式很不一致,產生非常生澀的視頻。例如,它看起來大概有3或4幀播放,然後暫停,然後3或4多一個暫停,等等。

我也嘗試了許多緩衝設置,沒有運氣。有沒有辦法平滑掉幀,所以它更像是1幀,暫停,1幀,暫停等?

+0

您可能還希望根據帶寬以及相機上檢測到的運動量調整關鍵幀間隔。 http://livedocs.adobe.com/flashmediaserver/3.0/hpdocs/help.html?content=00000135.html –

回答

1

沒有銀子彈,但我有一些黑客可以嘗試。

您可以考慮根據帶寬檢測結果修改相機捕獲幀速率。 (我假設你允許一些空間發送任何音頻?)。

我從來沒有試過這個,但是如果攝像頭也需要以全FPS本地顯示,你可以嘗試動態地將攝像頭連接到netstream或者從netstream上分離出來,以模擬你選擇的低幀率 - 雖然這個可能會導致每個幀都是一個關鍵幀,這會浪費帶寬。

如果您還沒有將相機關鍵幀間隔增加到最大值48,每個關鍵幀肯定會在低帶寬情況下導致暫停。或者 - 您可以使用1的關鍵幀間隔,這意味着每個幀都是關鍵幀。您將浪費帶寬,但由於每個幀需要一段時間才能發送,因此運行時不應將一大堆隊列排隊在出站緩衝區中,並且最終可能會產生更穩定的流。

1

嘗試修改cam.setMode()以獲得小分辨率。 setQuality修改質量並可以減少帶寬,但是如果您的相機模式具有高分辨率,那麼它每幀都會發送大量像素數據。

另外,嘗試不同的攝像頭,因爲不同的攝像頭有時會產生不同的結果。