资讯专栏INFORMATION COLUMN

AVKit 播放(AVFoundation, AVKit, 音视频, Swift 4, 配代码)

Jenny_Tong / 966人阅读

摘要:播放视频,苹果设计的很简单,代码如下拿一个建立一个实例你的再建立一个实例这里有一个闭包,出现了,再播放。苹果文档上说,用于管理播放器播放的资源的计时和呈现状态。推荐资源苹果文档视频教程大佬博客,本地网络视频播放相关

音视频,简单点,上手就用,当然是 AVKit.
更加灵活的控制,就要用到 AVFoundation 了。


要点:

使用资源(一般就是照片库里面的视频,图片,live photo),

播放,

编辑,

捕捉(拍照和录视频)

导出资源(就处理过的资源,拍的照片,编辑的视频,导出到相册)


AVFoundation , 视频的加载与导出,大量使用异步。
简单的发消息, 肯定是不行的。阻塞当前线程, 卡顿很久很久。
AVFoundation 就是为了充分利用64位的硬件和多线程设计的。


首先是播放,

播放本地的视频文件, 和远程的视频与流媒体。

本地文件,单个播放

先讲 AVKit 里面的 AVPlayerViewController.
AVPlayerViewController 是 ViewController 的子类,

AVPlayerViewController 在 TV OS 上,非常强大。(本文仅介绍 iOS 平台下)

AVPlayerViewController 里面有很多播放的控件。
回播中,就是播放本地文件中,可以播放、暂停、快进、快退,调整视频的长宽比例( 即画面在屏幕中适中,或者铺满屏幕)。

播放视频,苹果设计的很简单,代码如下:

    //  拿一个 url , 建立一个 AVPlayer 实例
    let player = AVPlayer(url: "你的 url")
    //  再建立一个 AVPlayerViewController 实例
    let playerViewController = AVPlayerViewController()
    
    playerViewController.player = queuePlayer
    
    present(playerViewController, animated: true) {
        playerViewController.player!.play()
    }// 这里有一个闭包, 出现了,再播放。

本地文件,多个连续播放

连着放,使用 AVQueuePlayer,把多个视频放在一个视频队列中,依次连续播放
AVQueuePlayer 是 AVPlayer 的子类。
按顺序,播放多个资源。

AVPlayerItem 包含很多视频资源信息,除了资源定位 URI , 还有轨迹信息,视频的持续时长等。

苹果文档上说, AVPlayerItem 用于管理播放器播放的资源的计时和呈现状态。他有一个 AVAsset 播放资源的属性。

   var queue = [AVPlayerItem]()   
   let videoClip = AVPlayerItem(url: url)
   queue.append(videoClip)
    //   queue 队列可以继续添加 AVPlayerItem 实例
    let queuePlayer = AVQueuePlayer(items: queue)

    let playerViewController = AVPlayerViewController()
    playerViewController.player = queuePlayer
    
    present(playerViewController, animated: true) {
        playerViewController.player!.play()
    }
iPad 中的画中画功能

iPad 中的画中画功能,通过给 AVAudioSession 支持后台音效,
AppdelegatedidFinishLaunchingWithOptions 中添加下面的这段代码,使用后台模式,
首先在Xcode 的 target 的 Capability 中勾选相关的后台功能。

    let session = AVAudioSession.sharedInstance()
    do {
        try session.setCategory(AVAudioSessionCategoryPlayback)
        try session.setActive(true)
    } catch let error {
        print("AVFoundation configuration error: (error.localizedDescription) 

 AV 配置 有问题")
    }
    // 很有必要这样,因为画中画的视频功能,apple 是当后台任务处理的。

流媒体播放和网络视频播放

本地的资源路径 URL ,替换为网络的 URL, 就可以了。

优化,播放完成后,退出播放界面
   override func viewDidLoad() {
        super.viewDidLoad()
        // 添加播放完成的监听
        NotificationCenter.default.addObserver(self, selector: #selector(playerItemDidReachEnd), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
    }

  //  执行退出的界面控制
   @objc func playerItemDidReachEnd(){
        self.presentedViewController?.dismiss(animated: true, completion: {})
    }
代码见: https://github.com/BoxDengJZ/... More: 其次是设置捕捉的 session ,并预览。

设置前后摄像头,聚焦与曝光,拍照(静态图片)


接下来,是导出拍的视频文件( movie file )。

怎么设置聚焦


还有视频的合成,将多个视频片段合成为一个视频文件。
最后是,关于给视频添加图形覆盖和动画。

推荐资源:
AVFoundation Programming Guide 苹果文档

视频教程

大佬博客, AVPlayer 本地、网络视频播放相关

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/17132.html

相关文章

  • iOS开发学习路线

    摘要:开发学习路线前言这里筑梦师是一名正在努力学习的开发工程师目前致力于全栈方向的学习希望可以和大家一起交流技术共同进步用简书记录下自己的学习历程个人学习方法分享本文阅读建议一定要辩证的看待本文本文主要是本人对开发经验中总结的知识点本文所有观点仅 iOS开发学习路线 前言 这里筑梦师,是一名正在努力学习的iOS开发工程师,目前致力于全栈方向的学习,希望可以和大家一起交流技术,共同进步,用简书...

    ctriptech 评论0 收藏0
  • AVFoundation 视频常用套路: 视频合成与导出,拍视频手电筒,拍照闪光灯

    摘要:每次拍照,都要新建具有原子性拍视频用手电筒,用配置的是直接修改的属性苹果设计的很好。拍照用闪光灯,是按瞬间动作配置。直接写入到相册,对应的是视频合成,并导出到相册。相关拍照聚焦和曝光,简明教程推荐资源苹果文档视频教程 showImg(https://segmentfault.com/img/remote/1460000016881318?w=1876&h=1188); 拍视频,把视频文...

    陈江龙 评论0 收藏0
  • UIView初识

    摘要:从运行时的角度来看,即使用一个对象来控制这片区域里面内容的渲染和交互的事件。事件处理每一个都是响应者,它可以处理定义的所有事件。在系的继承层次中可以看出,继承自,这也赋予了它事件处理能力。 UIView,也即User Interface View,就是用户界面的意思。毫无疑问,这是与用户关系最密切的一层,也是产品狗们真正关心的地方,所以,对UIView的掌握在很大程度上决定着一个程序...

    Maxiye 评论0 收藏0
  • FFmpeg常用命令合集

    摘要:查询命令命令注释显示版本号显示可用的显示可用的显示可用的设备显示所有编解码器显示可用的解码器显示可用的编码器显示比特流显示可用的格式显示可用的协议显示可用的过滤器显示可用的像素格式显示可用的采样格式显示名称显示识 showImg(https://segmentfault.com/img/bVbt7Pk?w=1540&h=330); ffmpeg查询命令 命令 注释 -vers...

    warnerwu 评论0 收藏0
  • FFmpeg常用命令合集

    摘要:查询命令命令注释显示版本号显示可用的显示可用的显示可用的设备显示所有编解码器显示可用的解码器显示可用的编码器显示比特流显示可用的格式显示可用的协议显示可用的过滤器显示可用的像素格式显示可用的采样格式显示名称显示识 showImg(https://segmentfault.com/img/bVbt7Pk?w=1540&h=330); ffmpeg查询命令 命令 注释 -vers...

    aristark 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<