2015-10-14 37 views
1

場景我正在研究使用RTPlayer從我們的服務器播放預先錄製的視頻和音頻的應用程序。Objective-C:將浮點數轉換爲int64_t,不會造成精確損失

可疑 RTPlayer有2個有用的屬性; .initialPlaybackTime.currentPosition,用於計算以秒爲單位的媒體時間位置。 .initialPlaybackTime設置媒體播放器應從哪裏開始播放,而.currentPosition則告訴您在什麼地方繼續播放媒體中的相同位置。

問題.initialPlaybackTime屬性是int64_t型的,並且是.currentPositionfloat類型。當我將「.currentPosition」值「插入」.initialPlaybackTime時,總是會有8-10秒加到到玩家的位置。

問題我怎麼能轉換.currentPositionfloat值到int64_t,並保持相同的值?

+0

你確定'currentPosition'沒有錯嗎?最好給出一個float值的例子,然後在你的問題中輸出int64_t值。如果這些值是秒,浮點數和int64_t應該是最好的6位數字,而不會損失任何精度。我懷疑「currentPosition」比你認爲出於某種原因的地方晚了8-10秒。 –

回答

1

「8-10秒被添加到玩家的位置」可能與底層的HTTP Live Streaming (HLS) technology有關。

如果你正在播放的媒體是流媒體,很可能它符合這項技術,如果是這樣,將被分成幾個較小的媒體塊(我的經驗是,這通常是約15秒的視頻)在各種比特率。

在這種情況下,除非initialPlaybackTime設置爲與其中一個媒體片段的開始時間一致的值,否則播放器可能只使用最近的媒體片段並跳到該片段的開頭(通常的做法),或者如果它接近當前分段的末尾,則減少下一個分段,以減少在沒有播放的情況下加載完整分段的媒體數據。

+0

播放列表索引比浮點精度更可能。 – danh

+0

感謝您的回答Thuggish!實際上,我們也會使用直播流媒體,不過,這個特定的m3u8網址只是一個預先錄製的視頻。不是直播。你仍然認爲這是問題? –

+0

@BrandonA你需要看看'RTPlayer'類的實現,或者向創建者詢問它是否知道,因爲我懷疑它是有記錄的細微差別。但是根據我與其他玩家的經驗,當嘗試在媒體文件/ steam /等中設置確切的開始時間時,這些是常見的陷阱。取決於預先錄製的視頻如何編碼,時間可能與視頻數據中的關鍵幀一致。從StackOverflow角度來看,只有很多未知數。 –

相關問題