2014-01-27 32 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,是的,如果你有,我也需要演示。 –

相关问题