2010-01-12 105 views
0

我想在目标C中创建一个MJPEG查看器,但我遇到了一堆问题。创建一个MJPEG查看器iphone

首先,我使用AsyncSocket(http://code.google.com/p/cocoaasyncsocket/)让我连接到主机。

这里是我到目前为止

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); 
} 

然后在didConnectToHost方法:

- (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流,但它不会调用它来获得更多数据。我认为它所做的只是加载第一部分数据,然后断开连接。

我这样做完全错误还是在隧道尽头有光?

谢谢!

+0

任何人都可以帮忙吗?请...... – Tony 2010-02-08 16:37:47

回答

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 2010-02-15 21:24:38

+0

当最简单的方式可能完成工作时,IMO没有任何使你的生活复杂化的用处。 ;-) – Skrud 2010-02-16 00:37:37

0

这可能是最好的JavaScript处理,因为没有好的方法与UIWebView进行通信。

1

主要的问题是webkit从来没有放弃数据,所以过了一段时间它就爆炸了。

+0

有什么证明呢?用5 mjpegs做了测试,内存使用量在30分钟内没有增长 – thedanielhanke 2011-05-11 15:08:36