手机端做的优秀的网站,宜昌网站设计制作公司,网站建设策划书,建设小微公司网站需要多少钱前言
MP4文件由若干称为Atom#xff08;或称为box#xff09;的数据对象组成#xff0c;每个Atom的起首为四个字节的数据长度#xff08;Big Endian#xff09;和四个字节的类型标识#xff0c;数据长度和类型标志都可以扩展。Atom可以嵌套#xff0c;即其数据域可以由…前言
MP4文件由若干称为Atom或称为box的数据对象组成每个Atom的起首为四个字节的数据长度Big Endian和四个字节的类型标识数据长度和类型标志都可以扩展。Atom可以嵌套即其数据域可以由若干其它Atom组成从而实现结构化的数据。
MP4文件需要有ftyp、moov、mdat它们都是顶级Atom不能被其他Atom嵌套。
ftyp标示了MP4文件必须出现在第一个;moov保存了视频的基本信息mdat保存视频和音频数据。这两个Atom顺序不固定。
若要在视频文件未能被完整下载前即开始播放并能跳转到指定位置肯定要首先获知其 moov atom 信息。这也是 moov atom 存在的意义。
判断
通过FFmpeg工具可以查看
ffmpeg -v trace -i input.mp4 NUL 21 | grep -m 1 -o -e type:\mdat\ -e type:\moov\Python代码判断如下
import subprocess
def is_moov_ahead(video_path):判断视频文件的 moov atom 是否在文件头部。检查成功返回 bool否则返回 Nonecommand fffmpeg -v trace -i {video_path} NUL 21 | grep -m 1 -o -e type:\mdat\ -e type:\moov\try:child subprocess.Popen(command, shellTrue, stdoutsubprocess.PIPE, stderrsubprocess.PIPE)stdout, stderr child.communicate()if child.returncode 0:return (bmoov in stdout)except Exception:passreturn False调整 moov 位置
ffmpeg.exe -i input.mp4 -c copy -map 0 -movflags faststart output.mp4参考
MP4封装格式介绍 – Atom结构理解 MP4 moov atomUsing FFmpeg to locate moov atom