MPMoviePlayerController растягивает / искажает потоковое видео в реальном времени (m3u8) - PullRequest
1 голос
/ 19 апреля 2011

Я использую MPMoviePlayerController для воспроизведения потокового видео m3u8 в режиме реального времени для iOS 3.1.2.Он открывается в полноэкранном режиме, что хорошо.Однако, обычно после 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];

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011

В заголовке потока mpeg-ts есть поле формата изображения.Если это присутствует, MPMoviePlayerController будет растягивать видео, независимо от сообщаемой ширины и высоты.Неправильное значение приведет к искажению видео.Я не уверен, почему это произойдет только через 20 секунд, но MPMoviePlayerController - ужасный класс (особенно до iOS 4.0), так что кто может сказать ... Если вы создаете поток mpeg-ts с помощью FFmpeg, вы можетеиспользуйте -aspect% f, чтобы установить соотношение сторон.

2 голосов
/ 19 апреля 2011

MPMovieScalingModeFill не сохраняет соотношение сторон. Вы должны использовать либо MPMovieScalingModeAspectFit, либо MPMovieScalingModeAspectFill, если хотите сохранить соотношение сторон.

Ознакомьтесь с документацией MPMovieScalingMode для получения информации о всех режимах.

...