ios多点连接通过wifi缓慢传输图像
我有一个应用程序,我正在使用multipeer连接框架在多台设备之间传输图像。我遇到的问题是,正在传输的图像速度很慢。我想说,一个500kb的图像需要大约2秒钟才能发送给对等方 下面是我的应用程序架构 我有多个设备通过wifi相互连接,没有任何路由器。请注意,这些设备未连接到任何外部网络。我只打开wifi,不将其连接到任何网络。我不知道为什么,但我也必须在所有设备上启动蓝牙,以便作为服务器并搜索其他对等连接的设备能够发现这些设备。当我从服务器设备向对等方发送图像时,图像传输非常缓慢。我认为图像应该通过wifi通道传输,我认为传输速度应该是5 MB/秒。我得到的是2秒内500 KB。请检查我用于多电话连接的代码 发送图像代码ios多点连接通过wifi缓慢传输图像,ios,ios7,data-transfer,multipeer-connectivity,Ios,Ios7,Data Transfer,Multipeer Connectivity,我有一个应用程序,我正在使用multipeer连接框架在多台设备之间传输图像。我遇到的问题是,正在传输的图像速度很慢。我想说,一个500kb的图像需要大约2秒钟才能发送给对等方 下面是我的应用程序架构 我有多个设备通过wifi相互连接,没有任何路由器。请注意,这些设备未连接到任何外部网络。我只打开wifi,不将其连接到任何网络。我不知道为什么,但我也必须在所有设备上启动蓝牙,以便作为服务器并搜索其他对等连接的设备能够发现这些设备。当我从服务器设备向对等方发送图像时,图像传输非常缓慢。我认为图像应
我已尝试使用消息和资源类型发送图像。资源速度比消息数据慢。在多用户连接中,蓝牙和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)")
}
}