我正在使用AVPlayer来传输hls流。 我遇到的问题是因为我无法找到时间。
搜索逻辑与Apple's example hls stream一起正常工作。它也适用于我的非hls流,但我们想在这个项目中使用hls。
所以我的信念就是我们的流更容易出问题以及AVPlayer如何处理它。
playlist.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=61378,CODECS="mp4a.40.34"
chunklist_w1105403169.m3u8
chunklist_w1105403169.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:5015
#EXTINF:10.028,
media_w1105403169_5015.mp3
#EXTINF:10.036,
media_w1105403169_5016.mp3
#EXTINF:10.027,
media_w1105403169_5017.mp3
我已经使用mediastreamvalidator检查了流,我得到了:
Warning: (0:-16230) #EXT-X-ALLOW-CACHE should only be in master playlist
但我的理解Apple忽略了这面旗帜。
我无法控制流,但可以请求更改。
我的实施的缩减版本:
播放器的设置
AVPlayer *player = [[AVPlayer alloc] initWithURL:url];
寻求x秒
- (void)trySeekBackBy:(NSTimeInterval )seconds
CMTime minus = CMTimeMakeWithSeconds(seconds, 1);
CMTime time = CMTimeSubtract(self.currentTime, minus);
//check that time is within the seek able range.
if ([self canSeekToTime:time]) {
//I normally just seekToTime:
[self seekToTime:time toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];
}
/ /else work down till we can find a range we can seek to
}