我正在尝试使用 iPhone OS 4.x 提供的新机制为 VoIP 应用程序实现后台模式
仍然没有成功...当一些数据通过 TCP 套接字从服务器到达时,应用程序在后台模式下保持沉默。
根据文档,必须做以下两件事:
- 在文件中添加
voip
值Required background modes
Info.plst
- 将对象的属性设置
kCFStreamNetworkServiceType
为值CFReadStreamRef
kCFStreamNetworkServiceTypeVoIP
我正在使用外部创建的 BSD 套接字来实例化CFReadStreamRef
函数CFStreamCreatePairWithSocket
。套接字句柄是正确的 - 通过一些测试检查。所以我得到了一个正确的CFReadStreamRef
对象,稍后我将对其进行配置和打开。
这是代码块:
CFSocketNativeHandle socket = (CFSocketNativeHandle)socketHandle;
CFStreamCreatePairWithSocket(kCFAllocatorDefault, socket, &sipSocketReadStream, nil);
CFReadStreamSetProperty(sipSocketReadStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
NSInputStream *inputStream = (NSInputStream*)sipSocketReadStream;
[inputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
CFReadStreamOpen(sipSocketReadStream);
请注意 - 我的代表NSInputStream
接收成功Stream Opened
事件。但是任何其他事件都没有发生——我期待在一些 TCP 流量开始到达时收到一个事件。