iOS内嵌播放视图到View实现单帧控制(Swift)

可以单帧播放的播放器 可以单帧播放的播放器 影音风暴(MYMPC)V6.4.9.1绿色版,暂停后按键盘右键单帧播放 立即下载

把播放视图内嵌到View,官方文档上已经有了比较好的说明,继承UIView 设置Layer层,然后把AVPlayer设置到AVPlayerLayer即可:

import UIKit
import AVFoundation

public class DOVPlayerView: UIView {

    /*
    // Only override draw() if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func draw(_ rect: CGRect) {
        // Drawing code
    }
    */

    public var player:AVPlayer?{
        get{
            return playerLayer.player
        }
        set{
            playerLayer.player = newValue
        }
    }

    public var playerLayer:AVPlayerLayer {
        return layer as! AVPlayerLayer
    }

    override public class var layerClass: AnyClass {
        return AVPlayerLayer.self
    }
}

在storyboard中绘制视图的时候,直接拖入一个UIView,然后修改为继承的playerView即可,如下图所示:
PlayerView

要实现单帧控制也很简单,AVPlayerItem中有一个step(stepCount: Int)的函数,stepCount为前进或者后退的帧数,设置为正整数则前进,负整数则后退:

    //前后移动一帧
    public func reverseOneFrame() -> CMTime{

        self.getPlayerItem()?.step(byCount: 1)
        return self.getCurrentTime()
    }

    public func forwardOneFrame() -> CMTime{

        self.getPlayerItem()?.step(byCount: -1)
        return self.getCurrentTime()
    }

然后当直接调用AVPlayer的seek(to:CMTime)操作的时候,会发现无法seek到设置的位置上,可改为如下操作,即可正确的seek到设定的位置:

    //seek
    public func seekToTime(time:CMTime){
        self.seek(to: time, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)
    }

当素材在播放的时候,我想要实时的获取到播放的当前位置,并做对应的同步处理,这里可以设置一个定时器来实时的触发消息通知,将获取到的当前素材播放位置通知出去,操作如下:

fileprivate var timer: Timer?

extension AVPlayer : DOVPlayerProtocol{

    //发送通知
    public func postCurrentTime(){
        let currentTime = CMTimeGetSeconds(self.currentTime())
        NotificationCenter.default.post(name: PlaybackCurrentTimeChangeNotifaction, object: self, userInfo: ["currentTime": currentTime])
    }

    //播放控制
    public func startPlay(){
        if self.status == AVPlayerStatus.readyToPlay && (self.currentItem?.status)! == AVPlayerItemStatus.readyToPlay{
            self.play()
            //设置定时器:50ms
            timer = Timer.scheduledTimer(timeInterval: 0.05, target: self, selector: #selector(self.postCurrentTime), userInfo: nil, repeats: true)
        }
    }

因为扩展了AVPlayer类来继承相应的协议,在扩展中不能定义存储属性,所以定义在了类外,加上fileprivate表示只能在该文件类访问。
接收通知的代码可以做如下操作:

class ViewController: UIViewController {

    @IBOutlet weak var playerView: DOVPlayerView!

    @IBOutlet weak var playOrPauseButton: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let url = Bundle.main.url(forResource:"Movie", withExtension: "m4v")
        let video = AVURLAsset(url: url!)

        let playerItem = AVPlayerItem(asset: video)


        let player = DOVPlayer(playerItem: playerItem)

        playerView.player = player

        NotificationCenter.default.addObserver(self, selector: #selector(self.printNotification(notification:)), name: PlaybackCurrentTimeChangeNotifaction, object: nil)
    }

    func printNotification(notification:Notification){
        let userInfo = notification.userInfo as! [String : AnyObject]
        let time = userInfo["currentTime"] as! Double
        print(time)
    }

当素材播放的时候就会每隔50ms通知一次当前位置,其他对象可以接收该通知,并做相应的处理。
运行界面如下:
运行界面

swift-PlayView一个非常适用于列表的视频播放器 PlayView 一个非常适用于列表的视频播放器 立即下载

相关推荐

iOS 单帧动画播放

iOS 帧动画播放工具,直接将GIFView添加,addAnimation开始播放,可添加多个。直播特效礼物播放

swift之视频播放AVKIT、AVPlayerViewController、音频录制和播放

AVFoundation框架简介AVFoundation框架是iOS中专门处理音视频的框架,其中集成了音频播放以及处理和视频播放处理以及采集等功能(实现录制,编辑和播放音视频功能);以及配置音频会话更新设备音视频环境等功能。AVKit框架基于此框架实现的。 在 AVFoundation 框架中使用的基本数据结构,如时间相关的或描述媒体数据的数据结构都声明在 CoreMedia 框架中。 ...

代码解释生活 1万+

swift-DFPlayer一个基于AVPlayer简单又灵活的iOS音频播放组件

简单又灵活的iOS音频播放组件。基于AVPlayer,支持本地和远程音频播放,具有缓存、耳机线控、锁频和控制中心信息展示、单曲顺序随机播放、歌词同步、记录上次播放进度等基本的音频播放器功能,DFPlayer封装了进度条、缓冲条、播放暂停按钮、下一首按钮、上一首按钮、播放模式按钮、歌词同步的tableview等UI控件,一行代码布局即可实现相应功能。

swift UIview上添加视频播放

1. /// 是否显示过广告 private lazy var isLoadAV = false /// 15秒宣传视频 private var play: AVPlayer? /// 宣传视频背景 private lazy var logoView : UIView = { let v = JYU...

weixin_34284188的博客 1725

linux下autocad完美替代品bricscad的安装运行

前言 在Linux平台下,能完美兼容.dwg文件的软件并不多。 虽然国产的中望和浩辰为适配uos操作系统,近期都推出了linux版本,但目前好像还没有对应的破姐流出。(如果有的话请私信我或留下评论) 然而有了这一款源自比利时的软件——bricscad,linux下查看和编辑.dwg文件再也不是噩梦了! 安装pj 资源链接:https://pan.baidu.com/s/1dC7zarlqwuO5fa4CBL_KGQ 提取码:24j6 1.下载对应的压缩包,解压并安装其中对应的deb或rpm软件包。 2.在C

weixin_35259117的博客 4481

实战ByteTrack:用C++手把手教你实现多目标跟踪(附完整代码解析)

本文通过C++实战教程,手把手教你实现ByteTrack多目标跟踪算法。文章详细解析了算法核心,包括利用卡尔曼滤波进行状态预测、匈牙利算法完成数据关联,以及ByteTrack独特的三次匹配策略来有效处理低置信度检测框,并提供了完整的项目架构、代码实现与性能优化指南。

yolo5detector的博客 299

MediaPlayer中文API

MediaPlayer中文APIpublic classMediaPlayer继承自 Objectjava.lang.Objectandroid.media.MediaPlayer该类概述MediaPlayer 能被用来控制音频/视频文件或流媒体的回放,可以在VideoView里找到关于如何使用这个该类中的这个方法的例子。

Lee 7870

ArcGIS 10.2 保姆级安装与破解教程(含License Manager启动失败解决方案)

本文提供ArcGIS 10.2中文版的保姆级安装与破解教程,详细讲解从环境检查到License Manager配置的全流程,特别针对License Manager启动失败等常见问题提供专业解决方案,帮助用户顺利完成地理信息系统软件的安装与激活。

weixin_26757925的博客 1180

ios 读取视频每一帧 Video Processing with AV Foundation

Construct an AVAssetReader: asset_reader = [[AVAssetReader alloc] initWithAsset:asset error:&error]; (error checking goes here) Get the video track(s) from your asset: NSArray* video_tr

1868

告别第三方插件:官方Fused Library如何重塑Android库的合并与发布流程

本文详细介绍了Android官方推出的Fused Library如何替代第三方fat-aar插件,优化Android库的合并与发布流程。通过原生支持、智能依赖管理等优势,Fused Library解决了版本兼容性、依赖传递等核心痛点,提供了更稳定高效的开发体验。文章还提供了迁移实操指南和工程实践建议,帮助开发者顺利过渡到官方方案。

weixin_42561040的博客 252

CHIP-Seq数据分析流程

文章目录CHIP-Seq数据分析流程相关软件安装数据下载将SRA转化为fastq文件数据质控,过滤数据质控然后进行质控,过滤低质量reads,去接头比对下载小鼠参考基因组的索引和注释文件比对sam文件转bam为bam文件建立索引载入IGV查看用MACS call peak安装MACS结果注释与可视化 CHIP-Seq数据分析流程 相关软件安装 所需要的软件有sratoolkit, fastqc,bowtie2,samtools,macs2,htseq-count,bedtools和前面RNA-seq数据分析

bio_meimei的博客 8789

有什么软件能一帧一帧的播放视频吗?KMPlayer

KMPlayer one frame by frame f 向前一帧; shift + f 向后一帧;

Kp0fS的草稿纸 7176

卫星轨道坐标转换:轨道六根数到经纬高(经STK验证)

a:半长轴(km)e:偏心率i:轨道倾角(度)Ω:升交点赤经(度)ω:近地点幅角(度)ν:真近点角(度)

weixin_52370774的博客 169

.NET中对WindowsMediaPlayer控件的调用

调用WindowsMediaPlayer控件编写播放器时,遇到了不少问题! 发现MS.NET2003中缺少对一些动态链接库的引用! 在调用ActiveX等多媒体控件时,需要用到的MediaPlayer.dll 和 AxMediaPlayer.dll需要自己生成。 首先用下面的命令为媒体播放器控件:msdxm.ocx 生成 MediaPlayer.dll 和 AxMediaPlayer.dll。

Netken[网知] 的 优快云 软件开发技术交流 Blog 6762

【OpenClaw从入门到精通】第04篇:Web/TUI/钉钉全打通!OpenClaw多端交互实测指南(2026避坑版)

本文详解OpenClaw三大交互方式(Web控制台、TUI终端、钉钉集成),解决新手多端操作难题。Web控制台适合可视化深度配置,TUI终端满足服务器高效运维,钉钉集成实现移动办公协同。提供2026实测配置步骤、代码示例及避坑指南,涵盖设备配对、终端命令优化、聊天机器人回调验证等核心场景,助用户快速掌握"随时召唤AI助理"的全链路方案。 关键词 OpenClaw、多端交互、Web控制台、TUI终端、钉钉集成、AI助理、实操指南 核心亮点 全链路打通:覆盖Web/TIM/IM三端配置

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 3543

[PCIE5.0] 2.2.8.9 Optimized Buffer Flush/Fill (OBFF) Message

这段文字讲解的是 优化的缓冲区清空/填充(OBFF)消息,它是 PCI Express(PCIe)规范中的一个可选功能,用于向设备报告平台中央资源的状态。简单来说,OBFF 主要帮助设备了解当前平台资源(如缓存或内存)的状态,从而优化数据的处理和传输。这章重点内容如下。

系统固件工程师 538

[iOS Swift3.0/Oc] 摄像头实时获取视频流效果 简单记录

Oc参考贴: iOS从摄像头获得实时视频流Swift 3.01.创建 会话对象+输入对象+输出对象为了能实时看到摄像机获取的视频图像,还要创建一个 预览图层(AVCaptureVideoPreviewLayer), 不然即使获取了摄像头对象,你也看不到拍摄的图 //会话对象 (负责输入和输出设置之间的数据传递) private lazy var session : AVCapture

iOSTianNan的博客 4667

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Swift- lazy 懒加载

我们在使用OC 的时候会写一些懒加载 用的的时候才创建 提高了系统的性能 Swift 给我们提供了一个属性 lazy 专门的延迟加载属性 方便了我们的编程 也提高了系统的性能 我们在写UI控件要多使用懒加载方式 import UIKit import Foundation let cellName: String = "myCell" class ViewController: UIVie

FIGHTING的专栏 2742

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

iOS视频播放的基本方法

本文总结了iOS中最常见的视频播放方法,不同的方法都各具特点,我希望能够总结它们的不同,方便在开发中选择合适的技术方案。 Apple为我们提供了多种方法来实现视频播放,包括MPMoviePlayerController,MPMoviePlayerViewController,AVPlayer,AVPlayerViewController等。而值得注意的是,上述的MPMoviePlayerCont...

梧雨北辰的博客 1197

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 通过CocoaPods 将storyboards、xibs和资源文件打包到iOS framework
下一篇: iOS中将多张图片合成为可导出可播放的视频文件(Swift 3)
Willib
博客等级 码龄14年 83粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值