`
啸笑天
  • 浏览: 3465459 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

AVPlayer 截屏(swift3.0)

 
阅读更多

 

 

 

开始做的是一般的vod视频截屏,用AVAssetImageGenerator对象就可以实现,而且可以截取任意时间点的视频图像

片段代码:
 open func generateThumbnails(times: [TimeInterval],maximumSize: CGSize, completionHandler: @escaping (([EZPlayerThumbnail]) -> Swift.Void )){
        guard let imageGenerator = self.imageGenerator else {
            return;
        }
        
        var values = [NSValue]()
        for time in times {
            values.append(NSValue(time: CMTimeMakeWithSeconds(time,CMTimeScale(NSEC_PER_SEC))))
        }
        
        var thumbnailCount = values.count
        var thumbnails = [EZPlayerThumbnail]()
        imageGenerator.cancelAllCGImageGeneration()
        imageGenerator.appliesPreferredTrackTransform = true
        imageGenerator.maximumSize = maximumSize
        imageGenerator.generateCGImagesAsynchronously(forTimes:values) { (requestedTime: CMTime,image: CGImage?,actualTime: CMTime,result: AVAssetImageGeneratorResult,error: Error?) in
            
            let thumbnail = EZPlayerThumbnail(requestedTime: requestedTime, image: image == nil ? nil :  UIImage(cgImage: image!) , actualTime: actualTime, result: result, error: error)
            thumbnails.append(thumbnail)
            thumbnailCount -= 1
            if thumbnailCount == 0 {
                DispatchQueue.main.async {
                    completionHandler(thumbnails)
                    NotificationCenter.default.post(name: .EZPlayerThumbnailsGenerated, object: self, userInfo: [Notification.Key.EZPlayerThumbnailsKey:thumbnails])
                }
                
            }
        }
    }

 

 

后来对m3u8截屏发现拿不到流,哦这方法应该对HLS流不行,后来发现AVPlayerItemVideoOutput可以实现,但是只能截取最新的播放的视频图片

片段代码:
  func snapshotImage() -> UIImage? {
        guard let playerItem = self.playerItem else {  //playerItem is AVPlayerItem
            return nil
        }
        
        if self.videoOutput == nil {
            self.videoOutput = AVPlayerItemVideoOutput(pixelBufferAttributes: nil)
            playerItem.remove(self.videoOutput!)
            playerItem.add(self.videoOutput!)
        }
        
        guard let videoOutput = self.videoOutput else {
            return nil
        }
        
        let time = videoOutput.itemTime(forHostTime: CACurrentMediaTime())
        if videoOutput.hasNewPixelBuffer(forItemTime: time) {
            let lastSnapshotPixelBuffer = videoOutput.copyPixelBuffer(forItemTime: time, itemTimeForDisplay: nil)
            if lastSnapshotPixelBuffer != nil {
                let ciImage = CIImage(cvPixelBuffer: lastSnapshotPixelBuffer!)
                let context = CIContext(options: nil)
                let rect = CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(CVPixelBufferGetWidth(lastSnapshotPixelBuffer!)), height: CGFloat(CVPixelBufferGetHeight(lastSnapshotPixelBuffer!)))
                let cgImage = context.createCGImage(ciImage, from: rect)
                if cgImage != nil {
                    return UIImage(cgImage: cgImage!)
                }
            }
        }
        return nil
    }

 

thx:

详细代码: https://github.com/easyui/EZPlayer/blob/master/EZPlayer/EZPlayer.swift

使用AVPlayer播放m3u8视频时,实现视频截图 http://blog.csdn.net/hherima/article/details/53576872

iOS 小坑记录:如何给 AVPlayer 截图http://darktechlabs.com/2016/07/15/iOS-%E5%B0%8F%E5%9D%91%E8%AE%B0%E5%BD%95%EF%BC%9A%E5%A6%82%E4%BD%95%E7%BB%99-AVPlayer-%E6%88%AA%E5%9B%BE/

 

iOS获取m3u8流媒体的视频截图http://www.jianshu.com/p/bd30ce34a76f

 

Real-time Video Processing Using AVPlayerItemVideoOutput https://developer.apple.com/library/content/samplecode/AVBasicVideoOutput/Introduction/Intro.html

分享到:
评论

相关推荐

    swift-Swift3.0MVVM之熊猫TV

    在Swift编程语言中,MVVM(Model-View-ViewModel)是一种设计模式,它在iOS应用开发中被广泛采用,特别是随着Swift的不断发展和更新,如Swift 3.0的发布。这种模式旨在提高代码的可测试性、可读性和可维护性。在...

    AVPlayer-SwiftUI:在SwiftUI中使用AVPlayer

    AVPlayer-SwiftUI 该存储库是我在SwiftUI中使用AVPlayer的四部分博客的结果: 免责声明:我不是SwiftUI专业人士,关于此代码的某些事情让人感觉不对,但它可以工作。 那就是 :beaming_face_with_smiling_eyes: 。 我...

    swift-对AVPlayer的封装支持本地和远程音频的播放

    在Swift开发中,AVPlayer是苹果提供的一种强大的多媒体播放框架,可以用来播放音频和视频。在iOS、macOS以及Apple TV等平台上,AVPlayer能够处理各种格式的媒体资源,包括本地存储和远程网络流。本项目针对AVPlayer...

    swift-基于AVPlayer封装的视频播放器包括视频播放暂停全屏快进缓冲等功能

    本项目名为"swift-基于AVPlayer封装的视频播放器包括视频播放暂停全屏快进缓冲等功能",它是一个利用Apple的AVFoundation框架中的AVPlayer组件进行封装的视频播放解决方案。以下是对这个项目的详细解析: **...

    swift-基于AVPlayer的iOS视频播放器

    在iOS应用开发中,视频播放是一个常见的需求,而Swift提供了强大的AVFoundation框架,其中的AVPlayer类是实现视频播放的核心组件。"swift-基于AVPlayer的iOS视频播放器"项目正是利用这一特性,构建了一个功能丰富的...

    MHPlayer视频播放器 Swift 3.0

    一句代码集成视频播放器 Swift 3.0; 本播放器是根据AVPlayer进行封装的; 主要功能: 1.一句代码就能调用播放 2.支持开始/暂停 3.支持放大/缩小 4.支持随屏幕旋转 5.支持拖拽进度 6.时间显示 7.左边上下滑...

    swift-avplayer边下边播本地缓存

    通过以上步骤,我们可以构建一个基本的Swift应用,使用`AVPlayer`实现边下边播和本地缓存的视频播放。当然,实际项目中可能需要考虑更多细节,如错误处理、网络状况检测、缓存大小控制等。在JNPlayer-master这个项目...

    ios-高仿Bilibili(swift3).zip

    《Swift3.0实现iOS高仿Bilibili应用解析》 在移动开发领域,iOS平台以其优秀的用户体验和强大的性能深受开发者喜爱。本项目基于Swift3.0编程语言,旨在高仿国内知名视频分享平台——Bilibili的应用界面与功能,为...

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

    基于AVPlayer,支持本地和远程音频播放,具有缓存、耳机线控、锁频和控制中心信息展示、单曲顺序随机播放、歌词同步、记录上次播放进度等基本的音频播放器功能,DFPlayer封装了进度条、缓冲条、播放暂停按钮、下一首...

    swift-自定义简单的支持横屏竖屏切换的Avplayer

    在Swift开发中,创建一个支持横屏竖屏切换的自定义AVPlayer可以帮助我们构建更加灵活且用户友好的视频播放应用。AVPlayer是Apple提供的一种强大的媒体播放器框架,它可以播放本地和网络上的多媒体资源,而自定义其...

    swift-ZFPlayer是一款基于AVPlayer支持横屏竖屏等

    ZFPlayer是一款基于AVPlayer,支持横屏、竖屏(全屏播放还可锁定屏幕方向),上下滑动调节音量、屏幕亮度,左右滑动调节播放进度的视频播放器软件。 功能: 支持横、竖屏切换,在全屏播放模式下还可以锁定屏幕方向

    swift-GAPlayer-内核为IJKPlayer和AVPlayer的播放器

    Swift-GAPlayer是一款基于IJKPlayer和AVPlayer的视频播放器框架,专为iOS开发者设计。这个播放器允许用户在IJKPlayer和AVPlayer之间轻松切换,只需一行代码即可完成核心引擎的替换,提供了灵活的选择以适应不同的...

    iOS之AVPlayer使用实例

    在iOS开发中,AVFoundation框架提供了强大的多媒体处理能力,其中包括AVPlayer类,它用于播放音频和视频内容。本文将深入探讨AVPlayer的使用实例,帮助开发者更好地理解和运用这个功能强大的工具。 1. **AVPlayer...

    ios-Swift - 基于 AVPlayer 封装的视频播放器,支持自动、手动转屏,音量和屏幕亮度调节,播放进度调整.zip

    本项目基于Swift语言,利用Apple的AVFoundation框架中的AVPlayer组件封装了一个视频播放器,名为YZPlayer。这个播放器不仅支持自动和手动屏幕旋转,还提供了音量和屏幕亮度的调节功能,以及播放进度的调整,大大提升...

    iOS AVPlayer播放暂停

    在iOS开发中,AVFoundation框架提供了强大的多媒体处理能力,其中包括AVPlayer类,它用于播放音频和视频内容。本文将深入探讨如何使用AVPlayer在iOS应用中实现视频播放和暂停功能,这对于初学者来说是非常重要的基础...

    swift苹果开发视频播放器

    在Swift苹果开发中,创建一个视频播放器是一项常见的任务,特别是在构建iOS应用时。这个项目描述的是使用Swift语言实现一个简单的视频播放器,其核心功能是播放固定URL的视频。由于URL是硬编码的,因此在实际应用中...

    NFTPlayer 基于系统AVPlayer渲染的视频播放器swift

    NFTPlayer是一款基于Swift开发的视频播放器,它利用了苹果的AVPlayer框架来实现视频的播放功能。AVPlayer是iOS、macOS等Apple平台上的一个强大组件,它提供了对多媒体内容的高级控制,能够播放各种本地和网络来源的...

    ios 视频播放器:AVPlayer(附:seektotime精准定位) - iOS知识库1

    在iOS开发中,AVPlayer是Apple提供的一个强大的多媒体播放框架,用于播放音频和视频内容。在本文中,我们将深入探讨如何使用AVPlayer进行视频播放,包括视频切换、循环播放、跳转到指定时间并实现精准定位,以及如何...

    AVPlayer v2 40 ipa

    AVPlayer v2 40 ipa

Global site tag (gtag.js) - Google Analytics