2017-01-12 13 views
0

Je suis nouveau au développement iOS,Impossible de charger flux vidéo dans

Je veux diffuser de la vidéo à partir WebAPI, les fichiers sont transmis en continu à partir de notre serveur principal qui requiert une authentification. Il est basé sur une clé authentifiée définie dans l'en-tête HTTP d'autorisation.

J'ai essayé avec AVPlayer n'a pas eu ma sortie. Après avoir fait quelques recherches, je l'ai trouvé customProtocol sera plus utile le faire donc je l'ai utilisé customProtocol et essayé avec ce code mais le customProtocol n'est pas appelé customProtocol.h, customProtocol.m

[NSURLProtocol registerClass:[MyCustomProtocol class]]; 

    NSString *theURLString = @"customProtocol://abcd.com/download"; 
    player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:theURLString]]; 
    [self.view addSubview:player.view]; 
    player.view.frame = self.view.frame; 

    [player play]; 

Quelqu'un peut-il me aider? où je fais une erreur?

Merci d'avance!

Ceci est mon code customProtocol:

@implementation MyCustomProtocol 

+ (BOOL) canInitWithRequest:(NSURLRequest *)request { 
    NSURL* theURL = request.URL; 
    NSString* scheme = theURL.scheme; 
    if([scheme isEqualToString:@"customProtocol"]) { 
     return YES; 
    } 
    return NO; 
} 

// You could modify the request here, but I'm doing my legwork in startLoading 
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request { 
    return request; 
} 

// I'm not doing any custom cache work 
+ (BOOL) requestIsCacheEquivalent:(NSURLRequest *)a toRequest:(NSURLRequest *)b { 
    return [super requestIsCacheEquivalent:a toRequest:b]; 
} 

// This is where I inject my header 
// I take the handled request, add a header, and turn it back into http 
// Then I fire it off 
- (void) startLoading { 
    NSMutableURLRequest* mutableRequest = [self.request mutableCopy]; 
    Constants *constants = [Constants sharedInstance]; 
    [mutableRequest setValue:[NSString stringWithFormat:@"Bearer %@",constants.access_token] forHTTPHeaderField:@"Authorization"]; 

    NSURL* newUrl = [[NSURL alloc] initWithScheme:@"http" host:[mutableRequest.URL host] path:[mutableRequest.URL path]]; 
    [mutableRequest setURL:newUrl]; 

    self.connection = [NSURLConnection connectionWithRequest:mutableRequest delegate:self]; 
} 

- (void) stopLoading { 
    [self.connection cancel]; 
} 

// Below are boilerplate delegate implementations 
// They are responsible for letting our client (the MPMovePlayerController) what happened 

- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    [self.client URLProtocol:self didFailWithError:error]; 
    self.connection = nil; 
} 

- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [self.client URLProtocol:self didLoadData:data]; 
} 

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    [self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageAllowed]; 
} 

- (void) connectionDidFinishLoading:(NSURLConnection *)connection { 
    [self.client URLProtocolDidFinishLoading:self]; 
    self.connection = nil; 
} 

Répondre

1

si vous avez passé en-tête d'authentification avec l'URL, vous pouvez utiliser ci-dessous le code

NSMutableDictionary * headers = [NSMutableDictionary dictionary]; 
[headers setObject:@"Your UA" forKey:@"User-Agent"]; 
AVURLAsset * asset = [AVURLAsset URLAssetWithURL:URL options:@{@"AVURLAssetHTTPHeaderFieldsKey" : headers}]; 
AVPlayerItem * item = [AVPlayerItem playerItemWithAsset:asset]; 
self.player = [[AVPlayer alloc] initWithPlayerItem:item]; 

il peut fonctionner ... essayer

+0

j'ai essayé que déjà pas de chance –

1
MPMoviePlayerViewController * movieController = [[MPMoviePlayerViewController alloc] initWithContentURL:url]; 

movieController.moviePlayer.movieSourceType = MPMovieSourceTypeStreaming; 
[self presentMoviePlayerViewControllerAnimated:movieController]; 
[movieController.moviePlayer play]; 
+0

bonjour lalit merci pour votre réponse aimable mais il ne fonctionne toujours pas le joueur vient et rejette rapidement –