我正在缓冲 m3u8 格式的视频,并将此 url 设置为 MPMovieplayerController 的 contenturl
我正在运行一个每 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 文件,具体取决于用户如何立即获得最佳体验(所有这些都在内部进行管理) - 我也按照苹果开发者指南遵循了所有这些
我不确定为什么会发生波动,但对我来说似乎有意义的是......一定数量的数据被缓冲但我认为数据可能被丢弃(只是一个理论)
注意:我使用 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]244 缓冲进度:0.1250
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
如您所见,某些实例的缓冲区进度正在减少。