在目标c中以编程方式获取视频的尺寸

An1*_*Ba7 9 iphone cocoa-touch objective-c mpmovieplayercontroller ios

我是iOS开发的初学者.我正在开发一个应用程序,我需要在MPMoviePlayerController中播放视频的大小.

我正在使用MPMoviePlayerController的属性naturalSize来获取播放视频的尺寸.

@property(nonatomic, readonly) CGSize naturalSize;
Run Code Online (Sandbox Code Playgroud)

但问题是,只有当视频在MPMoviePlayerController中播放时,我才能获得自然大小.

有没有一种方法可以在MPMoviePlayerController播放之前获取视频的尺寸.

- 编辑 -

我可以采取任何其他解决方法来解决这个问题吗?请帮忙.

mjw*_*ich 34

您可以使用AVURLAsset和阅读视频的尺寸AVAssetTrack,如下所示:

NSURL *mediaURL; // Your video's URL
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:mediaURL options:nil];
NSArray *tracks = [asset tracksWithMediaType:AVMediaTypeVideo];
AVAssetTrack *track = [tracks objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

然后使用AVAssetTrack's的naturalSize属性:

CGSize mediaSize = track.naturalSize;
Run Code Online (Sandbox Code Playgroud)

以这种方式获取视频元数据的好处是您可以立即访问它,而无需播放视频或等待加载视频.


sch*_*sch 7

MPMoviePlayerController加载视频元数据需要一些时间,因此您应该添加一个侦听器并等待加载naturalSize.像这样的东西:

[[NSNotificationCenter defaultCenter] addObserver:self
                selector:@selector(movieNaturalSizeAvailable:)
                name:MPMovieNaturalSizeAvailableNotification
                object:myMoviePlayer];
Run Code Online (Sandbox Code Playgroud)

然后movieNaturalSizeAvailable:,myVideoPlayer.naturalSize为您提供所需的价值,之后,您可以播放视频.