gpt4 book ai didi

ios - NSURLSession:流媒体延迟峰值

转载 作者:行者123 更新时间:2023-11-29 05:50:15 25 4
gpt4 key购买 nike

我们有流媒体应用程序,它本质上是在非常紧张的时间内将数据(视频 block )上传到服务器上。我们使用 http 流来执行此操作(通过 NSURLSession uploadTaskWithStreamedRequest),而不是 websockets/直接连接。 block 大小约为 100Kb-300Kb。我们有一个上传问题,很难追溯到根源......欢迎任何建议。

问题:某些文件的上传延迟偶尔会出现峰值。比如 15-20 个文件中,有 1 个文件的上传速度是其他文件的两倍。这种情况偶尔发生,并且没有任何可见的模式。即使连接非常好也会发生这种情况。当网络条件允许稳定上传时,我们必须消除这种峰值 - 因为我们进行视频流传输,即使 15-20 个“延迟”文件中的 1 个也会让我们的用户在实时播放时“暂停”。

我们能够在理想条件下的本地网络中详细重现这种情况。1) 客户端(上传者):搭载 IOS12 的 iPhone XR。2) 客户端通过Wi-Fi通过本地网络上传300Kb大小的单个文件。上传成功后客户端开始再次上传,这样我们就可以测量连续上传的统计数据3) 服务器:Node.js 不执行任何操作 - 只是接收数据和记录计时。4)上传代码:

***
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration];
configuration.allowsCellularAccess = YES;
configuration.HTTPShouldUsePipelining = YES;
configuration.networkServiceType = NSURLNetworkServiceTypeVoice;
***
NSInputStream* inputStream = [[NSInputStream alloc] initWithFileAtPath: pathTo300KbFile ];
[httpManager setTaskNeedNewBodyStreamBlock:^NSInputStream * _Nonnull(NSURLSession * _Nonnull session, NSURLSessionTask * _Nonnull task) {
return inputStream;
}];
***
NSMutableURLRequest *fileRequest = [NSMutableURLRequest requestWithURL:URL
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:100];
[fileRequest setHTTPMethod:@"POST"];
***
NSURLSessionUploadTask* uploadTask = [httpManager uploadTaskWithStreamedRequest:fileRequest progress:... completionHandler:...];
[uploadTask resume];
***

此代码只是在 uploadTask 返回成功后(通过回调)从头开始再次上传

5) 测试结果“正常”。这种情况大多数时候都会发生,您可以看到本地网络上 300Kb 文件的平均上传时间相当低且稳定 - 大约 0.5 秒

2019-04-18 15:07:44.793512+0300 DVGCore_Example[2016:1384429] VidLib: #191:300kb-s1-7. Success: +0.54
2019-04-18 15:07:46.019874+0300 DVGCore_Example[2016:1384370] VidLib: #192:300kb-s1-8. Success: +0.67
2019-04-18 15:07:46.828315+0300 DVGCore_Example[2016:1383910] VidLib: #193:300kb-s1-9. Success: +0.37
2019-04-18 15:07:48.383446+0300 DVGCore_Example[2016:1383909] VidLib: #194:300kb-s1-10. Success: +0.83
2019-04-18 15:07:48.948218+0300 DVGCore_Example[2016:1384429] VidLib: #195:300kb-s1-1. Success: +0.29
2019-04-18 15:07:50.116136+0300 DVGCore_Example[2016:1383910] VidLib: #196:300kb-s1-2. Success: +0.37
2019-04-18 15:07:51.168454+0300 DVGCore_Example[2016:1384428] VidLib: #197:300kb-s1-3. Success: +0.33
2019-04-18 15:07:52.244631+0300 DVGCore_Example[2016:1384370] VidLib: #198:300kb-s1-4. Success: +0.33

有关平均(包含接收时间)、正常上传的服务器日志示例:https://gist.github.com/IPv6/27dc7a8e4a53b5219e39cce73691c0be

6) 但对于某些上传,上传时间偶尔会出现峰值。延长2-3倍

2019-04-18 15:16:50.492425+0300 DVGCore_Example[2022:1385864] VidLib: #124:300kb-s1-8. Success: +1.87
2019-04-18 15:22:06.395094+0300 DVGCore_Example[2027:1387221] VidLib: #200:300kb-s1-6. Success: +2.11
2019-04-18 15:23:28.329843+0300 DVGCore_Example[2027:1387610] VidLib: #281:300kb-s1-9. Success: +2.84

此上传的服务器日志示例:https://gist.github.com/IPv6/8d92b3899682c4cf697dbfb64a1b752c

底部:没有任何原因(没有网络问题等),并且似乎 IOS 应该能够在数小时内无延迟地进行流式传输。但这并没有发生。

我们在理想的本地环境中看到了这一点,而在“现实世界”中,相同的峰值甚至更加频繁。

问题是 - 如何摆脱它们?有什么想法吗?

最佳答案

好文章,有助于追踪原因 https://forums.developer.apple.com/thread/45210

在我们的例子中,测试中使用的 WiFi 路由器在接收流量时出现问题

关于ios - NSURLSession:流媒体延迟峰值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55746207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com