Konvertieren von PHAsset (Video) in AVAsset synchron

8

Ich muss das AVAsset-Objekt verwenden, um es mit AVPlayer und AVPlayerLayer abzuspielen. Ich habe begonnen, das Photos-Framework zu verwenden, seit AssetsLibrary veraltet ist. Jetzt bin ich an den Punkt gekommen, an dem ich ein Array von PHAsset-Objekten habe, und ich muss sie in AVAsset konvertieren. Ich habe versucht, durch das PHFetchResult aufzuzählen und einen neuen AVAsset mit der lokalisierten Beschreibung des PHAsset zuzuweisen, aber es scheint kein Video zu zeigen, wenn ich es spiele.

%Vor%

Ich nehme an, dass die lokalisierte Beschreibung nicht die absolute URL des Videos ist.

Ich bin auch auf den PHImageManager und den requestAVAssetForVideo gestoßen, allerdings hat der Optionsparameter, wenn es um Videos geht, keine isSynchrounous -Eigenschaft, was beim image options -Parameter der Fall ist.

%Vor%

Gibt es einen synchronen Weg, dies zu tun?

Danke.

    
Objectif 28.09.2015, 16:19
quelle

4 Antworten

20

Nein, ist es nicht. Aber Sie können eine synchrone Version erstellen:

%Vor%

Wenn Sie dies jedoch im Hauptthread tun und requestAVAssetForVideo: zu lange dauert, besteht die Gefahr, dass Sie Ihre Benutzeroberfläche sperren oder sogar von iOS-Wachhund .

Es ist wahrscheinlich sicherer, Ihre App so zu überarbeiten, dass sie mit der asynchronen Callback-Version funktioniert. Etwas wie das:

%Vor%     
Rhythmic Fistman 28.09.2015, 22:31
quelle
6

Für Swift 2 können Sie das Video mit PHAsset mit dieser Methode unter

abspielen

Datei importieren

%Vor%

Von PHAsset

%Vor%     
Sazzad Hissain Khan 20.09.2016 21:26
quelle
0

Sie können diesen Trick versuchen, aber es ist praktisch, wenn Sie 3,4 oder vielleicht 5 Phassets haben, die Sie in AVAsset konvertieren möchten:

%Vor%

Sie können diese Methode also grundsätzlich erneut aufrufen, wenn Sie 1 Phassatz in AVAsset konvertiert haben. Ich weiß, dass dies kein effizienter Code ist, aber er sollte nicht für wenig Zwecke verboten werden.

    
Reckoner 29.08.2016 07:51
quelle
0

Das Folgende ist eine Swift 4-Implementierung, die auf einem Semaphor beruht, um die Anfrage synchron zu machen.

Der Code ist kommentiert, um die verschiedenen Schritte zu erklären.

%Vor%     
CodeBender 04.02.2018 05:46
quelle

Tags und Links