2015-05-27 4 views
0

У меня есть требование потоковой передачи с сервера и отображения потокового содержимого на экране ... Потоковая обработка работает нормально с использованием NSStream и NSInputStream и NSOutputStream. Как я могу отобразить его на экран?Получение кадров через поток и отображение на экране

поток используется как выглядит @ "http://191.168.143.41:1212/;

  if(stream == inputStream) { 

      uint8_t buf[1024]; 
      unsigned int len = 0; 

      len = [inputStream read:buf maxLength:1024]; 

      if(len > 0) { 
       NSMutableData* datas=[[NSMutableData alloc] initWithLength:0]; 

       [datas appendBytes: (const void *)buf length:len]; 

       NSString *s = [[NSString alloc] initWithData:datas encoding:NSASCIIStringEncoding]; 

       [self readIn:s]; 
       NSLog(@"ss%@",s); 
       [self loadMovie:s]; //method for movie player 
      } 

Я попытался показать это в MoviePlayer, как показано ниже ..

-(void_loadMovie:(NSString*)moviePrefix 
    { 
    NSString *path = [NSString stringWithFormat:@"%@.mjpg", moviePrefix]; 

    NSURL *url = [NSURL fileURLWithPath:path]; 
    if (url) { 
     _moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url]; 

     _moviePlayer.view.frame = CGRectMake(0, 70, 600, 450); 
     _moviePlayer.controlStyle = MPMovieControlStyleNone; 
     _moviePlayer.scalingMode = MPMovieScalingModeNone; 
     [dic setObject:__moviePlayer forKey:path]; 
    } 

} 
[_moviePlayer prepareToPlay]; 
[self.view addSubview: _moviePlayer.view]; 
[self.view bringSubviewToFront:_moviePlayer.view]; 
[self.view addSubview: _moviePlayer.view]; 
[_moviePlayer play]; 
} 

ли NSString * путь = [NSString stringWithFormat: @" % @. mjpg ", moviePrefix], правильный путь

Это отображает черный экран. Что не так? Если этот способ неправильный, есть ли другой способ Я могу отображать эти рамки? Может кто-нибудь помочь мне решить эту проблему ...

+0

'NSString * путь = [NSString stringWithFormat: stringWithFormat: @, moviePrefix, @ "кино" "MJPEG."];' Почему вы используете 'stringWithFormat:' два раза –

+0

@OmerWaqasKhan Извините, что это была опечатка. – Prarthana

ответ

0

Вы не добавляете moviePrefix в строку

NSString *path = [NSString stringWithFormat:@".mjpg", moviePrefix, @"movie"]; 

Изменить это

NSString *path = [NSString stringWithFormat:@"%@.mjpg", moviePrefix, @"movie"]; 
+1

Разве вы не получаете предупреждения относительно этого? –

+0

«@» фильм «' в конце все еще не используется. Может быть, '@"% @% @. Mjpg "'? –

+0

И что это за фильм '@"? В чем его цель? Извините, я не могу понять. –

0

MJPEG только JPEG послал один за другим. Я работал несколько лет назад на этом. В версии iOS (iOS5?) Ее легко читали с UIWebView, но обновление iOS все это сломало. Это сломало всю мою текущую работу. Может быть, UIWebView может снова сделать трюк (исправить).

В любом случае, так как это просто куча JPEG, вы можете просто прочитать JPG (обнаружить начало/конец JPG-файла), создать изображение в формате JPG и показать его в UIImageView.

работа вокруг (не проверено), но вы должны получить всю идею:

// Свойства

@property (nonatomic, strong) NSMutableData *data; 
@property (nonatomic, weak) IBOutlet UIImageView *streamImageView; 

// Инициализировать где

_data = [[NSMutableData alloc] init]; 

// В потоке делегат:

//Start JPG: FFD8 — End JPG: FFD9 
UInt8 startJPEGBytes[2]; 
startJPEGBytes[0] = 0xFF; 
startJPEGBytes[1] = 0xD8; 
NSData *startData = [NSData dataWithBytes:&startJPEGBytes length:2]; 

UInt8 endJPEGBytes[2]; 
endJPEGBytes[0] = 0xFF; 
endJPEGBytes[0] = 0xD9; 
NSData *endData = [NSData dataWithBytes:&endJPEGBytes length:2]; 

[_data appendBytes: (const void *)buf length:len]; 
NSRange startRange = [_data rangeOfData:startData options:0 range:NSMakeRange(0, [_data length])]; 
if (startRange.location != NSNotFound) //We found the start of a JPEG 
{ 
    NSRange endRange = [_data rangeOfData:endData options:0 range:NSMakeRange(startRange.location, [_data length]-startRange.location)]; 
    if (endRange.location != NSNotFound) //We found the end of a JPEG 
    { 
     NSRange imageRange = NSMakeRange(startRange.location, endRange.location+endRange.length-startRange.location); 
     NSData *imageData = [_data subDataWithRange: imageRange]; 
     streamImage = [UIImage imageWithData:imageData]; 
     [_streamImageView setImage:streamImage]; 
     [_data replaceBytesInRange:NSMakeRange(0, imageRange.location+imageRange.length withBytes:NULL length:0]; //We remove the start till the end of JPEG frame. Start at 0, since there could be garbage at the start. 
    } 

} 

 Смежные вопросы

  • Нет связанных вопросов^_^