视频网站开发相关知识

3 篇文章 0 订阅

视频分段的好处   

by 邵辉(爱奇艺)

视频分段的目的并非是为了让用户多线程下载,恰恰是为了不让用户过快地下载。HTTP协议毕竟不是流媒体协议,很难控制视频传输的速度,设想一个用户在看了整部视频的1/3的时候,决定不看了,可是由于用户的网速很可能快于视频的码流,这时整部视频也许已经全部下载完毕了,那么多下载的2/3流量就被浪费了,这对于目前带宽是主要成本的视频网站来讲显然是不可接受的。因此把视频分段,并在一个视频片段快看完的时候,再去下载下一段视频,是一种简便并且高效的流控手段。

另外一个作用是为了CDN缓存的需要。视频文件普遍比较大,在缓存进内存的时候,会消耗大量的资源,如果缓存节点有多个不同视频文件在被观看,那么把这些文件全部读进内存有可能使系统资源耗尽。只把那些正在被观看的片段缓存起来显然效率更好。

视频服务一般不允许多线程下载,他们的CDN节点遍布全国,带宽和延迟都很有保障,所以没有必要使用多线程下载。把大文件分成多段也不是分段下载的必要条件,保持一个大文件,同时分段请求不同的文件位置也是可以的,只是flash能不能实现就不知了。


关于视频分段提高CDN缓存效率,还可以设想这样一个简单的模型:一部热播电影上线,视频文件尺寸有1G,装载到一个10台服务器的CDN节点上,有数百个用户同时线观看,由于视频网站大都采用了点播的模式,每个用户观看的进度都是不一样的,如果不采用分段的模式,那么你可能需要把视频文件分发到10台服务器上以均摊负载,每个文件都需要被全部缓存,总共消耗10G的内存。如果把视频分成10段,分别放到10台服务器上来均摊负载,总共就只需要1G内存,差别是9倍。考虑到视频网站同时会有多部影片在被用户观看,不可能所有的视频文件全都装载到内存中,会有大部分视频文件保存在磁盘上,在需要时才被load进内存,那么内存的成倍节省就意味着Memory Hit Ratio的大幅提升,这是一个Cache Server的最重要指标,也是所有CDN系统运行效率的关键。上面只是模型,实际的视频CDN系统未必是这样,有些解决方案不再使用Cache Server,而改用Web Server+Page Cache的方式,效率可能更好,但是分段仍然是提高系统整体效率的有效办法。

数据生成模式

by lin2798003(天地会兄弟)

ns.seek(0);    //清空缓冲区数据
ns.appendBytesAction("resetBegin");    //告诉解码器下一个tag将从flvheader开始
ns.appendBytes(byteArray);    //byteArray即为flvheader 9+4+metadata+4+videotag+4+audiotag+4;

ns.appendBytesAction("resetSeek");    //告诉解码器下一个导入的tag将会是video tag开始
ns.appendBytes(seekByteArray);    //seekByteArray即为你想要seek的那段数据流,当然了这个seekByteArray是从你seek的关键帧开始的

ns.seek(0);  //虽然这个会清空缓冲区但是当前的ns,time却不会置为0,如果想置为0,再来一步
ns.appendBytesAction("resetBegin");

还有就是appendBytes & appendBytesAction有个BUG 如果NetStream长时间使用一个实例那么拖动有可能造成解码异常,

现象就是导入了相应的视频数据后,无NetStream.Buffer.Empty 和NetStream.Buffer.Full(这个还没验证)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值