【问题标题】:How to play mp4 video from URL over HTTPS on iOS如何在 iOS 上通过 HTTPS 从 URL 播放 mp4 视频
【发布时间】:2014-08-27 22:32:33
【问题描述】:

我正在尝试使用 MPMoviePlayerController 通过 HTTPS 从 URL 播放 mp4 格式的视频,但视频没有播放,并且我在日志中收到错误消息:

_itemFailedToPlayToEnd: {
kind = 1;
new = 2;
old = 0;
}

有什么方法可以在 iOS 上播放这种视频吗?

这是我的代码:

#import "FirstViewController.h"
#import <MediaPlayer/MediaPlayer.h>

@interface FirstViewController ()

@property (nonatomic, strong) MPMoviePlayerController *moviePlayer;

@end

@implementation FirstViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self playBtnPressed];
}

-(void)playBtnPressed
{
    NSURL *url=[[NSURL alloc] initWithString:@"https://....mp4"];
    _moviePlayer=[[MPMoviePlayerController alloc] initWithContentURL:url];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:_moviePlayer];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDonePressed:) name:MPMoviePlayerDidExitFullscreenNotification object:_moviePlayer];

    _moviePlayer.controlStyle=MPMovieControlStyleDefault;
    //moviePlayer.shouldAutoplay=NO;
    [_moviePlayer play];
    [self.view addSubview:_moviePlayer.view];
    [_moviePlayer setFullscreen:YES animated:YES];
}

- (void) moviePlayBackDonePressed:(NSNotification*)notification
{
    [_moviePlayer stop];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerDidExitFullscreenNotification object:_moviePlayer];


    if ([_moviePlayer respondsToSelector:@selector(setFullscreen:animated:)])
    {
        [_moviePlayer.view removeFromSuperview];
    }
    _moviePlayer=nil;
}

- (void) moviePlayBackDidFinish:(NSNotification*)notification
{
    [_moviePlayer stop];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:_moviePlayer];

    if ([_moviePlayer respondsToSelector:@selector(setFullscreen:animated:)])
    {
        [_moviePlayer.view removeFromSuperview];
    }
}

@end

【问题讨论】:

  • 请向我们展示您设置 MPMoviePlayerController 的代码
  • 我刚刚通过添加代码编辑了我的帖子

标签: ios objective-c cocoa-touch ios7 mpmovieplayercontroller


【解决方案1】:

可能是视频纵横比问题尝试设置纵横比

[player setScalingMode:MPMovieScalingModeAspectFit]; player.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

或者检查视频文件是否在指定的URL位置

【讨论】:

  • 视频文件存在于 URL。
【解决方案2】:

这似乎是 iOS 7 的问题。 显然,moviePlayer.movi​​eSourceType = MPMovieSourceTypeStreaming;不再工作了。 对我来说,用 MPMovieSourceTypeFile 替换它解决了这个错误。 使用以下代码,它将为您工作。确保在播放电影之前声明了通知观察者,如下所示:

[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(moviePlayBackDidFinish:)
                                                     name:MPMoviePlayerPlaybackDidFinishNotification
                                                   object:moviePlayerController.moviePlayer];

        moviePlayerController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;

        [moviePlayerController.moviePlayer prepareToPlay];

        [self presentMoviePlayerViewControllerAnimated:moviePlayerController];

        [moviePlayerController.moviePlayer play];

【讨论】:

  • 我在这里粘贴的内容是解决问题的方法......请仔细阅读并告诉我它是否有效。
  • 您是否从服务器下载文件并将其保存到文档目录?如果是,则尝试将相同的文件保存在缓存目录中[即它应该位于 iOS Caches 目录 (~/Library/Caches) ] 而不是文档目录位置中的某个位置。让我知道它是否适合你。
  • 除此更改外,还请检查以下两件事: 1) 确保您使用的是 -fileURLWithPath: 而不是 -URLWithString: 来创建您的 URL。 2)确保您的本地文件具有扩展名(例如“.mp4”)。 MPMoviePlayerController 不喜欢没有扩展名的文件。如果您需要存储没有扩展名的文件,一个解决方案是为实际文件创建一个临时符号链接(SYMBOLIC LINK),并为 MPMoviePlayerController 提供该符号链接的文件 URL,而不是“真实”文件。
  • 创建符号链接并在应用程序中使用使用填充代码:NSError *error; NSFileManager *manager = [NSFileManager defaultManager]; [manager createSymbolicLinkAtURL:linkPath withDestinationURL:actualFilePath error:&error];
  • 我尝试直接从服务器播放视频,而不是本地播放。也许这就是问题所在?
猜你喜欢
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 2017-09-10
  • 2014-08-17
  • 1970-01-01
相关资源
最近更新 更多