【学习笔记】iOS IP 直连原理剖析

本文为学习笔记,并非原创。原文链接,原文发表于2018-02-13

移动互联网的网络状况是十分复杂的,三大运营商、3G、4G、Wi-Fi、地点等任何一个状态的改变都会导致网络状况的变化,并且运营商、代理商们还可能在其中搞一些小破坏,比如经常会有用户反馈说某个页面访问不了或者返回结果不正确等问题,这种状况一般都是发生了域名劫持,通用的解决方案就是使用 IP 直连,跨过运营商 LocalDNS 服务器解析过程,从而达到降低延迟、避免劫持的效果。

为什么直接用IP

  1. 防劫持,可以绕过运营商 LocalDNS 解析过程,避免域名劫持,提高网络访问成功率。
  2. 降低延迟,DNS 解析是一个相对耗时的工作,跳过这个过程可以降低一定的延迟。
  3. 精准调度,运营商解析返回的节点不一定是最优的,自己获取 IP 可以基于自己的策略来获取最精准的、最优的节点。

如何获取IP:

  1. 直接接入腾讯或者阿里的 HTTPDNS 服务。
  2. 内置 Server IP,可以在启动等阶段由服务端下发域名和 IP 的对应列表,客户端来进行缓存 …
more ...

【学习笔记】iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求

本文为学习笔记,并非原创。原文链接,原文发表于2016-01-21

GET网络请求缓存

POST请求不能被缓存,只有 GET 请求能被缓存。因为从数学的角度来讲,GET 的结果是幂等 的,而 POST 不幂等 。缓存的思路就是将查询的参数组成的值作为 key ,对应结果作为value。

NSURLCache *urlCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil];
[NSURLCache setSharedURLCache:urlCache];

控制缓存的有效性

服务器的文件存贮,大多采用资源变动后就重新生成一个链接的做法。而且如果你的文件存储采用的是第三方的服务,比如七牛、青云等服务,则一定是如此。

链接不变的情况下,要求资源改了,缓存就要更新,该如何做?

文件缓存 …

more ...








【学习笔记】极致首帧播放方案 - 零首帧解决方案

本文为学习笔记,并非原创。原文链接,原文发表于2021-04-06

背景介绍

「零首帧」并不是真的0毫秒启播,而是用户几乎感知不到有首帧时间的存在,在我们的播放质量埋点中对应小于100ms以内的首帧时间。

在现实业务中,有些场景是无法使用所有的优化条件的,比如在随机播放的场景不能进行预加载、某些场景不适合使用播放器复用技术等。

首帧的构成

firset frame

从上图可以看出首帧时间主要包含这么几个部分: 获取视频播放链接,网络建连,下载视频头部数据,音视频解码和渲染。

通用的首帧优化方法

获取播放地址

优化方案:播放地址随feed下发。

通常而言,视频资源会有唯一标识 video id , 在点播的服务端会有一个根据 video id 信息获取播放链接的服务,如果 app server 端能够调用 vod 服务生成播放地址,然后将播放地址随 feed 流一起下发,则省去了客户端的一次网络请求耗时。

网络建连

优化方案:预解析。预连接&连接复用。避免TLS握手。

拿到播放地址,播放器与DNS建连,首先会做DNS解析 …

more ...