Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.

Programsal olarak MPMoviePlayerController ile bir video oynatırken ekran resmini nasıl çekebilirim ?

0 oy
43 kez görüntülendi
10, Eylül, 2015 ios development kategorisinde burhanaksendir tarafından soruldu
MPMoviePlayerController ile yürütülen bir video var. Bir butona basarak o anki ekran görüntüsünü almaya çalışıyorum. Ancak başarılı olamadım. Nasıl yapabilirim bunu ?

Şunu denedim ama siyah ekran resmi aldım:

let keyWindow: UIWindow = UIApplication.sharedApplication().keyWindow!

        let rect: CGRect = keyWindow.bounds

        UIGraphicsBeginImageContext(rect.size)

        let context: CGContextRef = UIGraphicsGetCurrentContext()

        keyWindow.layer.renderInContext(context)

        let img: UIImage = UIGraphicsGetImageFromCurrentImageContext()

        UIGraphicsEndImageContext()

1 cevap

+1 oy
11, Eylül, 2015 yasin tarafından cevaplandı
11, Eylül, 2015 burhanaksendir tarafından seçilmiş
 
En İyi Cevap

MPMoviePlayerController'dan capture almak oldukça zor bir mevzu. Eski ios sürümlerinde yapılabiliyormuş galiba ama güncel ios sürümlerinde yapılabilirliğinden emin değilim açıkçası, bir aralar lazım olmuştu ama ben de becerememiştim.

11, Eylül, 2015 burhanaksendir tarafından yorumlandı
Şimdi şöyle bir şey denedim *.

Belirlediğim frame'de Movie Player ekranının resmini başarıyla yakalayıp photos'a kaydediyor. Ama ben istiyorum ki manuel olarak girdiğim bu  frame'i (örnekte 16) bir başka buton aracılığıyla devreye sokayım. Yani Capture isimli farklı bir buton olduğunu düşünelim ve buna tıklandığında player'in o anki currentTime'ına göre capture alsın.

Bunu nasıl yapabilirim sizce ?

* https://gist.github.com/burhanaksendir/585be8bd6932151c2a44
11, Eylül, 2015 yasin tarafından yorumlandı
öncelikle yaptığınız şey sadece moviePlayer view'inin bir göüntüsünü alıyor. Tüm ekranın değil.
istediğiniz tüm ekran görüntüsünü yakalamaksa başka türlü bir şeyler denemek lazım.

verdiğiniz örnek'de thumbnail request'i viewDidLoad'da çağırıyorsunuz. Bunun yerine bir buton aksiyonuna bağlayın. Böylece buton basıldığında request yapılacak ve istek hazır olduğunda videoThumbnailIsAvailable methodu MPMoviePlayerThumbnailImageRequestDidFinishNotification tarafından tetiklenerek istenilen saniyedeki imajın fotoğraf albümüne kaydedilmesi sağlanacak.


func requestThumbnail() {

            let thirdSecondThumbnail = 16.0

            moviePlayer!requestThumbnailImagesAtTimes([thirdSecondThumbnail],
                timeOption: .NearestKeyFrame)
        
    }
11, Eylül, 2015 burhanaksendir tarafından yorumlandı
Tam istediğim gibi oldu. Çok teşekkür ederim. Tam ekran görüntüsü olarak istemiyordum. Sadece movie frame'i yeterli oldu bana.
11, Eylül, 2015 burhanaksendir tarafından yorumlandı
Yalnız üzücü olan tek şey download edilebilen içeriklerde çalışması. Örneğin live stream videolarda çalışmıyor. Bu method  http live stream (HLS) videolarda çalışmıyor. Yani şöyle denmiş şurada: *

This method is not not called when the source URL is an HTTP Live Streaming (HLS) content source
* https://developer.apple.com/library/ios/documentation/MediaPlayer/Reference/MPMoviePlayerController_Class/#//apple_ref/occ/instm/MPMoviePlayerController/requestThumbnailImagesAtTimes:timeOption:

Sizce bir yolunu bulamaz mıyız bu işin ? Araştırdım ama belki siz daha iyi bir çözüm sunabilirsiniz.
12, Eylül, 2015 burhanaksendir tarafından yorumlandı
12, Eylül, 2015 burhanaksendir tarafından düzenlendi
Şimdi daha farklı bir yöntemle, Movie Player ile birlikte komple ekran görüntüsü almayı başardım. Ancak bu sefer sadece simulatör'de çalıştı. Gerçek cihazda nedense çalışmadı (siyah ekran çıktı sadece). Bir fikriniz var mı bu konuda ? Acaba diyorum ki Apple policy ile alakalı olabilir mi ? Videolardan görüntü alınmasını istemiyorlar sanırım. Çünkü kaç gündür araştırmadığım yöntem kalmadı.

https://gist.github.com/burhanaksendir/7f0553cf1da4b8280411
...