2015-09-04 77 views
3

我想獲取AVPlayer正在播放視頻流的比特率。我嘗試使用AVPlayerItemAccessLogEventobserved bit rate屬性,但它提供了非常高的價值。在探索Observed-bit-rate屬性後,我瞭解到此屬性顯示值爲download rate of a segment。我需要知道播放器正在播放流的比特率。如何找到AVPlayer當前比特率

下圖顯示了LIVE流的Observed bit vs指示比特率。 enter image description here

請在此問題上提出您的建議。

我嘗試下面的鏈接,但沒有運氣:

https://stackoverflow.com/a/14845997/1730345

MPMoviePlayerController MovieAccessLogEvent - Inflated observedBitrate

回答

4

你是對的observedBitrate。這顯示了下載速度。

indicatedBitrate應該告訴你播放當前流所需的廣播比特率。我相信價值來自HLS大師清單。播放沒有多比特率變體的流時,只有一個可用比特率變體,indicatedBitrate的值將爲-1

如果您總是處理具有主清單的流,那麼indicatedBitrate是最佳選擇。

如果你處理的是沒有一個主清單,然後一個估計比特率流的方式就是抓住最後AVPlayerItemAccessLogEvent項,並使用計算的話:

numberOfBitsTransferred = (numberOfBytesTransferred * 8) 
numberOfBitsTransferred/segmentsDownloadedDuration 

經驗上來講,每隔播放器切換比特率時,它會發佈一個新的訪問日誌條目。最新的訪問日誌條目將包含關於最近選擇的流的數據。

+0

感謝您的回覆,關於requestedBitrate - 根據我的理解,這是播放流所需的比特率,它由服務器指示。我想查找avplayer播放流的比特率。您能否幫我理解指示的比特率,並且我想知道這是否表示播放器的當前比特率。僅供參考 - 我的所有溪流都有主人清單。 – karthik

+2

正如Anurag所說,指示的比特率僅僅是當前正在播放的m3u8變體播放列表中的「BANDWIDTH」參數。根據你的HLS服務器,這可能有任何價值。如果沒有主播放列表,則此值設置爲-1,表示播放列表'不表示比特率'。對於運行良好的HLS服務器,使用變體播放列表,該值應該相當準確,但要獲取當前網絡比特率,請使用Anurag的公式:比特率(以位/秒爲單位)=(logEvent.numberOfBytesTransferred * 8)/ logEvent.segmentsDownloadedDuration –

+0

@karthik - 我希望西蒙的意見進一步闡明瞭指示劑量屬性的用途。如果您還有其他問題,請告訴我。 – Anurag