xcode AVPlayer仅在NSMutableArray中播放最后一个链接

x3naxklr  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(91)

我试图播放从.m3u文件导入的.mp4链接列表,文件保存在应用程序中的本地,它包含10电影标题和链接。
全码

应用传输安全设置新增于info.plist

vController.h**

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#import <AVKit/AVKit.h>

@interface ViewController : UIViewController {
    NSMutableArray *movieTitle;
    NSMutableArray *movieURL;
    NSMutableArray *tempArray;
    NSArray *lines;
}

@property (nonatomic, retain) NSMutableArray *movieTitle;
@property (nonatomic, retain) NSMutableArray *movieURL;
@property (nonatomic, retain) NSMutableArray *tempArray;
@property (nonatomic, retain) NSArray *lines;

vController.m

@synthesize movieURL,movieTitle,tempArray,lines;

- (void)viewDidLoad {
    [super viewDidLoad];
    
    movieURL = [[NSMutableArray alloc] init];
    movieTitle = [[NSMutableArray alloc] init];
    tempArray = [[NSMutableArray alloc] init];
    
    [self addM3UFile];
}

- (void)addM3UFile {
    NSString *addPath = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"m3u8"];
    
    NSString *fileContents1 = [NSString stringWithContentsOfFile:addPath encoding:NSUTF8StringEncoding error:NULL];
    lines = [fileContents1 componentsSeparatedByString:@"\n"];
    [tempArray addObjectsFromArray:lines];
        
    [self sortM3UFile];
    
}

- (void)sortM3UFile {
    int i;
    
    for (i=0; i<[tempArray count]; i++) {
        
        NSString *tempTitle = [tempArray objectAtIndex:i];
        
        if ([tempTitle containsString:@"://"]) {
            [movieURL addObject:tempTitle];
        }
        
        if ([tempTitle containsString:@"#EXTINF:-1 ,"]) {
            [movieTitle addObject:tempTitle];
        }
    }
}

播放视频的代码

NSString *url = [movieURL objectAtIndex:9];
NSLog(@"URL: %@", url);
AVPlayer *player = [AVPlayer playerWithURL:[NSURL URLWithString:url]];
AVPlayerViewController *controller = [[AVPlayerViewController alloc] init];
[self presentViewController:controller animated:YES completion:nil];
controller.player = player;
[player play];

只对列表中的最后一个对象有效**

我测试了所有的链接,当我在浏览器中输入它们时,它们都工作正常,我还在日志中打印了每个链接,它们都在那里。
我尝试从NSArray而不是NSMutableArray播放链接,但不起作用。
将链接保存在NSUserDefaults中也不起作用。
当我从.m3u8文件中更改列表顺序时,它只播放最后一个链接,所以现在我确信问题不在链接中。

**有一件事对我有用,那就是当我手动对代码中的链接进行硬编码时。

知道这是怎么回事吗:)

8gsdolmq

8gsdolmq1#

经过深入挖掘,我终于找到了问题所在。
由于某种原因,当添加网址到数组中时,它在每个链接后添加了一个空格,除了最后一个链接,我通过计算字符串长度然后单独记录每个字符来发现问题。
所以我在sortM3UFile中添加了这几行代码,它解决了这个问题

NSArray *words = [tempTitle componentsSeparatedByCharactersInSet :[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSString *nospaces = [words componentsJoinedByString:@""];
[movieURL addObject:nospaces];

希望能帮到一些人

相关问题