iOS应用AVPlayer播放视频无正常界面、加载后瞬间消失问题求助
iOS视频播放异常:播放器无响应、仅显示极小画面排查
异常现象
- 应用调用URL视频文件时,无正常播放器界面展示视频内容
- 点击打开视频后仅加载1秒左右播放器消失,屏幕仅显示极小尺寸的视频画面
- 调试界面截图:

- 实际运行效果截图:

异常代码片段
if([_mServiceID isEqualToString:@"movFilePlay"] == YES) { NSString* path = [StandardPlugin.FCM_URL stringByAppendingString:[dic strValueForKey:@"filePath"]]; //NSString *path = [[NSBundle mainBundle]bundlePath]; NSURL *filePath = [NSURL fileURLWithPath:path]; AVPlayer *player =[AVPlayer playerWithURL:filePath]; UIPageViewController *controller= [[UIPageViewController alloc]init]; //controller.player = player; [self.playerViewController addChildViewController:controller]; // controller.player = player; [player play]; }
问题根因
- 控制器选型错误:视频播放承载组件应为
AVPlayerViewController,代码中误用了分页滚动组件UIPageViewController,该组件无视频播放承载能力。 - URL初始化方法错误:拼接得到的路径如果是远程网络地址,不能使用
[NSURL fileURLWithPath:path]初始化,该方法仅适用于本地文件路径,远程地址需使用[NSURL URLWithString:path]初始化,否则会出现地址解析异常。 - 播放器与控制器未绑定、视图层级缺失:代码中控制器与播放器的绑定逻辑全部被注释,添加子控制器后未将控制器的view加入父视图层级,也未设置尺寸布局,导致播放器视图无正常展示尺寸,仅以系统默认极小尺寸渲染;同时控制器无强引用,加载后很快被系统回收,表现为播放器闪一下就消失。
修复参考代码
if([_mServiceID isEqualToString:@"movFilePlay"] == YES) { NSString* path = [StandardPlugin.FCM_URL stringByAppendingString:[dic strValueForKey:@"filePath"]]; NSURL *videoURL; // 根据地址类型选择正确的NSURL初始化方法 if ([path hasPrefix:@"http"]) { // 远程网络地址 videoURL = [NSURL URLWithString:path]; } else { // 本地文件路径 videoURL = [NSURL fileURLWithPath:path]; } AVPlayer *player = [AVPlayer playerWithURL:videoURL]; // 使用专门的视频播放控制器 AVPlayerViewController *playerVC = [[AVPlayerViewController alloc] init]; playerVC.player = player; // 正确完成子控制器嵌入和视图布局 [self.playerViewController addChildViewController:playerVC]; playerVC.view.frame = self.playerViewController.view.bounds; [self.playerViewController.view addSubview:playerVC.view]; [playerVC didMoveToParentViewController:self.playerViewController]; [player play]; }
补充注意事项
- 如果使用AutoLayout布局,需要给
playerVC.view添加相对于父视图的上下左右约束,适配屏幕旋转、尺寸变化场景 - 需保证
AVPlayerViewController实例被强持有,避免对象被释放后播放中断 - 如果加载的是HTTP协议的远程视频,需要在Info.plist中配置ATS权限,允许对应域名的HTTP加载,否则会出现请求失败
内容的提问来源于stack exchange,提问作者STARK
相关产品推荐
相关产品推荐

