开始做的是一般的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编程语言中,MVVM(Model-View-ViewModel)是一种设计模式,它在iOS应用开发中被广泛采用,特别是随着Swift的不断发展和更新,如Swift 3.0的发布。这种模式旨在提高代码的可测试性、可读性和可维护性。在...
AVPlayer-SwiftUI 该存储库是我在SwiftUI中使用AVPlayer的四部分博客的结果: 免责声明:我不是SwiftUI专业人士,关于此代码的某些事情让人感觉不对,但它可以工作。 那就是 :beaming_face_with_smiling_eyes: 。 我...
在Swift开发中,AVPlayer是苹果提供的一种强大的多媒体播放框架,可以用来播放音频和视频。在iOS、macOS以及Apple TV等平台上,AVPlayer能够处理各种格式的媒体资源,包括本地存储和远程网络流。本项目针对AVPlayer...
本项目名为"swift-基于AVPlayer封装的视频播放器包括视频播放暂停全屏快进缓冲等功能",它是一个利用Apple的AVFoundation框架中的AVPlayer组件进行封装的视频播放解决方案。以下是对这个项目的详细解析: **...
在iOS应用开发中,视频播放是一个常见的需求,而Swift提供了强大的AVFoundation框架,其中的AVPlayer类是实现视频播放的核心组件。"swift-基于AVPlayer的iOS视频播放器"项目正是利用这一特性,构建了一个功能丰富的...
一句代码集成视频播放器 Swift 3.0; 本播放器是根据AVPlayer进行封装的; 主要功能: 1.一句代码就能调用播放 2.支持开始/暂停 3.支持放大/缩小 4.支持随屏幕旋转 5.支持拖拽进度 6.时间显示 7.左边上下滑...
通过以上步骤,我们可以构建一个基本的Swift应用,使用`AVPlayer`实现边下边播和本地缓存的视频播放。当然,实际项目中可能需要考虑更多细节,如错误处理、网络状况检测、缓存大小控制等。在JNPlayer-master这个项目...
《Swift3.0实现iOS高仿Bilibili应用解析》 在移动开发领域,iOS平台以其优秀的用户体验和强大的性能深受开发者喜爱。本项目基于Swift3.0编程语言,旨在高仿国内知名视频分享平台——Bilibili的应用界面与功能,为...
基于AVPlayer,支持本地和远程音频播放,具有缓存、耳机线控、锁频和控制中心信息展示、单曲顺序随机播放、歌词同步、记录上次播放进度等基本的音频播放器功能,DFPlayer封装了进度条、缓冲条、播放暂停按钮、下一首...
在Swift开发中,创建一个支持横屏竖屏切换的自定义AVPlayer可以帮助我们构建更加灵活且用户友好的视频播放应用。AVPlayer是Apple提供的一种强大的媒体播放器框架,它可以播放本地和网络上的多媒体资源,而自定义其...
ZFPlayer是一款基于AVPlayer,支持横屏、竖屏(全屏播放还可锁定屏幕方向),上下滑动调节音量、屏幕亮度,左右滑动调节播放进度的视频播放器软件。 功能: 支持横、竖屏切换,在全屏播放模式下还可以锁定屏幕方向
Swift-GAPlayer是一款基于IJKPlayer和AVPlayer的视频播放器框架,专为iOS开发者设计。这个播放器允许用户在IJKPlayer和AVPlayer之间轻松切换,只需一行代码即可完成核心引擎的替换,提供了灵活的选择以适应不同的...
在iOS开发中,AVFoundation框架提供了强大的多媒体处理能力,其中包括AVPlayer类,它用于播放音频和视频内容。本文将深入探讨AVPlayer的使用实例,帮助开发者更好地理解和运用这个功能强大的工具。 1. **AVPlayer...
本项目基于Swift语言,利用Apple的AVFoundation框架中的AVPlayer组件封装了一个视频播放器,名为YZPlayer。这个播放器不仅支持自动和手动屏幕旋转,还提供了音量和屏幕亮度的调节功能,以及播放进度的调整,大大提升...
在iOS开发中,AVFoundation框架提供了强大的多媒体处理能力,其中包括AVPlayer类,它用于播放音频和视频内容。本文将深入探讨如何使用AVPlayer在iOS应用中实现视频播放和暂停功能,这对于初学者来说是非常重要的基础...
在Swift苹果开发中,创建一个视频播放器是一项常见的任务,特别是在构建iOS应用时。这个项目描述的是使用Swift语言实现一个简单的视频播放器,其核心功能是播放固定URL的视频。由于URL是硬编码的,因此在实际应用中...
NFTPlayer是一款基于Swift开发的视频播放器,它利用了苹果的AVPlayer框架来实现视频的播放功能。AVPlayer是iOS、macOS等Apple平台上的一个强大组件,它提供了对多媒体内容的高级控制,能够播放各种本地和网络来源的...
在iOS开发中,AVPlayer是Apple提供的一个强大的多媒体播放框架,用于播放音频和视频内容。在本文中,我们将深入探讨如何使用AVPlayer进行视频播放,包括视频切换、循环播放、跳转到指定时间并实现精准定位,以及如何...
AVPlayer v2 40 ipa