如何使用XCDYouTubeKit for Swift播放播放列表中的下一个YouTubevideo?

我正在使用XCDYouTubeKit,作为MPMoviePlayerViewController的子类MPMoviePlayerViewController

我在播放列表中播放下一个video时遇到问题。 当我点击前进按钮时,播放器的状态停止,我不知道如何恢复它?

这是我的代码:

 override func viewDidLoad() { super.viewDidLoad() youtubeVideoPlayer = XCDYouTubeVideoPlayerViewController(videoIdentifier: videoID) self.view.addSubview( (youtubeVideoPlayer?.view)! ) NSNotificationCenter.defaultCenter().addObserver( self, selector: "moviePlayerNowPlayingMovieDidChange:", name: MPMoviePlayerNowPlayingMovieDidChangeNotification, object: youtubeVideoPlayer?.moviePlayer) NSNotificationCenter.defaultCenter().addObserver( self, selector: "moviePlayerLoadStateDidChange:", name: MPMoviePlayerLoadStateDidChangeNotification, object: youtubeVideoPlayer?.moviePlayer) NSNotificationCenter.defaultCenter().addObserver( self, selector: "moviePlayerPlaybackDidChange:", name: MPMoviePlayerPlaybackStateDidChangeNotification, object: youtubeVideoPlayer?.moviePlayer) NSNotificationCenter.defaultCenter().addObserver( self, selector: "moviePlayerPlayBackDidFinish:", name: MPMoviePlayerPlaybackDidFinishNotification, object: youtubeVideoPlayer?.moviePlayer) } func moviePlayerPlayBackDidFinish(notification: NSNotification) { print("moviePlayerPlayBackDidFinish") youtubeVideoPlayer!.view.removeFromSuperview() self.dismissViewControllerAnimated(true, completion: nil); } func moviePlayerNowPlayingMovieDidChange(notification: NSNotification) { print("moviePlayerNowPlayingMovieDidChange") } func moviePlayerLoadStateDidChange(notification: NSNotification) { print("moviePlayerLoadStateDidChange") youtubeVideoPlayer?.moviePlayer.play() let state: MPMoviePlaybackState = (youtubeVideoPlayer?.moviePlayer.playbackState)! switch state { case MPMoviePlaybackState.Stopped: print("stopped") break case MPMoviePlaybackState.Interrupted: print("interrupted") break case MPMoviePlaybackState.SeekingForward: print("forward") break case MPMoviePlaybackState.SeekingBackward: print("backward") break case MPMoviePlaybackState.Paused: print("paused") break case MPMoviePlaybackState.Playing: print("playing") break } } func moviePlayerPlaybackDidChange(notification: NSNotification) { print("moviePlayerPlaybackDidChange") let state: MPMoviePlaybackState = (youtubeVideoPlayer?.moviePlayer.playbackState)! switch state { case MPMoviePlaybackState.Stopped: print("stopped") videoIDIndex = videoIDIndex + 1 playNextVideo() break case MPMoviePlaybackState.Interrupted: print("interrupted") break case MPMoviePlaybackState.SeekingForward: print("forward") break case MPMoviePlaybackState.SeekingBackward: print("backward") break case MPMoviePlaybackState.Paused: print("paused") break case MPMoviePlaybackState.Playing: print("playing") break } } func playNextVideo() { if segueIdentifer == "SegueFromPlaylistVideos" { print("Playlist") NSNotificationCenter.defaultCenter().removeObserver( self, name: MPMoviePlayerPlaybackDidFinishNotification, object: youtubeVideoPlayer?.moviePlayer ) print("videoIDs_ARRAY = \(videoIDs_ARRAY)") print("videoIDs_ARRAY[videoIDIndex] = \( (videoIDs_ARRAY[videoIDIndex] as String) )") youtubeVideoPlayer?.videoIdentifier = videoIDs_ARRAY[videoIDIndex] as String } } 

在播放列表中播放第一个video时,序列如下,然后点击前进以移至下一个video:

moviePlayerNowPlayingMovieDidChange

moviePlayerLoadStateDidChange

moviePlayerPlaybackDidChange

播放

播放

moviePlayerLoadStateDidChange

播放

moviePlayerPlaybackDidChange

停止

播放列表

videoIDs_ARRAY = [“NztC0z1JNq0”,“uqRBijuCZd8”]

videoIDs_ARRAY [videoIDIndex] = uqRBijuCZd8

moviePlayerLoadStateDidChange

停止

正如您在最后看到的那样,播放器的状态已停止

我不知道如何恢复它以便播放下一个video。 我试过在youtubeVideoPlayer?.moviePlayer.play()中添加youtubeVideoPlayer?.moviePlayer.play() ,但播放器没有恢复播放。

有什么想法吗?

谢谢

 I don't know syntax in Swift so please translate objective-c to swift I have 2 solutions for you problem :- 1. You can stop current playing video syntax in objective-c like [self.youtubeVideoPlayer.moviePlayer stop]; and then you can set new video self.youtubeVideoPlayer.videoIdentifier=videoIdentifier; self.youtubeVideoPlayer.moviePlayer.shouldAutoplay=TRUE; [self.youtubeVideoPlayer presentInView:self.playerView]; [self.youtubeVideoPlayer.moviePlayer prepareToPlay]; self.youtubeVideoPlayer.moviePlayer.shouldAutoplay=TRUE; 2. You can do like this set nil to your XCDYouTubeVideoPlayerViewController reference and set it again self.youtubeVideoPlayer = nil; self.youtubeVideoPlayer = [[XCDYouTubeVideoPlayerViewController alloc] init]; self.youtubeVideoPlayer.moviePlayer.shouldAutoplay=TRUE; self.youtubeVideoPlayer.moviePlayer.controlStyle= MPMovieControlStyleNone; self.youtubeVideoPlayer.moviePlayer.scalingMode = MPMovieScalingModeFill; and then you can set new video self.youtubeVideoPlayer.videoIdentifier=videoIdentifier; self.youtubeVideoPlayer.moviePlayer.shouldAutoplay=TRUE; [self.youtubeVideoPlayer presentInView:self.playerView]; [self.youtubeVideoPlayer.moviePlayer prepareToPlay]; self.youtubeVideoPlayer.moviePlayer.shouldAutoplay=TRUE; Example: - #import "ViewController.h" #import "XCDYouTubeVideoPlayerViewController.h" @interface ViewController () { NSArray *urlArray; int arrindex; } @property (weak, nonatomic) IBOutlet UIView *playerView; @property (nonatomic, strong) XCDYouTubeVideoPlayerViewController *videoPlayerViewController; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. urlArray = [[NSArray alloc] initWithObjects:@"zVyEPNIR-yk",@"r5RXlY3at-E",@"sUFKakydp2c",@"1xvLHxFUwIk", nil]; arrindex = 0; NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter]; [defaultCenter addObserver:self selector:@selector(moviePlayerPlaybackStateDidChange1:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil]; [defaultCenter addObserver:self selector:@selector(moviePlayerLoadStateDidChange1:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil]; [self setVideo]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void)setVideo { self.videoPlayerViewController = [[XCDYouTubeVideoPlayerViewController alloc] init]; self.videoPlayerViewController.moviePlayer.shouldAutoplay=TRUE; self.videoPlayerViewController.moviePlayer.controlStyle= MPMovieControlStyleNone; self.videoPlayerViewController.moviePlayer.scalingMode = MPMovieScalingModeFill; [self.playerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; NSString *videoIdentifier =[urlArray objectAtIndex:arrindex]; self.videoPlayerViewController.videoIdentifier=videoIdentifier; self.videoPlayerViewController.moviePlayer.shouldAutoplay=TRUE; [self.videoPlayerViewController presentInView:self.playerView]; [self.videoPlayerViewController.moviePlayer prepareToPlay]; self.videoPlayerViewController.moviePlayer.shouldAutoplay=TRUE; } - (IBAction)Next:(id)sender { arrindex++; if (arrindex