2010-01-12 5 views
0

Objective C에서 MJPEG 뷰어를 만들려고하는데 문제가 많습니다.MJPEG 뷰어 만들기 Iphone

먼저, 호스트에 연결할 수 있도록 AsyncSocket (http://code.google.com/p/cocoaasyncsocket/)을 사용하고 있습니다.

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{ 
NSLog(@"Accepted client %@:%hu", host, port); 


NSString *urlString = [NSString stringWithFormat:@"http://kamera5.vfp.slu.se/axis-cgi/mjpg/video.cgi"]; 
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"GET"]; 

    //set headers 
NSString *_host = [NSString stringWithFormat:host]; 
[request addValue:_host forHTTPHeaderField: @"Host"]; 

NSString *KeepAlive = [NSString stringWithFormat:@"300"]; 
[request addValue:KeepAlive forHTTPHeaderField: @"Keep-Alive"]; 

NSString *connection = [NSString stringWithFormat:@"keep-alive"]; 
[request addValue:connection forHTTPHeaderField: @"Connection"]; 


//get response 
NSHTTPURLResponse* urlResponse = nil; 
NSError *error = [[NSError alloc] init]; 
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error]; 

NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 

NSLog(@"Response Code: %d", [urlResponse statusCode]); 
if ([urlResponse statusCode] >= 200 && [urlResponse statusCode] < 300) { 
    NSLog(@"Response: %@", result); 
      //here you get the response 
} 

}

이것은 MJPEG 스트림 호출하지만 그것을 얻기 위해 호출하지 않습니다 여기에

내가 지금까지 didConnectToHost 방법에서 다음
NSLog(@"Ready"); 
asyncSocket = [[AsyncSocket alloc] initWithDelegate:self]; 
//http://kamera5.vfp.slu.se/axis-cgi/mjpg/video.cgi 
NSError *err = nil; 
if(![asyncSocket connectToHost:@"kamera5.vfp.slu.se" onPort:80 error:&err]) 
{ 
    NSLog(@"Error: %@", err); 
} 

가지고 무엇을 더 많은 데이터. 내가하고있는 일은 데이터의 첫 번째 덩어리를 로딩 한 다음 연결을 끊는 것이라고 생각합니다.

내가 완전히 잘못하고있는 것입니까, 아니면이 터널 끝에 빛이 있습니까?

감사합니다.

+0

누구든지 도움을 줄 수 있나요? 제발 ...... – Tony

답변

1

UiWebView에서 mjpeg를로드하면 기본적으로 재생할 수 있습니다.

이 같은 일을해야, 당신은 "myWebView"라는있는 UIWebView를 가정 :

NSURLRequest* urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://kamera5.vfp.slu.se/axis-cgi/mjpg/video.cgi"]]; 
[myWebView loadRequest:urlRequest]; 

나는 희망이 도움이!

+0

나는 내가 할 수 있다고 생각했다. 방금 더 좋은 방법이 있다고 생각했습니다. 감사! – Tony

+0

IMO 가장 간단한 방법으로 작업을 완료 할 수있을 때 인생을 복잡하게 만드는 용도는 없습니다. ;-) – Skrud

0

그렇지 않으면 UIWebView와 통신 할 수있는 좋은 방법이 없으므로 JavaScript로 작성하는 것이 가장 좋습니다.

1

주요 문제는 웹킷이 데이터를 relase하지 않는다는 것입니다. 잠시 후 데이터가 폭발합니다.

+0

그 증거가 있습니까? 5 개의 mjpeg로 테스트를했고 메모리 사용량이 30 분 내에 증가하지 않았습니다. – thedanielhanke