我有一個高清視頻,我將流式傳輸到iOS應用程序。考慮到以最大比特率進行流式傳輸時視頻爲幾GB,我希望允許用戶限制最大流質量(低,中,高)。沿着同樣的路線,我想自動選擇基於蜂窩與WiFi連接的設置,因爲明顯的數據上限原因。在iOS設備上以編程方式限制HLS流的比特率
我沒有問題通過訪問AVPlayerItemAccessLogEvent
來獲取當前比特率,但是在強制使用低質量的流時丟失了。
這甚至可能與HLS?謝謝!
我有一個高清視頻,我將流式傳輸到iOS應用程序。考慮到以最大比特率進行流式傳輸時視頻爲幾GB,我希望允許用戶限制最大流質量(低,中,高)。沿着同樣的路線,我想自動選擇基於蜂窩與WiFi連接的設置,因爲明顯的數據上限原因。在iOS設備上以編程方式限制HLS流的比特率
我沒有問題通過訪問AVPlayerItemAccessLogEvent
來獲取當前比特率,但是在強制使用低質量的流時丟失了。
這甚至可能與HLS?謝謝!
它不完全是動態的,但我通過創建四個不同的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
就像我說的,這不是動態的,但你可以使用各種技術,如果需要得到用戶的網絡連接,並指向所需質量的播放列表。對我來說,獲得用戶的偏好就足夠了,並相應地調整流。
如何從m3u8文件中選擇特定的流,你能分享一個代碼片段嗎?謝謝! – Romk1n
@ Romk1n我還沒有在這段代碼上工作過一段時間,所以我沒有一個方便的代碼片段。它基本上與停止當前流一樣,並且與第一次同時開始一個新流。您切換到的播放列表將使用相同的HLS文件,您只需製作更高質量的文件即可。因此,在切換流,切換流並從那時開始播放之前,請花時間播放播放器。希望有所幫助! – timgcarlson
@timgcarlson,建議aproach完全重置播放器,並從應用程序,我們必須記住目前的播放時間,以期望比特率復位後尋求相同的位置。玩家可能會在加載之前顯示空白。有沒有其他更好的方法 – Santhosh