XCDYouTubeVideoPlayer opens and close

2020-04-20 08:51发布

问题:

I've start working with XCDYouTubeVideoPlayer. It does seem to have, some small issues. When I use the method (like below) to call the player it opens it and close it right away.

I've imported following frameworks: mediaplayer AVfoundation

and added the `XCDYouTubeVideoPlayerViewController.h and .m

In the viewController.m I've added this method:

- (IBAction) play:(id)sender
{
[self.view endEditing:YES];
    NSString *link = @"m01MYOpbdIk";

XCDYouTubeVideoPlayerViewController *videoPlayerViewController = [[XCDYouTubeVideoPlayerViewController alloc] initWithVideoIdentifier:link];

[self presentMoviePlayerViewControllerAnimated:videoPlayerViewController];
}

At the moment its opening and closing the XCDYouTubeVideoPlayer right a way. What am i doing wrong?

回答1:

I not understand why, but for me , in iOS8 the line

  XCDYouTubeVideoPlayerViewController.m at #79

was calling the method :

 - (id) initWithContentURL:(NSURL *)contentURL
 {
      @throw [NSException exceptionWithName:NSGenericException reason:@"Use the   
        `   initWithVideoIdentifier:` method instead." userInfo:nil];
 }

I just comment it and works!



回答2:

XCDYouTubeVideoPlayer library build the youtube "streaming link", by appending the url with the signature provided. It seems that the "url" now has the signature along with it and the "sig" key comes null, which thereby negates the if statement in the function

(NSURL *) videoURLWithData:(NSData *)data error:(NSError * __autoreleasing *)error

Goto file

XCDYouTubeVideoPlayerViewController.m at #248

you will see a for-loop

for (NSString *streamQuery in streamQueries)
{
   NSDictionary *stream = DictionaryWithQueryString(streamQuery, queryEncoding);
   NSString *type = stream[@"type"];
   NSString *urlString = stream[@"url"];
   NSString *signature = stream[@"sig"];
   if (urlString && signature && [AVURLAsset isPlayableExtendedMIMEType:type])
   {
     NSURL *streamURL = [NSURL URLWithString:[NSString        
                                   stringWithFormat:@"%@&signature=%@", 
                                   urlString, 
                                   signature]];
     streamURLs[@([stream[@"itag"] integerValue])] = streamURL;
   }

change it to this (remove the signature variable from if statement and modify the URLWithString)

for (NSString *streamQuery in streamQueries)
{
   NSDictionary *stream = DictionaryWithQueryString(streamQuery, queryEncoding);
   NSString *type = stream[@"type"];
   NSString *urlString = stream[@"url"];
   if (urlString &&  [AVURLAsset isPlayableExtendedMIMEType:type])
   {
     NSURL *streamURL = [NSURL URLWithString:urlString];
     streamURLs[@([stream[@"itag"] integerValue])] = streamURL;
   }