2014-01-27 33 views
4

我有一個高清視頻,我將流式傳輸到iOS應用程序。考慮到以最大比特率進行流式傳輸時視頻爲幾GB,我希望允許用戶限制最大流質量(低,中,高)。沿着同樣的路線,我想自動選擇基於蜂窩與WiFi連接的設置,因爲明顯的數據上限原因。在iOS設備上以編程方式限制HLS流的比特率

我沒有問題通過訪問AVPlayerItemAccessLogEvent來獲取當前比特率,但是在強制使用低質量的流時丟失了。

這甚至可能與HLS?謝謝!

回答

4

它不完全是動態的,但我通過創建四個不同的m3u8播放列表來解決這個問題。我將每個播放列表都標記爲流質量(低,中,高,極端)。用戶將根據所需的最高質量選擇一個。極致的播放列表包含所有品質的網址。高播放列表的網址比極端少,網址少於網址,網址少於媒體。每當用戶選擇不同的質量時,我只需將基礎流播放列表切換到各自的質量播放列表URL。

下面是四個不同播放列表的簡單示例。

HLS_Movie_Extreme.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=64000 
stream-0-64000/prog_index.m3u8 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=350000 
stream-1-350000/prog_index.m3u8 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000 
stream-2-800000/prog_index.m3u8 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1200000 
stream-3-1200000/index prog_index.m3u8 m3u8 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1800000 
stream-4-1800000/prog_index.m3u8 

HLS_Movie_High.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=64000 
stream-0-64000/prog_index.m3u8 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=350000 
stream-1-350000/prog_index.m3u8 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000 
stream-2-800000/prog_index.m3u8 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1200000 
stream-3-1200000/index prog_index.m3u8 m3u8 

HLS_Movie_Medium.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=64000 
stream-0-64000/prog_index.m3u8 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=350000 
stream-1-350000/prog_index.m3u8 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000 
stream-2-800000/prog_index.m3u8 

HLS_Movie_Low.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=64000 
stream-0-64000/prog_index.m3u8 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=350000 
stream-1-350000/prog_index.m3u8 

就像我說的,這不是動態的,但你可以使用各種技術,如果需要得到用戶的網絡連接,並指向所需質量的播放列表。對我來說,獲得用戶的偏好就足夠了,並相應地調整流。

+0

如何從m3u8文件中選擇特定的流,你能分享一個代碼片段嗎?謝謝! – Romk1n

+1

@ Romk1n我還沒有在這段代碼上工作過一段時間,所以我沒有一個方便的代碼片段。它基本上與停止當前流一樣,並且與第一次同時開始一個新流。您切換到的播放列表將使用相同的HLS文件,您只需製作更高質量的文件即可。因此,在切換流,切換流並從那時開始播放之前,請花時間播放播放器。希望有所幫助! – timgcarlson

+0

@timgcarlson,建議aproach完全重置播放器,並從應用程序,我們必須記住目前的播放時間,以期望比特率復位後尋求相同的位置。玩家可能會在加載之前顯示空白。有沒有其他更好的方法 – Santhosh

3

如果使用AVPlayer,正確的方法應該是

preferredPeakBitRate 

從蘋果文檔here,期望的限制,在比特每秒,網絡帶寬消耗爲這個項目。

+0

你能指導我如何使用preferredPeakBitRate。你能否提供演示代碼? – Kuldeep

+0

@ iOS的Wizard,是的,如果你有,我也需要演示。 –

相關問題