mp4格式的视频流传输下实现边下边播

问题描述:
年前有一个私活其中一个需求是客户端发请求,服务端将服务器上的视频传到客户端并实现边下边播。需求其实很快完成了,刚开始由于视频大多比较小,前端得到后经过几秒的加载后可以播,但是甲方不太满意播放速度,希望通过多种手段将视频加载速度缩短。在一阵摸索中终于找到了问题的症结。

问题解决的全部流程:
1、首先考虑的是带宽,带宽是最直接的解决方法,可是考虑到经济性起初购买服务器时带宽买的是5Mbps的,所以首先加带宽测试,加到10M后用postman测试拿视频接口,获得整个视频的速度确实减少了一半,但是客户端播放并没有肉眼可见的加快,然后索性将带宽直接加到50M,因为视频绝大多数在5M以下,所以如果是带宽问题现在肯定可以实现秒下,但是客户端依然会有一个加载的过程。(排除带宽问题)

2、由于视频上传前经过了简单的加密,在传输结束后会进行解密,于是与前端联系了解解密逻辑,得出原来是先下载,下载完成后再解密播放,所以每两个视频间都会有明显的加载时长。(找到第一个原因,视频解密逻辑)

3、前端进行修改后,抛弃了视频加密解密的流程,直接用原视频进行传输,重新出包看效果,结果仍然不近人意,虽然稍微快了一些,但是有个别几十M的视频需要加载非常久,按照代码层面来讲,后端编写的是流传输的方式,加载的时长不应该因为视频的大小而有明显的变化,前后端相互指责并修改过后,仍然没有找到原因。(僵住,排除前端和后端的代码原因)

4、最后问题的落脚点来到了视频上,经过查阅资料后发现,mp4视频的格式比较特殊,简要来说,MP4文件主要由ftyp,mdat,moov三部分组成。
三部分的主要职责:
(1)ftyp 记录了mp4格式,编码格式之类的一些基本信息

(2)mdat记录了视频媒体信息(mdat的体积往往非常的大,几乎等于MP4总大小)

(3)moov是如同检索表一样的存在,里面记录了每一帧对应的数据在哪里等等
而这三部分的在mp4视频中的顺序决定了该视频支不支持边下边播,具体主要是mdat和moov两个部分的顺序,需要moov在mdat前,也就是先加载类似视频的索引才能实现该效果。

于是,下载了两个软件:
mp4info(查看视频的具体信息,包括上述部分的顺序)
faststart(转换视频内部结构,将moov提到mdat前)
查看视频结构:
在这里插入图片描述
将视频转码:
在这里插入图片描述
首先mp4info查看视频的信息,果然是moov在最后,于是使用faststart将最大的一个视频进行转码,转码后重新测试视频加载速度,几乎秒加载完毕,问题解决。
(走了这么多弯路原来是甲方的问题,%¥*&……&¥#@……%&%…)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值