Воспроизведение видео на экране нестандартного размера - просмотр в iPhone
-
07-07-2019 - |
Вопрос
Предположим, пользователь нажимает на кнопку, и видео начинает воспроизводиться. Теперь, когда видео воспроизводится, оно всегда в полноэкранном режиме.
Видео должно воспроизводиться в портретном режиме (но обычно видео воспроизводится в альбомном режиме). Как я могу это сделать?
Решение
@interface MPMoviePlayerController (extend)
-(void)setOrientation:(int)orientation animated:(BOOL)value;
@end
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieUR];
[moviePlayer setOrientation:UIDeviceOrientationPortrait animated:NO];
if (moviePlayer)
{
[self.moviePlayer play];
}
Это решение будет отклонено Apple, поскольку setOrientation для проигрывателя фильмов является частным API. Вы должны быть осторожны, но это может работать на iPhone от Jailbroke.
Другие советы
Просто обновление, последний iPhone SDK 3.2+ теперь позволяет программистам показывать видео в любом желаемом размере и ориентации. Предоставляется новый MPMoviePlayerView, который является свойством MPMoviePlayerController, в этом представлении будет видео, которое вы можно добавить в качестве подпредставления для вашего представления.
Из документированных документов я не думаю, что это возможно, используя встроенный медиаплеер
Попробуйте это. Я нашел что-то новое.
@interface MPMoviePlayerController (extend)
-(void)setOrientation:(int)orientation animated:(BOOL)value;
@end
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieUR];
[moviePlayer setOrientation:UIDeviceOrientationPortrait animated:NO];
if (moviePlayer)
{
[self.moviePlayer play];
}
Вот что я сделал. Добавьте NSNotification, чтобы уведомить вас о завершении предварительной загрузки видео.
- (void)playVideoUrl:(NSString *)videoUrl {
NSURL *url = [NSURL URLWithString:videoUrl];
MPMoviePlayerController* theMovie=[[MPMoviePlayerController alloc]
initWithContentURL:url];
[[NSNotificationCenter defaultCenter] addObserver:self
//MPMoviePlayerContentPreloadDidFinishNotification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(myMovieFinishedPreloading:)
name:MPMoviePlayerContentPreloadDidFinishNotification
object:theMovie];
// Movie playback is asynchronous, so this method returns immediately.
[theMovie play];
}
Селектор обратного вызова:
-(void)myMovieFinishedPreloading:(NSNotification*)aNotification {
NSArray *windows = [[UIApplication sharedApplication] windows];
UIWindow *moviePlayerWindow = nil;
if ([windows count] > 1)
{
moviePlayerWindow = [[UIApplication sharedApplication] keyWindow];
}
CGAffineTransform transform = CGAffineTransformMakeScale(0.5, 0.5);
transform = CGAffineTransformRotate(transform, -90.0f*M_PI/180.0f);
[moviePlayerWindow setTransform:transform];
}