视频在线播放,边下边播的一些问题记录

1.有的mp4能在线播,有的mp4不能在线播

原理:mp4视频文件,分视频基本信息(分辨率、码率),和视频画面信息,这两部分。整个mp4主要是画面信息,而基本信息则写在视频文件的最开头,或写在视频文件的最末尾。对播放器来说,必须先得到视频的基本信息,才能播放画面。
进行在线播放时,视频是一边下载一边播放的,基本信息在头部的mp4,会首先下载到基本信息,于是马上就能出画面。基本信息在尾部的mp4,就要等整个文件下载完才能出画面。
直接播放文件,则没有区别。播放器在mp4的头部找不到基本信息,就直接跳到尾部去找,因此我们感觉不出差异。
结论:mp4有的支持在线播,有的则不支持,跟文件本身有关系,开发时要注意这一点。这块的优化方法,最好是客户端录视频时,就直接把基本信息写在头部,以便支持在线播放。假如系统必须要支持多种设备录制的视频,录制规则无法统一,则视频上传时应该由服务端对视频进行处理,将那些基本信息写在尾部的mp4文件,提取至头部。方法参考:https://blog.csdn.net/yeyinglingfeng/article/details/77774449
其中,APP录的视频,抖音上保存下来的视频,微信叮叮录的视频,本身就在头部,支持在线播放。直接用手机拍的,就不好说了,看各种型号的手机而异。

2.支持在线播的mp4,电信卡和wifi很快就能播,移动卡怎么也播不出来,而移动本身下载个文件速度很快。

原理:跟移动运营商有关系。下载视频采用的是http协议,下载的过程中,Http协议有一个字段叫Content-Type,用来描述下载的文件是什么类型,一旦这个类型被标识为mp4,移动运营商就会进行拦截,使它不能下载(为什么要这么干我也不知道),而电信和局域网wifi则不会拦截。
解决的办法:把Content-Type标识为普通的数据,不特意标识为某种类型的文件,就能够正常播放了。你可能会问,既然这样,把所有的文件(txt,mp4,Jpg)都标识为普通的数据不就万事大吉了吗?确实可行,例如对播放器来说,http协议中不管把文件标识为什么类型,它都是去播放。但对浏览器有影响,如果这个地址用浏览器去打开,对于Content-Type的标识,就会影响浏览器的行为,例如把一个视频文件标识为普通数据,浏览器的动作就是下载这个文件。如果标识为mp4,浏览器会直接在窗口播放。把一张图片文件标识为普通数据,浏览器的动作就是下载这个文件,如果标识为jpeg,浏览器会直接显示图片。
目前,文件上传下载服务,支持以参数的方式,来设置Content-Type。默认是根据文件的类型进行设置,例如mp4就设置为mp4,文本文件就设置为text。但也可以强制标识为“stream”,也就是普通数据,通过传参即可。手机端做视频播放功能时,要记得强制标识为stream,否则在移动网下就会卡死。

最后:当在我们测试环境(局域网wifi)下,并且用移动警务APP录的视频,就放的好好的。到了现场,会出现各种问题。如果简单的想,很容易得出“网络问题,网速问题”这样的结论,但深入排查会发现有很多差别,在解决的过程中,会学到一些特定领域的知识。

当然这这个问题,是我经理解决的,我只是照搬照抄,自己仍需努力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值