【问题标题】:How to play locally saved vod.m3u8 file which contains index0.ts, index1.ts, etc files in it in iOS?如何在 iOS 中播放本地保存的包含 index0.ts、index1.ts 等文件的 vod.m3u8 文件?
【发布时间】: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 文件。

请帮忙。

【问题讨论】:

标签: ios avplayer


【解决方案1】:

问题可能在于您的 M3U8 文件中的值。

您的目标时长应描述 .TS 片段的最大播放长度。您的 EXTINF 表示分段最长为 10 秒,因此您应该设置 #EXT-X-TARGETDURATION:11 而不是 1 。

您的 EXT-X-VERSION 可能需要一个真正的价值。见https://developer.apple.com/library/archive/qa/qa1752/_index.html。设置最小值为 2。

HLS 包通常以指向 VOD.m3u8 等变体播放列表的主清单开始,因此您可以尝试创建指向 VOD.m3u8 的 master.m3u8,而不是尝试直接播放变体播放列表。

通常,您可能希望从一个有效的 HLS 示例开始,然后对其进行编辑以匹配您的细分属性,而不是尝试从头开始构建并猜测哪些值很重要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    相关资源
    最近更新 更多