簡體   English   中英

使用iOS設備從HLS視頻流獲取屏幕截圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM