MPMoviePlayerController 拉伸/扭曲直播视频 (m3u8)

Posted

技术标签:

【中文标题】MPMoviePlayerController 拉伸/扭曲直播视频 (m3u8)【英文标题】:MPMoviePlayerController stretches / distorts live streaming video (m3u8) 【发布时间】:2011-08-08 20:01:19 【问题描述】:

我正在使用 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];

【问题讨论】:

【参考方案1】:

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

查看MPMovieScalingMode documentation 了解所有模式的信息。

【讨论】:

我尝试了您列出的适合和填充模式,但仍然无法正常工作。它最初有效。但是,播放器在片刻之后仍会调整大小。 m3u8 有什么特别之处可能导致我的问题吗? 我用 Apple 的 blip-blop 提要试用了我的播放器:devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8。到目前为止,没有调整大小。这表明我的提要的编码可能存在问题。我将与为我的提要设置编码的人交谈。【参考方案2】:

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

【讨论】:

20 秒可能是因为第一个 TS-chunk 编码正确,但下一个未正确编码。 +1 以获得良好和正确的答案。

以上是关于MPMoviePlayerController 拉伸/扭曲直播视频 (m3u8)的主要内容,如果未能解决你的问题,请参考以下文章

如何显示 MPMoviePlayerController 控件?

MPMoviePlayerController 隐藏 AirPlay 按钮

MPMoviePlayerController 上的专辑封面

MPMoviePlayerController 已弃用,现在怎么办?

用 MPMoviePlayerController 替换 AVPlayer

“MPMoviePlayerController”的“initialPlaybackTime”不起作用