1

我正在使用 MPMoviePlayerController 为 iOS 3.1.2 播放实时流媒体 m3u8 视频。它以全屏横向打开,这很好。但是,通常在播放 10-20 秒后,屏幕会自行调整大小。屏幕保持其宽度,但缩小高度,从而产生一个狭窄、拉伸的图像。不过,在播放预先录制的 mp4 视频时,我没有这个问题。

知道发生了什么以及如何解决它吗?

这是我的代码:

MyViewController.h:

#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>

@interface WatchNowViewController : UIViewController {
    MPMoviePlayerController *mMPPlayer;
}
@property (nonatomic, retain)           MPMoviePlayerController *mMPPlayer;

@end

MyViewController.m:

mMPPlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://www.mysite.com/myVideo.m3u8"]];
mMPPlayer.scalingMode=MPMovieScalingModeFill;
mMPPlayer.backgroundColor=[UIColor blackColor];
[mMPPlayer play];
4

2 回答 2

2

mpeg-ts 流的标头中有一个纵横比字段。如果存在,MPMoviePlayerController 将拉伸视频,而不考虑报告的宽度和高度。不正确的值会产生失真的视频。我不确定为什么这只会在流中发生 20 秒,但 MPMoviePlayerController 是一个糟糕透顶的类(尤其是在 iOS 4.0 之前),所以谁能告诉...如果您使用 FFmpeg 创建 mpeg-ts 流,您可以使用 -aspect %f 设置纵横比。

于 2011-04-19T23:15:02.493 回答
2

MPMovieScalingModeFill 不保留纵横比。如果要保留纵横比,则应使用 MPMovieScalingModeAspectFit 或 MPMovieScalingModeAspectFill。

查看MPMovieScalingMode 文档以获取有关所有模式的信息。

于 2011-04-19T17:52:01.573 回答