podczas eksportowania zasobu wideo za pośrednictwem AVAssetExportSession plik wyniku znajduje się w trybie obszaru lądowego. (plik został pobrany za pomocą itune-> aplikacje-> udostępnianie plików-> moja aplikacja). Jak wyeksportować zasób wideo w trybie pionowym (obrócić go)?eksportowanie zasobów wideo za pośrednictwem AVAssetExportSession w trybie portretowym
Odpowiedz
Wideo wychodzące z urządzenia przechwytującego iPhone'a jest zawsze zorientowane poziomo niezależnie od orientacji urządzenia podczas przechwytywania.
Jeśli chcesz obrócić wideo, "proste" rozwiązanie polega na przypisaniu transformacji do ścieżki wideo wyeksportowanej sesji.
Tworzenie 2 utworów zmienny w swoim obiekcie AVComposition:
AVMutableCompositionTrack *videoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
AVMutableCompositionTrack *audioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
Dodaj swoją medias utwory śledzi kompozycja jest:
...
BOOL videoResult = [videoTrack insertTimeRange:sourceCMTime
ofTrack:[tracks objectAtIndex:0]
atTime:currentTime
error:&error];
BOOL audioResult = [audioTrack insertTimeRange:sourceCMTime
ofTrack:[tracks objectAtIndex:0]
atTime:currentTime
error:&error];
...
Po dodaniu wszystkich swoich utworów, zastosować transformację do ścieżki wideo o składzie:
CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(M_PI_2);
// CGAffineTransform rotateTranslate = CGAffineTransformTranslate(rotationTransform,360,0);
videoTrack.preferredTransform = rotationTransform;
(bądźcie ostrożni, że transf orm miał lewy górny róg jako pochodzenie, więc tłumaczenie było potrzebne po obrocie, ale testowane na iPhone 4S, iOS 5.1, wydaje się, że obrót jest teraz wokół środka.)
Kiedy U przekształcić utwór w międzyczasie ustaw rozmiar renderSize, ponieważ może wyjść poza ramkę lub pojawić się z czarnym blokiem:
self.mutableVideoComposition.renderSize = CGSizeMake(assetVideoTrack.naturalSize.height,assetVideoTrack.naturalSize.width);