【发布时间】:2012-12-28 03:18:31
【问题描述】:
我正在缓冲一个 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 文件,这取决于用户如何在没有任何延迟的情况下获得最佳体验(所有这些都在内部管理)
- 我也按照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
如您所见,某些实例的缓冲区进度正在减少。
【问题讨论】:
-
您为什么希望 playableDuration 保持固定?播放器正在预读并同时播放。
-
您能否添加一些 NSLog 来显示一段时间内的 bufferedTime,并将其包含在您的问题中?
-
@danh 对不起,我不清楚 .. 通过波动我真正的意思是持续时间正在减少 ..
标签: ios objective-c video-streaming mpmovieplayercontroller http-live-streaming