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

问题解决的全部流程:
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将最大的一个视频进行转码,转码后重新测试视频加载速度,几乎秒加载完毕,问题解决。
(走了这么多弯路原来是甲方的问题,%¥*&……&¥#@……%&%…)

mp4格式的视频流传输下实现边下边播相关推荐

  1. 想把下载的qlv格式视频转MP4格式,想问下大家Java有解决方案么?

    网上很多qlv格式转换为mp4格式的教程比较复杂 一.什么是qlv格式: qlv视频格式是tx视频下载后的一种格式文件,由于其固版的格式特点,通常只能通过tx视频客户端进行播放:支持播放qlv的播放器 ...

  2. H264编码 封装成MP4格式 视频流 RTP封包

    From:http://www.cnblogs.com/ghw-NO1/archive/2012/08/28/2660848.html 一.概述 本文讲述的是对H264编码且封装成MP4格式的视频流进 ...

  3. 【iOS】控件截图、MP4格式视频流和m3u8格式视频流截取某一帧功能的实现

    最近开发遇到一个点击按钮实现直播视频流截屏的功能,去网上查了一下资料,总结了一下iOS中截屏相关的知识,然后自己做了个demo. demo主要实现了3种截屏方法,分别对应三种不同的应用场景. 1.im ...

  4. 用windows系统下的DOS命令将腾讯视频客户端下载的qlv文件转换成MP4格式(图文详解)

    用windows系统下的DOS命令将腾讯视频客户端下载的qlv文件转换成MP4格式(图文详解) 前言 原理 工具 步骤 延伸 博主联系方式 前言 本人喜欢收集各种优秀的视频,但是很多情况下我们看到的视 ...

  5. linux mp4转h264工具,在Ubuntu下批量转换视频为H.264编码的mp4格式

    是目前比较流行的视频编码方式,比起MPEG2在画质大致相同的情况下能再压缩2-4倍,即如果一个DVD视频大小是1GB,用H264编码后能缩小到250MB左右,同时H264视频还能用时髦的浏览器(比如F ...

  6. win系统下不借助任何软件将FLV格式/qlv/ikv格式视频文件转换成mp4格式的视频

    爱奇艺视频转换成mp4格式 cmd 进入命令 然后copy 01.FLV 01.mp4 即可完成 还可以使用格式工厂进行转换,但是格式工厂转换似乎比较慢 腾讯视频qlv格式转换成mp4格式 1.视频缓 ...

  7. 上传 mp4 格式判断_视频如何转换成通用的MP4格式?按下这个键,10秒就能搞定...

    我们在网上下载视频的时候,有很多的视频都是无法播放的,或者是需要特定的播放器才可以播放.其实,只要把这些视频的格式转换成通用的MP4格式即可.如果你还不知道怎么转换视频格式,下面就教大家两个小方法,百 ...

  8. (超)低延迟视频流传输的未来

    作者:Anthony Dantard 翻译:Alex 技术审校:袁荣喜 ▲扫描图中二维码了解音视频技术大会更多信息▲ 影音探索 #013# 用户对服务的期望在不断攀升,并逐渐出现了不满情绪.由于有了Y ...

  9. js实现封装MP4格式文件并下载

    注:基于bilibili的FLV.js实现 flv.js的github地址:github.com/Bilibili/fl- MP4文件格式 综述 在MP4文件格式中,整个视频容器都是由多个box和子b ...

  10. python实现流媒体传输_基于OpenCV的网络实时视频流传输的实现

    很多小伙伴都不会在家里或者办公室安装网络摄像头或监视摄像头.但是有时,大家又希望能够随时随地观看视频直播. 大多数人会选择使用IP摄像机(Internet协议摄像机)而不是CCTV(闭路电视),因为它 ...

最新文章

  1. 恕我直言,微服务挺好,但不适合你
  2. openMP的一点使用经验 四
  3. gva explaination
  4. Apollo后台配置:命名空间Namespqce配置及代码读取
  5. Angular项目中核心模块core Module只加载一次的实现
  6. php 5.4日志文件在哪里,我的错误日志文件在哪里?(Where are my error log files?)
  7. Java 并发编程之 CopyOnWriteArrayList
  8. JAVA学习-JAVA实现一元二次方程求解
  9. tableau 集动作_在Tableau中通过添加操作,控制集并高亮显示数据
  10. 我得到 http 响应,但 response.getEntity().getContent() 显示空指针异常
  11. 读react.js小书 中组件的render的方法(从零学react)
  12. Android中复杂日历控件,CalenderView-一个优雅、高度自定义、性能高效的Android日历控件...
  13. VGA PCB布局布线要点
  14. 微信公众号 JS接口安全域名 配置
  15. 【笔记】win10上,IDEA完全删除,清理注册表
  16. Verilog数字系统设计——数字时钟(带暂停和任意位置位)
  17. K-近邻算法(分类算法)
  18. 我的世界服务器地图文件丢失,我的世界地图被毁了或找不到了 ? 大神手把手教你奇迹恢复...
  19. 【汇编语言】习题-转移地址在内存中的jmp指令
  20. 使用SSM+easyui做个简单的增删改查

热门文章

  1. mysql字段动态扩展_数据库动态扩展字段
  2. python实现决策树算法
  3. linux系统安装爱快,ESXi安装爱快iKuai OS路由(图文教程)
  4. 高数复习(1)--曲线切向与曲面法向的理解
  5. Jenkins下载war包升级版本
  6. matlab 插值出错,MATLAB插值问题
  7. 外点惩罚函数法·约束优化问题
  8. 博图注册表删除方法_「博图+仿真+授权」西门子软件安装指南及注意事项
  9. PHP字符串函数strrchr(查找指定字符在字符串中的最后一次出现)
  10. java项目:基于springboot高校党建管理系统(springboot+vue+mysql+redis) 1010