尝试使用MPMoviePlayer时出现黑屏

时间:2015-04-27 04:15:04

标签: ios iphone mpmovieplayercontroller movie

我正在使用MPMoviePlayer将外部URL中的视频显示到我的iPhone应用程序上,但是当我运行应用程序时,黑屏就显示出来了。 这是我正在使用的URL:

2015-04-27 00:11:29.655 Floadt[21069:2598414] https://scontent.cdninstagram.com/hphotos-xaf1/t50.2886-16/11179443_819874424728492_389701720_n.mp4

以下是我尝试设置MPMoviePlayer的代码:

if (entry[@"videos"] != nil) {
    NSLog(@"There is a Video: %@", entry[@"videos"]);
    NSString *urlString = entry[@"videos"][@"standard_resolution"][@"url"];
    NSLog(urlString);
    NSURL *url = [NSURL URLWithString:urlString];
    MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL: url];
    [player prepareToPlay];
    [player.view setFrame: CGRectMake(10, 65, 299, 299)];
    [cell.contentView addSubview: player.view];
    player.shouldAutoplay = YES;
    [player play];
}

2 个答案:

答案 0 :(得分:0)

您需要将实例保留为MPMoviePlayerController,即作为属性或instance变量。如果您不保留,则对电影播放器​​的引用将丢失。

答案 1 :(得分:0)

当我们尝试从URL加载视频时,它将仅显示空白屏幕。 MPMoviePlayerController将花费一些时间从url加载视频。因此我们可以显示视频的第一帧直到视频加载。为此需要导入两个框架。

1.AVFoundation

2.AssetsLibrary

使用这两个我们可以将第一帧视频显示到UIImageView中,如下所示:

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.


url=[NSURL URLWithString:@"https://scontent.cdninstagram.com/hphotos-xaf1/t50.2886-16/11179443_819874424728492_389701720_n.mp4"];

AVAsset *avAsset = [AVURLAsset URLAssetWithURL:url options:nil];

if ([[avAsset tracksWithMediaType:AVMediaTypeVideo] count] > 0)
{
    AVAssetImageGenerator *imageGenerator =[AVAssetImageGenerator assetImageGeneratorWithAsset:avAsset];
    Float64 durationSeconds = CMTimeGetSeconds([avAsset duration]);
    CMTime midpoint = CMTimeMakeWithSeconds(durationSeconds/2.0, 600);
    NSError *error;
    CMTime actualTime;

    CGImageRef halfWayImage = [imageGenerator copyCGImageAtTime:kCMTimeZero actualTime:&actualTime error:&error];

    if (halfWayImage != NULL)
    {

        NSString *actualTimeString = (NSString *)CFBridgingRelease(CMTimeCopyDescription(NULL, actualTime));
        NSString *requestedTimeString = (NSString *)CFBridgingRelease(CMTimeCopyDescription(NULL, midpoint));
        NSLog(@"Got halfWayImage: Asked for %@, got %@", requestedTimeString, actualTimeString);

        UIImage *img=[UIImage imageWithCGImage:halfWayImage];
        _imgVw.image=img;

    }

}


UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapped)];
[_imgVw addGestureRecognizer:tap];




}


-(void)tapped
{
MPMoviePlayerController *movPlayer=[[MPMoviePlayerController alloc] init];
[movPlayer setContentURL:url];
[movPlayer setMovieSourceType:MPMovieSourceTypeFile];
[movPlayer.view setFrame:CGRectMake(0, 0, _imgVw.frame.size.width, 250)];
[movPlayer prepareToPlay];
movPlayer.controlStyle = MPMovieControlStyleNone;
movPlayer.fullscreen = NO;
movPlayer.shouldAutoplay=YES;
[movPlayer setScalingMode:MPMovieScalingModeAspectFill];
[_imgVw addSubview:movPlayer.view];

[movPlayer play];


}

这里我正在使用UIImageView视图播放视频。在viewDidLoad中,我正在加载第一帧并向UIImageView提供点击手势。当我点击ImageView然后我正在播放视频。