|
1
6
下面是我们要使用的javascript:
我们将优酷链接包含在HTML中,如果国家不是中国,我们将切换到YouTube。如果连接到
编辑:修改为添加5秒超时。 |
|
2
3
最好是专门检查YouTube是否在用户的网络中被屏蔽,而不是基于永远不100%可靠的IP过滤出国家。这样,它甚至可以在任何学校/办公室环境中工作,在这种环境下,网络管理员可以出于任何原因阻止YouTube。
This
这是我能找到的最好的答案,它试图加载
这意味着,对于拥有YouTube访问权限的用户来说,结果几乎是即时的,对于防火墙被阻止的用户来说,结果需要几秒钟的时间。代码很简单:
这是一个比上述更好的解决方案,因为它不等待
根据评论更新: 如果有可能图像以前缓存在用户的计算机上,则将当前时间戳参数添加到图像URL将确保加载图像,而不必考虑以前缓存的图像。
|
|
|
3
0
您当前的解决方案并不理想,因为它取决于get请求超时,这将减慢速度。因为这个问题主要围绕
尝试使用
为此,使用jquery(因为您已经在使用它)将dom导航到
编辑:不完全清楚您是否事先拥有用户的IP地址。如果没有,可以使用类似的方法
|
|
|
4
0
我建议你看看阿里云。他们有很多服务,但是阿法克没有免费的计划。
我看到两种可能的选择:
|
|
|
5
0
使用客户端的时区怎么样?虽然不完美,但它可以让您避免完全依赖超时或任何geoip服务请求。如果可能的话,我会避免使用可能导致同一地址块(例如来自会议与会者)对同一阻塞资源进行多次重复调用的方法。当我最后一次在中国生活的时候,我记得我触发了来自防火墙的TCP重置,这将持续30秒或更长时间。
还有图书馆(
jsTimezoneDetect
和
moment-timezone
)将上述内容与
对于我来说,我可能会尝试将时区检测为“亚洲/上海”,并返回到“UTC+8”的时区偏移量(仅时区偏移量就可以捕获比中国大陆更多的数据,但我认为这是一个可接受的回退策略的过度扩展),例如:
|
|
|
6
0
您可以使用ffmpeg将视频转换为HLS版本,根据RFC8216手工制作HLS播放列表(.m3u8)。ffmpeg不会为您创建主播放列表。HLS有助于根据互联网速度调整分辨率。如果你把它和免费的hls.js javascript媒体播放器结合在一起,你可以把它放在你自己的网站上,以便通过中国的防火墙,支持自适应分辨率。 下面是一个HLS主播放列表示例,因此您不必读取RFC 8216,该文件将称为video.m3u8:
带宽是以每秒位为单位指定的,质量顺序并不重要,因为MediaPlayer选择要播放的分辨率。 在命令提示符中可用于ffmpeg的命令是:
唯一需要做的就是用视频替换c:\input\video.mp4,并用视频的输出名称替换所有c:\output\video。360p代表输出视频文件名中指定的分辨率,它不影响实际分辨率,%03d是一个命令,它被解析为给视频片段一个数字,如001到999。下划线用于可读性。 评论说明: -hwaccel dxva2意味着ffmpeg将使用DirectX进行硬件加速,这可以从Windows Vista和更高版本获得。 -hls_time 2将碎片时间设置为每个碎片2秒。 AAC和H264是用于HLS视频片段的编解码器。 此ffmpeg命令生成6个质量级别,但不创建主播放列表。主播放列表是一个按带宽播放列表的播放列表(见上文),取决于HLS播放器选择播放视频片段的播放列表的互联网速度。 |
|
|
7
0
使用javascript从浏览器获取区域设置信息要加快检测过程,您可以首先尝试从浏览器包安装语言中提取区域设置信息:
然后将其结合起来,或者作为最后一个资源,回退到地理位置或其他方法,从
以下是获取浏览器头的外部服务示例:
另一个可能与上述解决方案结合的路径是从用户环境或浏览上下文(window.location、document.cookie、document.localstorage、date()或date().tolocalString()et similar)中获取一些字符串,并使用正则表达式unicode范围扫描这些字符串以获得中文unicode码点。
我相信这会让你得到一个非常好的近似值,而不会提出额外的要求。作为我的火狐浏览器的一个例子,一个调用
可以很容易地将其解析为“意大利语”区域设置。 在某个地方,你会发现一个汉字/符号的Unicode点。 |