我有一个高清视频,我将流式传输到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