如何使用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
- Apple Watch中的手势识别(WatchKit)
- MKStoreKit -isSubscriptionActive总是返回False
- ios Google SDK Map不能创build虚线多段线
- 如何仅突出显示UILabel – IOS中的文本
- 检索在iOS中通过蓝牙连接的配对设备
- NSManagedObject值是正确的,然后在将更改从父NSManagedObjectContext合并到子NSManagedObjectContext时不正确
- RestKit:映射JSONstring数组
- 应该使用什么方法dynamic更改所选UICollectionViewCell的大小?
- 在块外返回一个variables值 – Objective-C,iOS