【发布时间】:2016-07-15 13:00:33
【问题描述】:
我想播放存储在应用主目录中的 vod.m3u8 文件。 vod.m3u8 文件中包含 index0、index1 等。 .ts 文件实际存在于目录中。
#EXTM3U
#EXT-X-VERSION:0
#EXT-X-TARGETDURATION:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:11,
index0.ts
#EXTINF:10,
index1.ts
#EXTINF:5,
index2.ts
#EXTINF:5,
index4.ts
#EXTINF:10,
index5.ts
#EXTINF:10,
index6.ts
#EXTINF:5,
index7.ts
#EXT-X-ENDLIST
以下是我播放视频的代码
-(void)playLocalVideo
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"vod"
ofType:@"m3u8"];
NSURL *url = [[NSURL alloc] initFileURLWithPath: path];
AVAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil];
anItem = [AVPlayerItem playerItemWithAsset:asset];
player = [AVPlayer playerWithPlayerItem:anItem];
AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:player];
layer.frame = self.view.layer.bounds;
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 300, 320, 250)];
[view.layer addSublayer:layer];
[self.view addSubview:view];
[player addObserver:self forKeyPath:@"status" options:0 context:nil];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
{
if (object == player && [keyPath isEqualToString:@"status"]) {
if (player.status == AVPlayerStatusFailed) {
NSLog(@"AVPlayer Failed");
} else if (player.status == AVPlayerStatusReadyToPlay) {
NSLog(@"AVPlayer Ready to Play");
[player play];
} else if (player.status == AVPlayerItemStatusUnknown) {
NSLog(@"AVPlayer Unknown");
}
}
}
AVPlayer 状态为 AVPlayer Ready To Play,但它从不播放视频。如果我播放任何 mp4 视频,那么它正在播放,但不是 vod.m3u8 文件。
请帮忙。
【问题讨论】:
-
这里提到 (forums.developer.apple.com/thread/69357) 您无法在本地获取 m3u8 文件的内容。你有没有运气。我也遇到过同样的问题。