小编bge*_*try的帖子

YouTube的高清视频流媒体服务器技术?

最近我一直在研究将MP4流式传输到浏览器的不同方法.Flash Media Server在这里是显而易见的选择(使用Cloudfront),我见过的大多数解决方案都使用RTMP协议.

但是,我花了一些时间在YouTube上使用Firebug和Chrome调试器来确定他们的流媒体如何工作,我发现他们的一些视频和质量率之间存在一些有趣的差异.

我的两个样品视频是A和.A最高可达480p,B最高可达1080p.对于这两个视频,所有高达480p的速率都通过HTTP在具有H.264视频和AAC音频的FLV容器中提供.这里有趣的是,如果您还没有下载(缓存)整个视频,并且您尝试跳到视频的未缓存部分,则会发出一个新的请求,其中'begin'参数等于目标偏移量毫秒.来自480p的视频A的示例:

http://v11.lscache8.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0dWTldQVF9FSkNNNl9PSlhJ&fexp=904806%2C902906%2C903711&algorithm=throttle-factor&itag=35&ipbits=0&burst=40&sver=3&expire=1279756800&key=yt1&signature=D2D704D63C242CF187CAA5B5D5BAFB8DFACAC5FF.39180C01559C976717B651A7EB1D0C6249231EB7&factor=1.25&id=8568eb3135971f6f&begin=111863

Response Headers:
Cache-Control:public,max-age=23472
Connection:close
Content-Length:14320637
Content-Type:video/x-flv
Date:Wed, 21 Jul 2010 17:23:48 GMT
Expires:Wed, 21 Jul 2010 23:55:00 GMT
Last-Modified:Wed, 19 May 2010 12:31:41 GMT
Server:gvs 1.0
X-Content-Type-Options:nosniff
Run Code Online (Sandbox Code Playgroud)

此URL返回的文件是完全有效的FLV,仅包含请求的偏移量之后的视频部分.

我在视频B的更高分辨率版本上进行了同样的测试.在720p和1080p,YouTube将在MP4容器中返回视频,还有H.264视频和AAC音频.令我印象深刻的是,他们的服务器为MP4视频采用相同类型的偏移(通过'begin'参数)并返回一个有效的,可流动的MP4(文件前面的moov原子具有正确的偏移),其中仅包括视频的请求部分.

那么,YouTube如何做到这一点?他们如何使用正确的标题动态生成FLV或MP4容器,并且只生成所请求视频的所需片段?我知道这可以通过使用FFMPEG来寻找所需的起点和qt-faststart脚本来重新定位moov原子到流的前面来实现,但似乎这样太慢了,无法按需处理数百万个YouTube观看者.

想法?

提前致谢!

脚注:此时我不允许包含多个链接,因此这里是视频A的URL:http:// www.youtube .com/watch?v = hWjrMTWXH28"视频可用,最高480p"

youtube mp4 ffmpeg video-streaming

13
推荐指数
1
解决办法
1万
查看次数

标签 统计

ffmpeg ×1

mp4 ×1

video-streaming ×1

youtube ×1