ios多点连接通过wifi缓慢传输图像

ios多点连接通过wifi缓慢传输图像,ios,ios7,data-transfer,multipeer-connectivity,Ios,Ios7,Data Transfer,Multipeer Connectivity,我有一个应用程序,我正在使用multipeer连接框架在多台设备之间传输图像。我遇到的问题是,正在传输的图像速度很慢。我想说,一个500kb的图像需要大约2秒钟才能发送给对等方 下面是我的应用程序架构 我有多个设备通过wifi相互连接,没有任何路由器。请注意,这些设备未连接到任何外部网络。我只打开wifi,不将其连接到任何网络。我不知道为什么,但我也必须在所有设备上启动蓝牙,以便作为服务器并搜索其他对等连接的设备能够发现这些设备。当我从服务器设备向对等方发送图像时,图像传输非常缓慢。我认为图像应

我有一个应用程序,我正在使用multipeer连接框架在多台设备之间传输图像。我遇到的问题是,正在传输的图像速度很慢。我想说,一个500kb的图像需要大约2秒钟才能发送给对等方

下面是我的应用程序架构

我有多个设备通过wifi相互连接,没有任何路由器。请注意,这些设备未连接到任何外部网络。我只打开wifi,不将其连接到任何网络。我不知道为什么,但我也必须在所有设备上启动蓝牙,以便作为服务器并搜索其他对等连接的设备能够发现这些设备。当我从服务器设备向对等方发送图像时,图像传输非常缓慢。我认为图像应该通过wifi通道传输,我认为传输速度应该是5 MB/秒。我得到的是2秒内500 KB。请检查我用于多电话连接的代码

发送图像代码


我已尝试使用消息和资源类型发送图像。资源速度比消息数据慢。

在多用户连接中,蓝牙和WiFi之间都会进行传输。您无法保证任何数据传输方法,因此,如果一台设备位于WiFi网络上,传输方法将默认为蓝牙慢速传输。

iOS 8上的WiFi似乎要慢得多

今天我实现了两个可以一起通信的应用程序。一个通过多个EER连接会话流NSOutputStream/NSInputStream将核心运动数据发送给另一个

在任一设备上禁用Wifi后,它将通过蓝牙飞行。频率为每秒50个来自核心运动硬件的回转运动对象,连接的设备每秒接收50个值

在Wifi上速度非常慢,可能是4-5倍?相同的代码。不知道为什么。它默认为Wifi,所以如果两台设备都启用了Wifi,它似乎会先尝试


明天我将安装iOS 9 beta版,看看他们是否解决了这个问题。

这是一个老问题,但由于我刚刚处理了同样的问题,我认为我的经验可能会帮助其他人

在我的例子中,使用流而不是sendData方法发送图像的速度大约是前者的两倍。仍然注意到相当快,因为我宁愿,但这是一个相当大的收益

发送函数

接收函数


谢谢你的评论。我也有同样的怀疑。但是你认为有没有办法确保数据始终通过wifi传输。我打开了两台设备的wifi,但没有连接到任何网络或路由器。Multipeer不适用于大数据传输,而是适用于轻度到低延迟的通信。我有幸在本地网络中的每台设备上关闭和返回wifi。看来您可以通过adhoc wifi网络返回传输。对于图像,最好使用“sendData”或“SendResourceAtull”?每篇文章中,我一直在使用SendResourceAtull。我也经历了惊人的缓慢图像发送和接收。
  -(void)sendImage
    {
        UIGraphicsBeginImageContextWithOptions(_imgSize, NO, 0.0);
        [fullImage drawInRect:CGRectMake(0, 0, _imgSize.width, _imgSize.height)];
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        NSData *sendData = UIImageJPEGRepresentation(fullImage, 0.2);
        NSLog(@"uiimage IMAGE data:- %lu",(unsigned long)sendData.length);
        NSArray *allPeers = appDelegate.mcManager.mySession.connectedPeers;

        NSString *strDeviceInfo=appDelegate.mcManager.mySession.description;
        NSLog(@"%@",strDeviceInfo);
        NSError *error;

        if(allPeers.count<=0)
        {
            [self.imgView setImage:fullImage];
        }
        else
        {
            [appDelegate.mcManager.mySession sendData:sendData toPeers:allPeers withMode:MCSessionSendDataReliable error:&error];
            if (error)
            {
                NSLog(@"%@", [error localizedDescription]);
            }
        }

       //imgView.layer.contentsRect=_myFrame;
        imgView.image=fullImage;
        imgView.backgroundColor=[UIColor darkGrayColor];
        imgView.contentMode = UIViewContentModeScaleAspectFit;
    }
-(void)didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID
{
    NSDictionary *dict = @{@"data": data,@"peerID": peerID};
    if([strPerform isEqualToString:@"orientation"])
    {
        [[NSNotificationCenter defaultCenter] postNotificationName:@"MCDidReceiveContentSize" object:data userInfo:dict];
        [clientViewObj receivedContentSize:data];
    }
    else if ([strPerform isEqualToString:@"image"])
    {
        dispatch_async(dispatch_get_main_queue(), ^(void)
                       {
                           UIImage *image = [UIImage imageWithData:data];

                           clientViewObj.imgView.image = image;
        //[clientViewObj ReceivedData:data];
        [[NSNotificationCenter defaultCenter] postNotificationName:@"MCDidReceiveDataNotification" object:data userInfo:dict];
                       });
    }
    else if ([strPerform isEqualToString:@"pinch"])
    {
        [[NSNotificationCenter defaultCenter] postNotificationName:@"MCDidReceivePinch" object:data userInfo:dict];
        [clientViewObj pinched:data];
    }
    else if ([strPerform isEqualToString:@"change"])
    {
        NSDictionary *dict = @{@"data": data,@"peerID": peerID};
        [[NSNotificationCenter defaultCenter] postNotificationName:@"MCDidChangeProcess" object:data userInfo:dict];
    }
    else if([strPerform isEqualToString:@"client"])
    {
        [[NSNotificationCenter defaultCenter] postNotificationName:@"MCDidChangeServer" object:data userInfo:dict];
        //[_orientationViewObj receiveFromClient];
    }
    else if([strPerform isEqualToString:@"up"])
    {
        [[NSNotificationCenter defaultCenter] postNotificationName:@"MCDidRotateImageUp" object:data userInfo:dict];
    }
    else if([strPerform isEqualToString:@"down"])
    {
        [[NSNotificationCenter defaultCenter] postNotificationName:@"MCDidRotateImageDown" object:data userInfo:dict];
    }
}
func sendImage(imageURL: URL) {
    DispatchQueue.main.async {
        do {
            try self.mcSession.startStream(withName: "Image", toPeer: self.mcSession.connectedPeers[0])
            self.mcSession.sendResource(at: imageURL, withName: fileName, toPeer: self.mcSession.connectedPeers[0], withCompletionHandler: nil)
        }
        catch let error {
            print("error: \(error)")
        }
    }
}
func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL?, withError error: Error?) {
    do {
        let localData = try Data(contentsOf: localURL!)
        let image = UIImage(data: localData)
        DispatchQueue.main.async {
            // DispatchQueue.main.async necessary because modifying UI
            self.imageView.image = image
        }
    }
    catch let error {
        print("error \(error)")
    }
}