用iOS设备从HLS视频流中截图



我正在开发一个应用程序,该应用程序播放HLS视频并在UIView中渲染它。

在确定的时间,我想保存当前显示的视频图像的图片。为此,我开始一个图像上下文图形,在上下文中绘制UIView层次结构,并使用UIGraphicsGetImageFromCurrentImageContext方法将其保存在一个UIImage中。

这个工作在iOS模拟器上真的很好,渲染的图像是完美的。但是在设备上渲染的图像是完全白色的。

有谁知道为什么它不能在设备上工作吗?或者,是否有一种工作方法可以在设备上截取HLS视频的截图?

感谢您的帮助

我能够找到一种方法来保存HLS直播流的屏幕截图,通过添加AVPlayerItemVideoOutput对象到AVPlayerItem。

在初始化:

self.output = AVPlayerItemVideoOutput(pixelBufferAttributes: 
                                      Dictionary<String, AnyObject>())
playerItem.addOutput(output!)

保存截图:

guard let time = self.player?.currentTime() else { return }
guard let pixelBuffer = self.output?.copyPixelBufferForItemTime(time,
                        itemTimeForDisplay: nil) else { return }
let ciImage = CIImage(CVPixelBuffer: pixelBuffer)
let temporaryContext = CIContext(options: nil)
let rect = CGRectMake(0, 0, 
                      CGFloat(CVPixelBufferGetWidth(pixelBuffer)), 
                      CGFloat(CVPixelBufferGetHeight(pixelBuffer)))
let videoImage = temporaryContext.createCGImage(ciImage, fromRect: rect)
let image = UIImage(CGImage: videoImage)
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)

这似乎不能在模拟器中工作,但在设备上工作得很好。代码在Swift 2中,但应该可以直接转换为obj-c或Swift 1.x。

人们尝试过,但失败了(像我一样),显然是因为HLS的性质。参见:http://blog.denivip.ru/index.php/2012/12/screen-capture-in-ios/?lang=en

相关内容

  • 没有找到相关文章

最新更新