首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

查找完成时,AVPlayer显示加载指示器

AVPlayer是一个iOS平台上用于播放音视频文件的类。当AVPlayer开始加载媒体资源时,可以通过显示加载指示器来告知用户正在进行加载操作。

加载指示器通常是一个旋转的圆圈或其他动画效果,用于表示正在加载媒体资源。它的作用是让用户知道正在进行加载操作,以避免用户以为播放器已经卡住或无响应。

AVPlayer本身并不提供内置的加载指示器,开发者需要自行实现加载指示器的显示和隐藏逻辑。下面是一个示例代码片段,演示了如何在AVPlayer加载媒体资源时显示加载指示器:

代码语言:txt
复制
import AVKit

class ViewController: UIViewController {
    var player: AVPlayer?
    var playerViewController: AVPlayerViewController?

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 创建AVPlayer对象
        let videoURL = URL(string: "https://example.com/video.mp4")
        player = AVPlayer(url: videoURL!)
        
        // 创建AVPlayerViewController对象并设置player属性
        playerViewController = AVPlayerViewController()
        playerViewController?.player = player
        
        // 在视图中显示AVPlayerViewController
        addChildViewController(playerViewController!)
        view.addSubview(playerViewController!.view)
        playerViewController!.didMove(toParentViewController: self)
        
        // 监听AVPlayer的status属性,当为.readyToPlay时表示已加载完成
        player?.addObserver(self, forKeyPath: "status", options: .new, context: nil)
        
        // 显示加载指示器
        showLoadingIndicator()
        
        // 开始加载媒体资源
        player?.play()
    }

    // 监听AVPlayer的status属性变化
    override func observeValue(forKeyPath keyPath: String?,
                               of object: Any?,
                               change: [NSKeyValueChangeKey : Any]?,
                               context: UnsafeMutableRawPointer?) {
        if keyPath == "status" {
            if player?.status == .readyToPlay {
                // 隐藏加载指示器
                hideLoadingIndicator()
            }
        }
    }
    
    // 显示加载指示器
    func showLoadingIndicator() {
        let activityIndicator = UIActivityIndicatorView(style: .gray)
        activityIndicator.center = view.center
        activityIndicator.startAnimating()
        view.addSubview(activityIndicator)
    }
    
    // 隐藏加载指示器
    func hideLoadingIndicator() {
        view.subviews.filter { $0 is UIActivityIndicatorView }.forEach { $0.removeFromSuperview() }
    }
    
    deinit {
        player?.removeObserver(self, forKeyPath: "status")
    }
}

这是一个使用AVPlayer和AVPlayerViewController来播放网络视频,并在加载完成时显示和隐藏加载指示器的示例代码。开发者可以根据自己的需求,自定义加载指示器的样式和动画效果。

腾讯云相关产品推荐:腾讯云点播(云点播是一款专业的多媒体点播服务,为用户提供全面、稳定、高效的音视频处理、存储、分发服务。具体介绍和产品链接地址请参考腾讯云官方网站)。

请注意,以上答案仅供参考,具体实现方式和推荐的产品可能因实际需求和环境而有所不同。建议开发者根据自身情况进行调整和选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 一个页面从输入URL到加载显示完成,发生了什么?

    面试经典题——URL加载 一、涉及基本知识点: 1....DNS查询得到IP 请求信息:首先查看域名的本地DNS缓存,该缓存存储计算机最近检索到的信息,如果计算机不知道答案,那么就需要执行一个DNS查询来查找答案; 询问递归式DNS服务器: 如果信息不存储在本地...找回记录: -递归服务器从权威服务器中检索dyn.com的记录,并将记录存储在本地缓存; 如果其他任何人请求dyn.com的主机记录,递归服务器已经有答案了,并不需要再次进行查找; 所有记录都有一个期限...一、 一个页面从输入URL到加载显示完成,这个过程发生了什么?...简洁版: 浏览器根据请求的URL交给DNS域名解析,找到真实的IP,向服务器发起请求; 服务器交给后台处理完成后返回数据,浏览器接收文件(HTML、CSS、JavaScript等); 浏览器对加载到的资源

    1.6K20

    iOS视频播放的基本方法

    ,尤其是播放在线视频的时候,我们不仅监控视频加载是否成功,也会监控是视频缓存进度等。...MPMoviePlayerThumbnailImageRequestDidFinishNotification object:nil]; #pragma mark - 监听通知的响应方法 //播放状态变化,注意播放完成的状态是暂停...但是AVPlayer本身是不能直接显示视频的,必须创建一个播放层AVPlayerLayer并将其添加到其他的视图Layer上才能显示。 1....= NO; //显示错误提示按钮,点击后重新加载视频 [self.playerInfoButton setTitle:@"资源加载失败,点击继续尝试加载" forState...至于获取视频的总时间在上述代码中已有体现,是在检测播放状态变为AVPlayerStatusReadyToPlay的时候获取的 //视频总时长,在AVPlayerItem状态为AVPlayerStatusReadyToPlay获取

    4.4K20

    HarmonyOS APP性能优化之提升应用响应速度

    避免主线程被非UI任务阻塞减少组件刷新的数量避免主线程被非UI任务阻塞在应用响应用户输入期间,应用主线程应尽可能只执行UI任务(待显示数据的准备、可见视图组件的更新等),非UI的耗时任务(长时间加载的内容等...使用组件异步加载特性当前系统提供的Image组件默认生效异步加载特性,当应用在页面上展示一批本地图片的时候,会先显示空白占位块,当图片在其他线程加载完毕后,再替换占位块。...这样图片加载就可以不阻塞页面的显示,给用户带来良好的交互体验。因此,只在加载图片耗时比较短的情况下建议下述代码。...使用AVPlayer实例缓存提升视频加载速度AVPlayer实例的创建与销毁都很消耗性能,针对这个问题可以使用实例缓存进行优化,首次加载页面创建两个实例,在打开新页面切换空闲实例,通过reset方法重置实例到初始化状态...,使用NodeContainer进行占位,当跳转到本页直接将提前创建完成的首页填充// PreloadedPage.etsimport { ControllerManager } from '..

    13220

    iOS微信小视频优化心得

    单独使用AVPlayer是无法显示视频的,要把它添加到AVPlayerLayer里才行。...另外它需要配合AVPlayerItem使用,AVPlayerItem类似于MVC里的Model层,负责资源加载、视频播放设置及播放状态管理(通过KVO方式来观察状态)。它们关系如下: ?...当status=AVPlayerStatusReadyToPlay,就代表视频能播放了,此时调用AVPlayer的play方法就能播放视频了。...还有AVPlayer释放最好先把AVPlayerItem置空,否则会有解码线程残留着。最后是性能问题,如果聊天窗口连续播放几个小视频,列表滑动时会非常卡。...]; } // 告诉上层视频解码结束 [m_delegate mMovieDecoderOnDecodeFinished:self]; 另一个是MVideoPlayerView,负责视频的显示

    4.4K91

    iOS 视频播放方式整理

    利用AVKit进行视频播放我们整理一下我们需要的大致都在这几个类或者协议当中:       1、AVPlayerItem                          (视频要播放的元素)      ...2、AVPlayerLayer                        (播放显示视频的图层界面)       3、AVPlayer                                ...2>: 顺便总结要是你要显示当前视屏的缓存进度,你需要监测它的loadedTimeRanges属性。      ...,基于着三者我们总结一下播放一个视频的基本的过程: 首先,得到视频的URL 根据URL创建AVPlayerItem 把AVPlayerItem 提供给 AVPlayer AVPlayerLayer 显示视频...AVPlayer 控制视频, 播放, 暂停, 跳转 等等。 播放过程中获取缓冲进度,获取播放进度。 视频播放完成后做些什么,是暂停还是循环播放,还是获取最后一帧图像。

    2.6K100

    AVPlayer初体验之视频解纹理

    在不同性能的设备上,甚至相同设备的不同iOS版本上,AVPlayer的最大支持清晰度都会不一样,例如在iOS10的某些机器上不支持4k播放,但是到iOS11就支持了,关于测定视频是否可以用AVPlayer...self, forKeyPath: "playbackLikelyToKeepUp", options: NSKeyValueObservingOptions.new, context: nil) //播放完成...error) //print("视频加载错误,\(String(describing: self.avPlayer?....而且直接使用使用BGRA毕竟会方便很多,因为输出的直接就是一张纹理,个人认为在iOS5代可能需要考虑420和BGRA的输出效率,但是现在毕竟都iOS11代了,所以影响可以忽略不计。...= nil) 通过预加载duration(视频总进度)来判断视频是否可播放,当加载完成后再replaceCurrentItem // Load the asset's "playable" key asset.loadValuesAsynchronously

    3.4K40
    领券