开始做的是一般的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
相关推荐
AVPlayer-SwiftUI 该存储库是我在SwiftUI中使用AVPlayer的四部分博客的结果: 免责声明:我不是SwiftUI专业人士,关于此代码的某些事情让人感觉不对,但它可以工作。 那就是 :beaming_face_with_smiling_eyes: 。 我...
对 AVPlayer 的封装,支持本地和远程音频的播放
一句代码集成视频播放器 Swift 3.0; 本播放器是根据AVPlayer进行封装的; 主要功能: 1.一句代码就能调用播放 2.支持开始/暂停 3.支持放大/缩小 4.支持随屏幕旋转 5.支持拖拽进度 6.时间显示 7.左边上下滑...
基于AVPlayer的iOS视频播放器,支持预设模式:普通模式,竖屏模式,横屏模式,静音模式,自定义模式。接入成本低,支持丰富的手势操作以及UI自定义。
avplayer边下边播本地缓存
基于AVPlayer,支持本地和远程音频播放,具有缓存、耳机线控、锁频和控制中心信息展示、单曲顺序随机播放、歌词同步、记录上次播放进度等基本的音频播放器功能,DFPlayer封装了进度条、缓冲条、播放暂停按钮、下一首...
自定义简单的支持横屏竖屏切换的Avplayer
播放内核为IJKPlayer和AVPlayer(一句代码切换内核) 包含广告功能(跳过广告,倒计时)清晰度切换和播放器其他功能 支持M3U8 MP3 MP4 后期会支持M3U8加密和下载
基于AVPlayer封装的视频播放器,包括视频播放,暂停,全屏,快进,缓冲等功能
AVPlayer v2 40 ipa
iOS之AVPlayer使用实例,好好看吧。
ZFPlayer是一款基于AVPlayer,支持横屏、竖屏(全屏播放还可锁定屏幕方向),上下滑动调节音量、屏幕亮度,左右滑动调节播放进度的视频播放器软件。 功能: 支持横、竖屏切换,在全屏播放模式下还可以锁定屏幕方向
AVPlayer ffmpeg dshow
NFTPlayer 基于系统AVPlayer渲染的视频播放器,通过接管resourceLoader来管理整个视频播放的网络层和缓存层.zip
CLPlayer 一款基于AVPlayer封装的播放器。 播放器主要自定义了带缓冲显示的进度条,可以拖动调节视频播放进度的播放条,具有当前播放时间和总时间的Label,全屏播放功能,定时消失的工具条。
Demo 文件超过上传大小限制,请到 GitHub 下载 GitHub 下载地址: https://github.com/coolryze/YZPlayer
swift苹果开发,实现视频播放器,这个视频url链接也是写死的,需要自己改。
SZAVP播放器SZAVPlayer是一个轻量级的音频/视频播放器库,基于AVPlayer (纯Swift)。 支持缓存和视频图像输出。特征 封装AVPlayer和AVPlayerItem的状态变化并统一输出,大大降低了音视频播放的实现成本。 基于...
AVPlayer循环播放不闪屏