[英]Take screenshot from HLS video stream with iOS device
我正在開發一個播放HLS視頻並將其呈現在UIView中的應用程序。
我想在確定的時間內保存當前顯示的視頻圖像的圖片。 為此,我開始一個圖像上下文圖形,在上下文中繪制UIView層次結構,然后使用UIGraphicsGetImageFromCurrentImageContext方法將其保存在UIImage中。
在iOS模擬器上,這項工作真的很好,渲染的圖像非常完美。 但是在設備上,渲染的圖像完全是白色的。
有人知道為什么它在設備上不起作用嗎? 或者,是否有一種可行的方法來在設備上拍攝HLS視頻的屏幕截圖?
感謝您的幫助。
通過向AVPlayerItem添加AVPlayerItemVideoOutput對象,我能夠找到一種方法來保存HLS實時流的屏幕截圖。
在初始化中:
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或Swift1.x。
人們嘗試過並且失敗了(就像我一樣),顯然是因為HLS的本質。 請參閱: http : //blog.denivip.ru/index.php/2012/12/screen-capture-in-ios/?lang = zh-CN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.