9

Jestem początkującym programistą w iOS. Pracuję nad aplikacją, w której potrzebuję rozmiaru filmu, który jest odtwarzany w MPMoviePlayerController.Zapoznaj się z wymiarami wideo programowo w celu c

Używam właściwości naturalSize MPMoviePlayerController, aby uzyskać wymiary odtwarzanego wideo.

@property(nonatomic, readonly) CGSize naturalSize; 

Ale problem polega na tym, że mogę uzyskać naturalny rozmiar tylko wtedy, gdy wideo zostanie odtworzone w MPMoviePlayerController.

Czy istnieje sposób, w jaki można uzyskać wymiary wideo, zanim zostanie on odtworzony w MPMoviePlayerController.

- EDIT -

Czy istnieją inne obejście mogę zbliżyć się do rozwiązania tego problemu? Proszę pomóż.

+0

Istnieje również właściwość 'duration' z' MPMoviePlayerController' – tipycalFlow

+0

@tipycalFlow Tak, widziałem tę właściwość, ale chciałem poznać wysokość i szerokość wideo, które ma zostać odtworzone w obiekcie MPMoviePlayerController, zanim zostanie faktycznie odtworzone. – An1Ba7

Odpowiedz

7

Załadowanie metadanych wideo zajmuje MPMoviePlayerController, więc powinieneś dodać detektor i poczekać na załadowanie naturalSize. Coś takiego:

[[NSNotificationCenter defaultCenter] addObserver:self 
       selector:@selector(movieNaturalSizeAvailable:) 
       name:MPMovieNaturalSizeAvailableNotification 
       object:myMoviePlayer]; 

I movieNaturalSizeAvailable:, myVideoPlayer.naturalSize daje żądaną wartość, a potem można odtworzyć wideo.

+1

Dzięki! działa idealnie! :) – An1Ba7

32

można odczytać wymiary VIDEO Korzystanie AVURLAsset i AVAssetTrack, tak:

NSURL *mediaURL; // Your video's URL 
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:mediaURL options:nil]; 
NSArray *tracks = [asset tracksWithMediaType:AVMediaTypeVideo]; 
AVAssetTrack *track = [tracks objectAtIndex:0]; 

Następnie używając AVAssetTrack „s właściwość naturalSize:

CGSize mediaSize = track.naturalSize; 

Zaletą coraz metadanych pliku wideo w ten sposób jest to, że możesz uzyskać do niego dostęp natychmiast, bez konieczności odtwarzania wideo lub oczekiwania na jego załadowanie.

+0

To działa dla mnie. Dzięki. –

1

Pomyślnie podzielę się moimi doświadczeniami dla tych, którzy znajdą tę stronę.

Rozmiar naturalny w rzeczywistości nie jest zakodowaną rozdzielczością, jest to rozdzielczość wyświetlania. może to być inne niż zakodowana rozdzielczość, na przykład jeśli współczynnik kształtu piksela! = 1 lub (bardziej powszechny) w zakodowanym wideo znajdują się informacje o metadanych czystego otworu.

Aby uzyskać zakodowaną rozdzielczość, jedynym sposobem, jaki znalazłem, jest odkodowanie pierwszej klatki np. AVASsetReaderTrackOutput, a następnie sprawdzenie wynikowego bufora pikseli za pomocą CVPixelBufferGetWidth (lub GetHeight), aby uzyskać rozdzielczość danych. jeśli używasz imageGenerator, uzyskujesz rozdzielczość wyświetlania (i bitmapę rgb rozdzielczości wyświetlania)