7

Ich versuche, Instagram Video Cropping-Funktion zu implementieren. Dazu muss ich richtig Orientierung des Videos, mit dem ich meine MPMoviePlayerController Layout im richtigen Seitenverhältnis Layout und Benutzer wird dann in der Lage sein, das Video zu schwenken und gezeigt quadratisches Video wird auf Aktion zugeschnitten werden.Wie bekomme ich die richtige Orientierung für Videos von PhotoLibrary iOS

Ich habe Probleme mit der richtigen Ausrichtung des Videos. Ich verwende folgenden Code

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:fileUrl options:nil]; 
NSArray *tracks = [asset tracksWithMediaType:AVMediaTypeVideo]; 
AVAssetTrack *track = [tracks objectAtIndex:0]; 
UIInterfaceOrientation orientation =[self orientationForTrack:track]; 

// method to get orientation 
- (UIInterfaceOrientation)orientationForTrack:(AVAssetTrack *)videoTrack 
{ 
    CGSize size = [videoTrack naturalSize]; 
    CGAffineTransform txf = [videoTrack preferredTransform]; 

    if (size.width == txf.tx && size.height == txf.ty) 
     return UIInterfaceOrientationLandscapeRight; 
    else if (txf.tx == 0 && txf.ty == 0) 
     return UIInterfaceOrientationLandscapeLeft; 
    else if (txf.tx == 0 && txf.ty == size.width) 
     return UIInterfaceOrientationPortraitUpsideDown; 
    else 
     return UIInterfaceOrientationUnknown; 
} 

Problem, das ich habe, ist, dass einige Male die Videos, die tatsächlich im Portrait sind, ist oben Stück Code als Landschaft Klassifizieren und umgekehrt. Ich muss nur zwei Zustände der Videoausrichtung kennen: (Querformat oder Hochformat). Ich möchte genau den gleichen Orientierungswert, den MPMoviePlayerController interpretiert. Meine Anwendung unterstützt nur Portrait Ausrichtung. Jede Hilfe würde sehr geschätzt werden.

PS: Oben Code funktioniert gut für Videos, die von iPhone Kamera erfasst werden, Videos, die heruntergeladen oder durch die WhatsApp freigegeben sind, verursachen das Problem.

+0

möglicherweise dieser Link wird Ihnen helfen https://gist.github.com/lukabernardi/5020724 –

+0

Nein, es hat nicht. Ich habe dieses Problem gelöst, ich werde die Lösung hochladen, wenn ich etwas Zeit bekommen werde. Danke für Ihre Hilfe. – Usama

+0

ok. lege es so, dass andere etwas Hilfe bekommen werden ....:) –

Antwort

5

Nur Art und Weise, die für mich dieses Problem gelöst ist Thumbnail-Bild aus dem Video mit der Methode zu erfassen:

- (void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option 

und dann auf der Thumbnail-Bild Zugabe Check wie:

if (singleFrameImage.size.height > singleFrameImage.size.width) { 
    // potrait video 
} else { 
    // landscape video 
} 

Diese Lösung wird auf Videos getestet, die von der iPhone-Kamera aufgenommen wurden, sowie auf einem Satz (8-10) von Videos, die zufällig aus dem Internet heruntergeladen wurden.

4

AVAssetTrack hat Eigenschaft preferredTransform. Sie können das verwenden, um die tatsächliche Ausrichtung des Videos zu finden.

 AVAssetTrack *videoAssetTrack = [[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; 
UIImageOrientation videoAssetOrientation_ = UIImageOrientationUp; 
CGFloat videoAngle = RadiansToDegrees(atan2(videoAssetOrientation_.b, videoAssetOrientation_.a)); 


int orientation = 0; 
switch ((int)videoAngle) { 
    case 0: 
     orientation = UIImageOrientationRight; 
     break; 
    case 90: 
     orientation = UIImageOrientationUp; 
     break; 
    case 180: 
     orientation = UIImageOrientationLeft; 
     break; 
    case -90: 
     orientation = UIImageOrientationDown; 
     break; 
    default: 
     //Not found 
     break; 
} 
+0

das funktioniert nur für Videos, die von der iphone Kamera aufgenommen wurden, es funktioniert nicht für zufällige Videos, die vom Internet heruntergeladen wurden. – Usama

+0

Ich habe dieses Problem gelöst, ich werde die Lösung veröffentlichen, sobald ich etwas Freizeit habe. Danke für Ihre Hilfe. – Usama

+0

Ich denke, der vorgeschlagene Code ist richtig, aber Sie müssen diese Ausrichtung auch auf die Größe des Video-Assets anwenden. Ich meine, wenn die Orientierung 0 oder 180 ist, dann isLandscape = Breite> Höhe, aber es ist 90 oder -90 dann istLandscape = Breite markov

Verwandte Themen