首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCDAsyncSocket读取数据问题

GCDAsyncSocket读取数据问题
EN

Stack Overflow用户
提问于 2012-05-16 11:39:12
回答 2查看 1.5K关注 0票数 0

我有一个使用GCDAsyncSocket作为网络接口库的Cocoa live视频程序。在播放视频帧时存在明显的迟缓。例如,视频上的时间几乎是正常时间的两倍。通过检查性能,我发现GCDAsyncSocket的readDataToLength方法调用过于稀疏。以下是带有时间戳的日志:

代码语言:javascript
复制
2012-05-16 11:18:27.054 DVRLibDemo[1181:903] readDataToLength
2012-05-16 11:18:27.256 DVRLibDemo[1181:903] readDataToLength
2012-05-16 11:18:27.285 DVRLibDemo[1181:903] readDataToLength
2012-05-16 11:18:27.452 DVRLibDemo[1181:903] readDataToLength
2012-05-16 11:18:27.475 DVRLibDemo[1181:903] readDataToLength
2012-05-16 11:18:27.697 DVRLibDemo[1181:903] readDataToLength
2012-05-16 11:18:27.726 DVRLibDemo[1181:903] readDataToLength
2012-05-16 11:18:27.856 DVRLibDemo[1181:903] readDataToLength

我在创建套接字时设置了一个单独的委托分派队列,但它没有多大帮助。消息有一个固定的报头,我首先读取报头,然后读取有效负载。

代码语言:javascript
复制
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{    
    DVRConnection *conn = [self getConnectionWithSocket:sock];

    //DebugLogInfo(@"Receive raw data: %@ for connection: %d", data, conn.tag);

    if (conn != nil && conn.connected)
    {
        if (tag == TAG_XM_MESSAGE_HEADER)
        {
            uint32_t bodyLen = [_parser parseMessageHeader:data];
            [sock readDataToLength:bodyLen withTimeout:-1 tag:TAG_XM_MESSAGE_PAYLOAD];
        }
        else if (tag == TAG_XM_MESSAGE_PAYLOAD)
        {
            [_parser parseMessage:data forConnection:conn device:self];
            [sock readDataToLength:XM_MESSAGE_HEADER_LENGTH withTimeout:-1 tag:TAG_XM_MESSAGE_HEADER];
        }
    }
}

有没有人有办法提高从socket读取数据的速度?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-19 22:10:38

它变成了parseMessage代码中的一个错误。每次读取后,我都没有正确地清除缓冲区。

票数 0
EN

Stack Overflow用户

发布于 2013-02-07 19:17:51

你使用GCDAsyncUdpSocket了吗?我认为在你的情况下(视频传输),UDP会比TCP (GCDAsyncSocket)表现得更好。UDP不会检查数据发送是否成功。因此,不能保证数据会被传送,但好处是它的执行速度会更快。在视频或音频数据发送中,UDP是首选,因为某些数据丢失没有显著影响。

希望这能有所帮助:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10611679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档