我可能在这方面完全疯了,但似乎 YouTube 视频的下载/缓冲速率在开始时更快,缓冲点离当前播放标记越远,缓冲越慢。
我疯了,还是其他人都这样?
假设是后者,关于他们如何做到这一点的任何理论?是服务器端还是客户端?我认为它必须是客户端,但谁知道呢?不是我,这就是我问的原因!
我可能在这方面完全疯了,但似乎 YouTube 视频的下载/缓冲速率在开始时更快,缓冲点离当前播放标记越远,缓冲越慢。
我疯了,还是其他人都这样?
假设是后者,关于他们如何做到这一点的任何理论?是服务器端还是客户端?我认为它必须是客户端,但谁知道呢?不是我,这就是我问的原因!
这是在服务器端完成的,在客户端没有办法做到这一点。
有许多不同的方式来提供视频,所以如果你想自己设置它取决于你使用的服务器技术,或者你可以只使用 RTMP 之类的东西(通过 Flash 媒体服务器或 Red 5 等)。
从我从 Wireshark 转储中看到的情况来看,它们通过向服务器发出多个请求(带有参数“范围”)来缓冲内容。客户只在需要时才请求下一部分。
GET /videoplayback?
sver=3&
key=yt1&
sparams=algorithm%2Cburst%2Ccp%2Cfactor%2Cid%2Cip%2Cipbits%2Citag%2Csource%2Cupn%2Cexpire&
algorithm=throttle-factor&
upn=L4m-ID0n0V0&
expire=1334882299&
factor=1.25&
ipbits=8&
ip=77.0.0.0&
fexp=912300%2C919303%2C911623&
source=youtube&
range=8908800-10690559&
cp=U0hSSVhTUF9OU0NOMl9QTVRDOjhGTXRjbEpBNzls&
burst=40&
signature=20F9219AACD9249B3517F56ECFE8B12C6B001D2F.BDDD25B61745E0F6E0BBAC7E792C121AA67A4C7C&
keepalive=yes&
itag=34&
cm2=0&
id=9cc8ae37c50b77f7 HTTP/1.1
否则,这种带宽限制只有在客户端“控制”服务器时才可行,即要么请求他知道他需要的内容(例如:Youtube 渐进式下载),要么定期告诉服务器他在哪里(例如:RTCP /RTMP / RTP 流)。