有些MP4视频为什么无法边放边播?

举报
DevFeng 发表于 2021/10/15 15:47:22 2021/10/15
【摘要】 现象网站上有些MP4视频,需要缓冲完才开始播放。无法边放边播。过程有些MP4视频为什么无法边放边播?首先并非所有视频文件的任意片段都可播放。视频文件除了主要的音视频数据外还包含“视频格式信息(如编码方式、码率等)”。播放器必须获取到“视频格式信息”后才能播放音视频数据。(视频文件的格式信息并非总是保存在视频文件的头部,有些视频文件的格式信息可能还位于文件尾部甚至中间的某部分。当看到迅雷下载速...

现象

网站上有些MP4视频,需要缓冲完才开始播放。无法边放边播。


过程

有些MP4视频为什么无法边放边播?

首先并非所有视频文件的任意片段都可播放。视频文件除了主要的音视频数据外还包含“视频格式信息(如编码方式、码率等)”。播放器必须获取到“视频格式信息”后才能播放音视频数据。(视频文件的格式信息并非总是保存在视频文件的头部,有些视频文件的格式信息可能还位于文件尾部甚至中间的某部分。当看到迅雷下载速度明明还可以,但总是处于缓冲阶段,那么有可能是视频格式信息分布比较离散导致的)

怎么才能一开始就读到视频格式信息?

由此需要把这些信息想办法移动到mp4文件的前部,这样读取到这些信息后客户端播放器就可以搭起播放环境,后续只需要播放数据即可。能完成这项工作的工具有很多,这里介绍qt-faststart这个小程序。


qt-faststart简介

qt-faststart是一个由Mike Melanson (melanson@pcisys.net)写的开源程序,是一个命令行工具。
你可能可以在很多地方找到它的源码,我一般是在FFmpeg的源码中拿,
它通常放在FFmpeg源码的tools目录下,
比如github仓库中的位置为https://github.com/FFmpeg/FFmpeg/blob/master/tools/qt-faststart.c。
该程序只有一个源码文件,很小(不到13KB)。

qt-faststart编译与使用

要使用它需要先编译,这个程序能利用大多数编译工具实现编译,
因为我一般在linux下使用,
所以直接make tools/qt-faststart.c 
即可在tools目录下产生出名为qt-faststart的可执行文件,
然后把编译输出结果放置到系统搜索路径中即可以qt-faststart来进行调用使用了。
qt-faststart的使用十分简单,其调用格式为
qt-faststart <inMp4FilePath>  <outMp4FilePath>
<inMp4FilePath>:表示调整前的mp4文件路径
<outMp4FilePath>:表示调整后的输出mp4文件路径
mp4文件路径可以是绝对或者相对路径。


windows下的使用qt-faststart

下载qt-faststart, 附件中已经上传

运行命令

qt-faststart.exe d:/1.mp4 d:/2.mp4  

2.mp4 就可以边下边播了

批处理运行命令

for %%a in (*.mp4) do qt-faststart.exe %%~na.mp4 %%~naz.mp4

处理过的视频后面统计增加一个字母z

总结

虽然都是MP4格式的文件,却不是都可以边放边播,我们可以单独处理视频本身来达到边放边播。

实现边下边播,必须首先获取ftyp与moov。

但许多视频的moov都在mdat之后,这就导致如果服务端或客户端都没有相应的解决方案时,就无法实现边下边播。

其他

为什么很多视频网站都使用M3U8,相比与mp4直传视频流有何优势?

1.HTML5 直接支持m3u8协议。
2.m3u8其实是一个协议而不是一种视频格式,m3u8里面包括的多是视频块索引。可以通过网络状态自动切换码率。MP4就没有这方面优势了。
3.m3u8允许客户在进行播放时,从许多不同的备用源中下载视频块。
4.m3u8是HLS协议的部分内容。是一种能够通过http报文就能够请求和访问了。
MP4如果要实现在线播放那么就需要RTP协议来实现。两种手段有比较大的区别。
5.更高性能上能够将部分m3u8的播放块切块之后直接加载到服务器内存中,让客户端可以更快的得到数据。
6.m3u8 由于是采用切块技术,那么下载的播放文件 就可以少很多,只有当前播放的部分。这一点用在在线直播上有很大优势。

最后, 容易卡顿,可能是你访问该服务器的m3u8 延迟较高,网络问题,也可能是服务器没配好而已。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。