【发布时间】:2014-10-21 10:27:55
【问题描述】:
我正在开发一个应用程序,我必须在其中显示来自 ip cam 的视频流,我已经使用了 SPMJPEG 流。这是我的代码 sn-p--
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
@try
{
[_receivedData appendData:data];
NSRange beginRange = [_receivedData rangeOfData:_beginMarkerData
options:0
range:NSMakeRange(0, _receivedData.length)];
NSRange endRange = [_receivedData rangeOfData:_endMarkerData
options:0
range:NSMakeRange(beginRange.location+beginRange.length, _receivedData.length - (beginRange.location+beginRange.length))];
if(endRange.location != NSNotFound)
{
long endLocation = endRange.location + endRange.length;
if (_receivedData.length >= endLocation)
{
//Getting data in imageData in both iOS 7 and iOS 8
NSData *imageData = [_receivedData subdataWithRange:NSMakeRange(beginRange.location, endLocation-beginRange.location)];
[_receivedData replaceBytesInRange:NSMakeRange(0, endLocation) withBytes:NULL length:0];
UIImage *receivedImage = nil;
//Getting data in receivedImage in iOS 7 but not in iOS 8, returning nil image in iOS 8
receivedImage = [UIImage imageWithData:imageData];
if (receivedImage)
{
static double movieSize = 0;
movieSize += imageData.length;
NSLog(@"Frame size in kb: %f, since begining: %f", imageData.length / 1024.0, movieSize / 1024.0);
double delay = (!lastFrameDate) ? 0 : -[lastFrameDate timeIntervalSinceNow];
lastFrameDate = [NSDate date];
self.frame = [SPMJPEGFrame frameWithImage:receivedImage timeDelay:delay];
}
}
}
}
@catch (NSException *e)
{
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Warnning!" message:[e description] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alert show];
return;
}
}
它在 iOS 7 中运行良好,但在 iOS 8 中根本无法运行,我收到错误“ImageIO: JPEG Corrupt JPEG data: 2 extraneous bytes before marker 0xdb”但在 iOS 7 中这不是问题但是正如我从谷歌搜索中得知的那样,iOS 8 不允许在 UIImageView 中显示损坏的 JPEG 图像。(我正在使用 UIImageView 来显示流 url)请帮助我解决同样的问题,提前致谢。
【问题讨论】: