You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 09:57:31