我正在缓存一个m3u8格式的视频,我将此网址设置为MPMovieplayerController的内容
我正在运行一个每0.3秒运行一次的后台线程,用于检查缓冲和播放持续时间并相应地执行检查
if(!mPlaybackProgressTimer)
mPlaybackProgressTimer = [[NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(didPlayback:) userInfo:nil repeats:YES] retain];
和didplayback
...
- (void)didPlayback:(id)sender {
NSTimeInterval totalDuration = [mVideoPlayerController duration];
NSTimeInterval playbackTime = [mVideoPlayerController currentPlaybackTime];
float playbackProgress = 0.0;
if(playbackTime > 0.0 && totalDuration > 0.0)
playbackProgress = playbackTime / totalDuration;
mPercentWatched = round(100 * playbackProgress);
NSTimeInterval bufferedTime = [mVideoPlayerController playableDuration];
float bufferProgress = 0.0;
if(playbackTime > 0.0 && totalDuration > 0.0)
bufferProgress = bufferedTime / totalDuration;
[self setProgress:bufferProgress forProgressType:eProgressTypeBuffer];
[self setProgress:playbackProgress forProgressType:eProgressTypePlay];
}
问题是 bufferedTime 在某些情况下会发生波动: -
- 我将m3u8文件分成不同分辨率和比特率的单独文件
- 我有一个index.m3u8文件,它指明哪个m3u8文件用于什么带宽
- 当然它不提供整个m3u8文件,而是基于用户如何获得最佳体验而没有任何延迟的个人* .ts文件(所有这些都在内部管理)
- 此外,我已根据apple developer guidelines
我不确定为什么波动正在发生,但对我来说似乎有意义的是......某些数据被缓冲但我认为数据可能被丢弃(只是理论)
注意:我正在使用encoding.com来细分媒体
更新:记录
2013-01-14 11:46:57.731 IronStudios [7724:c07]缓冲进展:0.139779
2013-01-14 11:46:57.930 IronStudios [7724:c07]缓冲进展:0.139779
2013-01-14 11:46:58.130 IronStudios [7724:c07]缓冲进展:0.139790
2013-01-14 11:46:58.331 IronStudios [7724:c07]缓冲进展:0.139790
2013-01-14 11:46:58.530 IronStudios [7724:c07]缓冲进展:0.125042
2013-01-14 11:46:58.730 IronStudios [7724:c07]缓冲进展:0.126391
2013-01-14 11:46:58.930 IronStudios [7724:c07]缓冲进展:0.124450
2013-01-14 11:46:59.130 IronStudios [7724:c07]缓冲进展:0.125799
正如您所看到的,某些情况下缓冲进度正在减少
对此问题的任何帮助将不胜感激
谢谢,
答案 0 :(得分:0)
持续时间可以从下载量中获得,而playableDuration则来自可以播放的内容。
只有在下载整个块后,iOS才会开始播放mpeg2-ts块。
假设您正在使用10秒的块。
Downloaded: 2.2 chunks (22 seconds)
Playable: 2 chunks (20 seconds)
Progress bar = 2 / 2.2 = ~91%
几秒钟后......
Downloaded: 2.9 chunks (29 seconds)
Playable: 2 chunks (20 seconds)
Progress bar = 2 / 2.9 = ~69%
你的进度条倒退了......
几秒钟后......
Downloaded: 3.1 chunks (31 seconds)
Playable: 3 chunks (30 seconds)
Progress bar = 3 / 3.1 = ~97%
再转发......