2013-07-31 70 views
4

我寫了一個使用遊戲工具/藍牙的程序,使用從一個iOS設備到另一個iOS設備的壓縮jpegs傳輸低質量視頻。我已經意識到gamekit/bluetooth不應該用於此目的(對於小塊數據),但它的確可以很好地傳輸15個低質量壓縮jpegs /秒,幾乎沒有延遲。iOS遊戲工具包/藍牙數據流

我的問題是,一旦我增加從iOS設備發送者到iOS接收器的質量或幀速率,就會發生滯後或延遲,並且不再是實時的。如果有延遲,我想以某種方式讓發送的iOS設備丟棄幀,以便接收者可以趕上或讓接收者忽略積壓隊列。

在GameKit中,我設置了會話模式以使用GKSendDataUnreliable來查看它是否可以幫助,但無濟於事。

如果出現延遲,丟棄幀(jpegs)的最佳解決方案和正確方法是什麼,以便iOS接收器能夠趕上實時?發送方是否需要在一段時間內停止傳輸,或者是否有接收方客戶可以做的事情來放棄累積隊列。

我以前也使用過NSStream,並且在使用wifi時允許更大的帶寬,如果傳輸的數據太多,延遲方面仍會出現同樣的問題。

非常感謝您的幫助。

+0

它可能有助於查看您的幀隊列等的一些代碼。您可能是正確的,您將需要停止傳輸或丟棄隊列中的幀。 –

回答

1

你可不可以給每個jpg附加一個時間戳(自epoch以來的時間),因此接收客戶端將忽略所有不在給定時間範圍內的圖像。

此外,您可以讓接收客戶端迴應簡單的確認數據包,指出已收到jpg。如果發送客戶端在給定的時間內未收到確認數據包,則會丟棄它要發送的所有圖像並從頭開始。

使用此解決方案,如果接收方客戶端落在發送方X秒後,它將停止發送確認數據包並丟棄所有傳入數據,直到發送方拋出隊列中的所有內容並開始再次發送「活動」幀爲止。