gpt4 book ai didi

iphone - 在 Bump Api 发送图像方面需要一些帮助

转载 作者:可可西里 更新时间:2023-11-01 03:18:55 26 4
gpt4 key购买 nike

我需要一些帮助。我想通过 Bump 将 Jpg 或 PNG 图像从一部 iPhone 传输到另一部 iPhone。我遇到了根本不发送图像的成功和失败。

下面是一个 NSObject 文件,当用户从 UIimagepicker 选择图像时将调用该文件。

接收方不会发送任何数据,只会接收。

请帮我看看代码并给我任何意见或观点。

感谢并感谢您的协助。

- (id) init{
if(self = [super init]){
bumpObject = [BumpAPI sharedInstance];
NSError *error;
NSURL *fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"sound_bump_tap" ofType:@"aif"]];
bumpsound = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error];
[bumpsound prepareToPlay];
}
return self;
}

-(void) configBump
{

[bumpObject configAPIKey:@"My API Key"]; //put your api key here. Get an api key from http://bu.mp
[bumpObject configDelegate:self];
[bumpObject configParentView:self.bumpShare.view];
[bumpObject configActionMessage:@"Bump with your friend to start."];
}

- (void) startBump{
[self configBump];
[bumpObject requestSession];
}

- (void) stopBump{
[bumpObject endSession];
}

#pragma mark -
#pragma mark Private Methods

// for Debug -- prints contents of NSDictionary
-(void)printDict:(NSDictionary *)ddict {
NSLog(@"---printing Dictionary---");
NSArray *keys = [ddict allKeys];
for (id key in keys) {
NSLog(@" key = %@ value = %@",key,[ddict objectForKey:key]);
}
}

#pragma mark -
#pragma mark Public Methods
- (void) sendDetails:(UIImage *)selectedImage
{
[bumpShare showHUD];
//Now we need to package our message dictionary up into an NSData object so we can send it up to Bump.
//We'll do that with with an NSKeyedArchiver.
NSLog(@"Here Got called!!!!!!! %@",self.selectedImg);




// NSData* wholeImageData = [NSKeyedArchiver archivedDataWithRootObject:userChunk];
// int dataLength = [wholeImageData length];
// int maxChunkSize = 262144;
// int chunkCount = dataLength / maxChunkSize;
//
// if (chunkCount == 1) {
// //Data is 254kb or under
// NSData *moveChunk = [NSKeyedArchiver
// archivedDataWithRootObject:self.selectedImg];
// [bumpObject sendData:moveChunk];
// }
// else if (dataLength > maxChunkSize)
// {
// NSLog(@"Sending data: %d bytes in %d chunks", dataLength, chunkCount);
// for (int i = 1; i <= chunkCount; i++)
// {
// int ithChunkLength = 0;
// if ((maxChunkSize * i) > dataLength)
// {
// ithChunkLength = dataLength-(maxChunkSize*(i-1));
// }
// else {
// ithChunkLength = 262144;
// }
// NSData *moveChunk = [wholeImageData subdataWithRange:NSMakeRange(maxChunkSize*(i-1),ithChunkLength)];
// //[[NSKeyedArchiver archivedDataWithRootObject:self.selectedImg] subdataWithRange:NSMakeRange(262144*(i-1),maxr)];
// NSLog(@"Sending Chunk: %d, %d bytes",i,[moveChunk length]);
// [bumpObject sendData:moveChunk];
// }
// }

NSData *photoData = UIImageJPEGRepresentation(self.selectedImg, 0.9);
//NSData *userChunk = [NSKeyedArchiver archivedDataWithRootObject:self.selectedImg];
if([[NSKeyedArchiver archivedDataWithRootObject:photoData]length] > 262144)
{
int dlen = [[NSKeyedArchiver
archivedDataWithRootObject:photoData] length];
NSLog(@"Sending data: %i bytes in %d chunks",dlen,(int)ceil(((float)dlen / 262144.0f)));

for (int i=1; i <= (int)ceil(((float)dlen / 262144.0f)); i++) {
int maxr=0;
if ((262144*i) > dlen) {
maxr = dlen-(262144*(i-1));
} else {
maxr = 262144;
}
NSData *moveChunk = [[NSKeyedArchiver archivedDataWithRootObject:photoData] subdataWithRange:NSMakeRange(262144*(i-1),maxr)];

NSLog(@"Sending Chunk: %d, %d bytes",i,[moveChunk length]);
[bumpObject sendData:moveChunk];
}
}
else
{
//Data is 254kb or under
NSData *moveChunk = [NSKeyedArchiver
archivedDataWithRootObject:photoData];
[bumpObject sendData:moveChunk];
}


//[self printDict:moveDict];
//[userDict release];

//Calling send will have bump send the data up to the other user's mailbox.
//The other user will get a bumpDataReceived: callback with an identical NSData* chunk shortly.
//packetsAttempted++;
//[bumpObject sendData:userChunk];
}

- (void) startConnection:(UIImage *)selectedImage
{
//set local and remote user names
//[bumpShare setLocalUserName:[[bumpObject me] userName]];
//[bumpShare setRemoteUserName:[[bumpObject otherBumper] userName]];
//[bumpShare updateUserNames];
[self sendDetails:selectedImage];
}

#pragma mark Utility
-(void) quickAlert:(NSString *)titleText msgText:(NSString *)msgText{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:titleText message:msgText delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
//[alert release];
}

- (void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {

NSString *message;
NSString *title;

if (!error) {
title = NSLocalizedString(@"Save Success", @"");
message = NSLocalizedString(@"Save Success Message", @"");
HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Checkmark.png"]];
HUD.mode = MBProgressHUDModeCustomView;
HUD.labelText = @"Photo Saved To Photo Album";
[HUD hide:YES afterDelay:1.5];
//saved =1;
//self.imageOverlay.alpha =0.7;
[bumpShare hideHUD];
[self performSelector:@selector(saveSuccess) withObject:nil afterDelay:0.5];



} else
{
title = NSLocalizedString(@"Save Failed", @"");
message = [error description];

HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"sad_face.png"]];
HUD.mode = MBProgressHUDModeCustomView;
HUD.labelText = @"Error Saving to Photo Album";
[HUD hide:YES afterDelay:3];
}
}

-(void)saveSuccess
{
[bumpShare pushToSuccess];
}

#pragma mark -
#pragma mark BumpAPIDelegate methods

- (void) bumpDataReceived:(NSData *)chunk
{
//The chunk was packaged by the other user using an NSKeyedArchiver, so we unpackage it here with our NSKeyedUnArchiver
NSLog(@"chunk length %i",[chunk length]);
//NSData *receivedData = [NSKeyedUnarchiver unarchiveObjectWithData:chunk];
if ([chunk length] != 262144)
{
NSLog(@"called length %i",[receivedData length]);

if (!self.receivedData) {
self.receivedData = [NSMutableData dataWithCapacity:[chunk length]];
[self.receivedData setData:chunk];
}
else
{
[self.receivedData appendData:chunk];
}
[self stopBump];
//UIImage* receivedImage = [NSKeyedUnarchiver unarchiveObjectWithData:self.receivedData];
//UIImageWriteToSavedPhotosAlbum(receivedImage, self, @selector(imageSavedToPhotosAlbum: didFinishSavingWithError: contextInfo:), nil);

}
else if([chunk length] == 262144)
{ NSLog(@"called length %i",[receivedData length]);
//NSLog(@"calledin length %i",[chunk length]);

if (!self.receivedData) {
self.receivedData = [NSMutableData dataWithCapacity:[chunk length]];
[self.receivedData setData:chunk];
}
else
{
[self.receivedData appendData:chunk];
}
}
}

- (void) bumpSessionStartedWith:(Bumper*)otherBumper{
[self startConnection:nil];
}

- (void) bumpSessionEnded:(BumpSessionEndReason)reason {
NSString *alertText;
switch (reason) {
case END_LOST_NET:
alertText = @"Connection to Bump server was lost.";
break;
case END_OTHER_USER_LOST:
alertText = @"Connection to other user was lost.";
break;
case END_USER_QUIT:
alertText = @"You have been disconnected.";
break;
default:
alertText = @"You have been disconnected.";
break;
}

// if(reason != END_USER_QUIT){
// //if the local user initiated the quit,restarting the app is already being handled
// //other wise we'll restart here
// UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Disconnected" message:alertText delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
// [alert show];
// //[alert release];
// }
NSLog(@"Sending Chun!!!!!!!!!");
NSLog(@"self.received data %i",[self.receivedData length]);

if ([self.receivedData length]>200)
{
NSData *imgData= [NSKeyedUnarchiver unarchiveObjectWithData:self.receivedData];
UIImage* receivedImage = [UIImage imageWithData:imgData];//[NSKeyedUnarchiver unarchiveObjectWithData:self.receivedData];
UIImageWriteToSavedPhotosAlbum(receivedImage, self, @selector(imageSavedToPhotosAlbum: didFinishSavingWithError: contextInfo:), nil);
}
else
{
[bumpShare hideHUD];
[self performSelector:@selector(saveSuccess) withObject:nil afterDelay:1.5];
}


}

- (void) bumpSessionFailedToStart:(BumpSessionStartFailedReason)reason {

NSString *alertText;
switch (reason) {
case FAIL_NETWORK_UNAVAILABLE:
alertText = @"Please check your network settings and try again.";
break;
case FAIL_INVALID_AUTHORIZATION:
//the user should never see this, since we'll pass in the correct API auth strings.
//just for debug.
alertText = @"Failed to connect to the Bump service. Auth error.";
break;
default:
alertText = @"Failed to connect to the Bump service.";
break;
}

if(reason != FAIL_USER_CANCELED){
//if the user canceled they know it and they don't need a popup.
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Connection Failed" message:alertText delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
//[alert release];
}
}

最佳答案

我发现通过 Bump 传输图像或任何超过 256k 限制的数据量非常慢。您必须将有效载荷分解成 block ,然后在发送和接收每个 block 之间存在延迟。如果您有自己的 Web 服务器,我会这样做:

  1. 让应用通过某种网络服务将图像上传到您的网络服务器
  2. 让网络服务返回上传文件的 ID 或路径
  3. BUMP THAT INFORMATION OVER 最多只有几 k
  4. 让应用程序的接收器部分从您的网络服务器获取图像

您会惊讶于您的传输速度有多快!

关于iphone - 在 Bump Api 发送图像方面需要一些帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10223460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com