标签: multipeer-connectivity

iOS Multipeer连接框架invitationHandler似乎不接受?

我第一次使用mutlipeer连接框架,我想要编程(不是助手类)控制.

当我在两个单独的设备上运行我的代码时,一切都正常工作,直到'广告客户'收到委托回调为止:

浏览客户端的委托回调在发现广告商时被调用:

-(void)browser:(MCNearbyServiceBrowser *)browser foundPeer:(MCPeerID *)peerID withDiscoveryInfo:(NSDictionary *)info{
    [[[UIAlertView alloc] initWithTitle:@"Peer Found" message:peerID.displayName delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];

    _session = [[MCSession alloc] initWithPeer:_myPeerID];
    _session.delegate = self;

    //connect to the discovered peer.
    [_browser invitePeer:peerID toSession:_session withContext:nil timeout:30.0];
    [_browser stopBrowsingForPeers];
Run Code Online (Sandbox Code Playgroud)

}

然后在收到邀请时调用广告客户端的委托回调:

-(void)advertiser:(MCNearbyServiceAdvertiser *)advertiser didReceiveInvitationFromPeer:(MCPeerID *)peerID withContext:(NSData *)context invitationHandler:(void (^)(BOOL, MCSession *))invitationHandler{

    //when my code runs, everything looks correct here. 
    //eg. peerID is definitely my 'browser' client's display name etc.

    _session = [[MCSession alloc] initWithPeer:_myPeerID];
    _session.delegate = self;

    //using a simple …
Run Code Online (Sandbox Code Playgroud)

delegates objective-c ios multipeer-connectivity

9
推荐指数
1
解决办法
3119
查看次数

Swift MultipeerConnectivity无条件崩溃DateComponentsBridgeFromObjectiveC

我有一个可重复的崩溃,以EXC_BREAKPOINT结尾,如下图所示:

MultipeerConnectivity崩溃

重现崩溃的步骤:

  1. 连接两个设备
  2. 开始使用FUNC sendResource转印(在resourceURL:URL,withName资源名称:字符串,toPeer的peerID:MCPeerID,withCompletionHandler completionHandler:?((错误) - >空隙)=无) - >进展?
  3. 通过调用func disconnect()断开启动传输的设备

编辑:通过调用Progress.cancel()来重现崩溃的另一种方法步骤:

  1. 连接两个设备
  2. 开始传输并存储Progress对象let progress:Progress = session.sendResource(...)
  3. 对进度对象调用取消,导致其他设备崩溃progress.cancel()

我在线上的代码didFinishReceivingResourceWithName:

func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL, withError error: Error?) {
    // transfer to local URL
    MusicDownloadRequestor.sharedInstance.finishReceivingSongUploadAtLocalURL(tempUrl: localURL)
}
Run Code Online (Sandbox Code Playgroud)

看起来我的代码在堆栈跟踪中看起来不像...

* thread #25: tid = 0x806ec, 0x0000000100944af4 libswiftFoundation.dylib`static Foundation.DateComponents._unconditionallyBridgeFromObjectiveC (Swift.Optional<__ObjC.NSDateComponents>) -> Foundation.DateComponents with unmangled suffix "_merged" + 96, queue = 'com.apple.MCSession.callbackQueue', stop reason = EXC_BREAKPOINT (code=1, subcode=0x100944af4)
frame #0: 0x0000000100944af4 libswiftFoundation.dylib`static Foundation.DateComponents._unconditionallyBridgeFromObjectiveC …
Run Code Online (Sandbox Code Playgroud)

ios multipeer-connectivity swift

9
推荐指数
1
解决办法
1080
查看次数

接受邀请多重连接

我希望我没有通过发布这个问题来违反NDA.

我正在使用新的多路连接,使用蓝牙将一些文件发送到附近的设备.我已设法发送邀请,但我似乎没有得到如何显示UIAlertView,用户可以接受或拒绝邀请.现在,当用户发送时,文件会自动保存,并且没有接受/拒绝警​​报.

代码是:

- (void) advertiser:(MCNearbyServiceAdvertiser *)advertiser
didReceiveInvitationFromPeer:(MCPeerID *)peerID
               withContext:(NSData *)context
         invitationHandler:(void(^)(BOOL accept,
                                    MCSession *session))invitationHandler{
... save the data context
Run Code Online (Sandbox Code Playgroud)

但有警报:

- (void) advertiser:(MCNearbyServiceAdvertiser *)advertiser
didReceiveInvitationFromPeer:(MCPeerID *)peerID
                withContext:(NSData *)context
         invitationHandler:(void(^)(BOOL accept,
                                    MCSession *session))invitationHandler{


DevicePeer = [MCPeerID alloc];
DevicePeer = peerID;
ArrayInvitationHandler = [NSArray arrayWithObject:[invitationHandler copy]];

// ask the user
UIAlertView *alertView = [[UIAlertView alloc]
                          initWithTitle:@""
                          message:@""
                          delegate:self
                          cancelButtonTitle:@"NO"
                          otherButtonTitles:@"YES", nil];
[alertView show];
 alertView.tag = 2;
}
Run Code Online (Sandbox Code Playgroud)

和警报视图方法:

 - (void) alertView:(UIAlertView *)alertView
 clickedButtonAtIndex:(NSInteger)buttonIndex
{  
    // retrieve the invitationHandler
    // get user …
Run Code Online (Sandbox Code Playgroud)

ios multipeer-connectivity

8
推荐指数
1
解决办法
6849
查看次数

使用MCNearbyServiceBrowser时找不到广告商

我有一个MultipeerService类,用于启动广告和浏览会话.出于某种原因,我不确定为什么我无法看到任何广告客户.

MultipeerService.m

-(void) startAdvertising
{
    NSString *name = [[UIDevice currentDevice] name];

    MCPeerID *peerId = [[MCPeerID alloc] initWithDisplayName:name];
    self.session = [[MCSession alloc] initWithPeer:peerId];
    self.session.delegate = self;

    self.advertiser = [[MCNearbyServiceAdvertiser alloc] initWithPeer:peerId discoveryInfo:nil serviceType:kServiceType];
    self.advertiser.delegate = self;

    [self.advertiser startAdvertisingPeer];
}

-(void) startBrowsing
{
    NSString *name = [[UIDevice currentDevice] name];

    MCPeerID *peerId = [[MCPeerID alloc] initWithDisplayName:name];
    self.session = [[MCSession alloc] initWithPeer:peerId];
    self.session.delegate = self;

    self.browser = [[MCNearbyServiceBrowser alloc] initWithPeer:peerId serviceType:kServiceType];
    self.browser.delegate = self;

    [self.browser startBrowsingForPeers];
}
Run Code Online (Sandbox Code Playgroud)

我启动广告客户,如下所示:

 _multipeerConnectivityService = [[MultipeerConnectivityService alloc] init];
[_multipeerConnectivityService …
Run Code Online (Sandbox Code Playgroud)

ios multipeer-connectivity

8
推荐指数
1
解决办法
1381
查看次数

在iPhone之间传输数据的最佳选择

我想设置一个客户端 - 服务器架构,用于在多个iPhone之间传输数据.例如,'服务器'iPhone拥有动物的主列表.任意数量的客户端iPhone可以连接到服务器iPhone,然后读取和编辑列表.我试过的一些方法:

  • 多路连接 - 仅支持最多8个客户端.如果有办法解决这个问题,那正是我正在寻找的
  • GameKit - 我已经读过,当处理多个客户端时,蓝牙连接可能会出错
  • BLE - 蓝牙的特征值限制为512个八位字节.我假设动物列表在存档时可能会增长到大于最大特征值.
  • 套接字 - 我宁愿不必依赖外部服务器

我愿意接受'hacky'解决方案.我想把每只动物作为一个独立的特征进行广播,但这可能会减慢发现速度,我觉得它会引起一些其他的麻烦.任何帮助将不胜感激

iphone bluetooth gamekit ios multipeer-connectivity

8
推荐指数
1
解决办法
3566
查看次数

使用Apple音频文件流服务,iOS 7,无法解析M4A,AAC文件

我正在使用本教程Multipeer Connectivity Audio Stream To Multiple Peers和这个项目Github Repository,以便从NSInputStream流式传输音频,这是通过以下方式获得的:

-(void)session:didReceiveStream:withName:fromPeer:
Run Code Online (Sandbox Code Playgroud)

MCSession委托方法.

之后,这将打开一个新的音频文件流(TDAudioFileStreamer/Classes/AudioFileStream.m:39):

OSStatus err = AudioFileStreamOpen((__bridge void *)self, TDAudioFileStreamPropertyListener, TDAudioFileStreamPacketsListener, 0, &_audioFileStreamID); 
Run Code Online (Sandbox Code Playgroud)

然后从NSInputStream读取字节并尝试通过这种方式解析(TDAudioFileStreamer/Classes/AudioFileStream.m:98):

err = AudioFileStreamParseBytes(self.audioFileStreamID, length, data, kAudioFileStreamParseFlag_Discontinuity);
Run Code Online (Sandbox Code Playgroud)

要么:

err = AudioFileStreamParseBytes(self.audioFileStreamID, length, data, 0);
Run Code Online (Sandbox Code Playgroud)

取决于数据流.

最后,这个用解析后的数据填充AudioQueue Buffer以便播放(我猜--TDAudioFileStreamer/Classes/TDAudioQueueFiller.m).

这对于MP3格式文件非常有用,但在尝试解析字节时使用其他格式会出现"不支持的文件格式"错误.

Apple文档称音频文件流服务支持许多格式,它们列在此链接中:Apple Stream Services支持的格式,但对我来说只适用于MP3.

我也在尝试,当打开音频文件流传递关于这样的文件格式的提示并发送M4A或AAC文件时:

OSStatus err = AudioFileStreamOpen((__bridge void *)self, TDAudioFileStreamPropertyListener, TDAudioFileStreamPacketsListener, kAudioFileAAC_ADTSType, &_audioFileStreamID);
Run Code Online (Sandbox Code Playgroud)

其中kAudioFileAAC_ADTSType是将要流式传输的已发送文件的类型,通过这种方式,"不支持的文件格式错误"消失,但应用程序崩溃并获得新的错误 在此输入图像描述

这说:io:lpc和客户:aac.

  • 有人知道这是什么意思吗?
  • 队列期待AAC格式文件?
  • 为什么LPCM(线性脉冲编码调制),我发送的M4A或AAC不是LPCM?

提前致谢.

objective-c audio-streaming audiotoolbox ios multipeer-connectivity

8
推荐指数
1
解决办法
1948
查看次数

Multipeer连接和数据沿途发送

我正在开发一款平台游戏,尝试使用IOS Multipeer连接来制作多人游戏.我陷入困境/困惑/不知道在同伴之间发送消息的最佳方式是什么(大多数是游戏中的4个同伴).游戏风格就像有趣的跑步,我有4个英雄跑步和互相射击和类似的东西.问题在于保持其他球员的位置让我疯狂!有时其他玩家处于错误的位置(请记住所有设备都具有相同的屏幕尺寸).这是因为连接滞后.我每秒可以发送多少信息以及管理数据传输的最佳方式是什么?

任何想法/想法都表示赞赏.

xcode multiplayer ios multipeer-connectivity

8
推荐指数
1
解决办法
1184
查看次数

Android和iOS dns-sd:如何进行跨平台服务发现?

在Android上,我这样做是用一个简单的attacched地图作为信息来创建一个服务广播

HashMap<String, String> record = new HashMap<>();
record.put("info, "my android info");    
WifiP2pDnsSdServiceInfo serviceInfo = WifiP2pDnsSdServiceInfo
        .newInstance("_myservice", "_tcp", record);
WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
Channel channel = manager.initialize(this, this.getMainLooper(), null);
manager.addLocalService(channel, serviceInfo, null);
Run Code Online (Sandbox Code Playgroud)

检索另一个信号

manager.setDnsSdResponseListeners(channel, this, this);

@Override
public void onDnsSdTxtRecordAvailable(String fullDomainName, Map<String, String> txtRecordMap, WifiP2pDevice srcDevice)
Run Code Online (Sandbox Code Playgroud)

在iOS上,它是相同的服务名称和信息地图

MCPeerID* _myPeerId=[[MCPeerID alloc] initWithDisplayName:@"my ios peer"];
NSDictionary* _serviceInfo=@{@"info": @"my ios info"};

MCNearbyServiceAdvertiser* _serviceAdvertiser = [[MCNearbyServiceAdvertiser alloc] 
         initWithPeer:_myPeerId discoveryInfo:_serviceInfo serviceType:@"myservice"];
_serviceAdvertiser.delegate=advertiseDelegate;

MCNearbyServiceBrowser* _serviceBrowser=[[MCNearbyServiceBrowser alloc] 
      initWithPeer:_myPeerId serviceType:@"myservice"];
_serviceBrowser.delegate=browserDelegate;

[_serviceAdvertiser startAdvertisingPeer];
[_serviceBrowser startBrowsingForPeers];
Run Code Online (Sandbox Code Playgroud)

和代表们

-(void)browser:(MCNearbyServiceBrowser *)browser …
Run Code Online (Sandbox Code Playgroud)

android bonjour dns-sd ios multipeer-connectivity

7
推荐指数
0
解决办法
585
查看次数

如何使用 Multipeer 连接(Wifi 网络)计算两个 iOS 设备之间的距离?

如何使用无线连接计算两个 iOS 设备之间的距离。

我发现我们可以使用BLE,使用RSSI数字进行计算。

但是设备的范围各不相同,放置在远处房间的设备无法被发现。

我的要求是计算房间中存在的距离设备。

我已经研究了多点连接框架,但没有数字这样的东西RSSI

提前致谢。

wifi ios multipeer-connectivity swift5

7
推荐指数
1
解决办法
245
查看次数

多点连接 - 在 Swift 5 中获取文件传输(互联网)速度和文件大小

我正在点对点传输照片。一切正常,但我无法获得照片(文件)传输速度和互联网速度。与MB 一样,文件也被传输。其次,我想获取该文件的大小。

我们使用数据格式传递照片MCSession

由于隐私原因,我无法在此处添加项目代码,但我将分享我关注的参考 github 项目。在项目中,我传递字符串,在我的例子中传递照片。所有的事情都是一样的。

我在 Stackoverflow 上查了一下,但没有找到任何准确的答案!

参考项目链接: https://github.com/YogeshPateliOS/MultipeerConnectivity-.git

谢谢你!

wifi multipeer-connectivity mcsession swift swift5

7
推荐指数
1
解决办法
1439
查看次数