MP4格式是目前应用最广泛的封装格式,良好的跨平台特性是其最大的优势。我们有必要了解一下MP4的基本格式信息 ,方便我们封装裸流信息; MP4中封装了视频或者音频裸流信息 ,通常以.mp4为后缀,其实它是由一个一个的“BOX”组成的,大BOX中嵌套小BOX,逐级嵌套而形成的。
针对MP4文件的识别,有基本信息识别和BOX信息识别;
基本信息识别一般使用mp4info;
jeffmony@jeffmony-OptiPlex-7050:~/下载/Bento4-linux/bin$ ./mp4info test2.mp4
File:
major brand: isom
minor version: 200
compatible brand: isom
compatible brand: iso2
compatible brand: avc1
compatible brand: mp41
fast start: yes
Movie:
duration: 79756 ms
time scale: 1000
fragments: no
Found 2 Tracks
Track 1:
flags: 3 ENABLED IN-MOVIE
id: 1
type: Video
duration: 79580 ms
language: und
media:
sample count: 1908
timescale: 90000
duration: 7162154 (media timescale units)
duration: 79579 (ms)
bitrate (computed): 543.192 Kbps
display width: 960.000000
display height: 540.000000
frame rate (computed): 23.976
Sample Description 0
Coding: avc1 (H.264)
Width: 960
Height: 540
Depth: 24
AVC Profile: 100 (High)
AVC Profile Compat: 0
AVC Level: 31
AVC NALU Length Size: 4
AVC SPS: [6764001facd940f0117ee100000303e90000bb800f183196]
AVC PPS: [68ebe24b22c0]
Codecs String: avc1.64001F
Track 2:
flags: 3 ENABLED IN-MOVIE
id: 2
type: Audio
duration: 79756 ms
language: und
media:
sample count: 1718
timescale: 44100
duration: 3517197 (media timescale units)
duration: 79755 (ms)
bitrate (computed): 32.020 Kbps
Sample Description 0
Coding: mp4a (MPEG-4 Audio)
Stream Type: Audio
Object Type: MPEG-4 Audio
Max Bitrate: 32019
Avg Bitrate: 32019
Buffer Size: 0
Codecs String: mp4a.40.29
MPEG-4 Audio Object Type: 29 (Parametric Stereo)
MPEG-4 Audio Decoder Config:
Sampling Frequency: 22050
Channels: 1
Extension:
Object Type: Spectral Band Replication
SBR Present: yes
PS Present: yes
Sampling Frequency: 44100
Sample Rate: 44100
Sample Size: 16
Channels: 2
这儿比较定量分析了MP4文件的基本构成,主要的识别方向在Track信息上,这个文件中发现了两个Track信息,一个音频Track,一个视频Track; mp4info其实是mp4parser项目的变种,mp4parser实现了mp4 文件处理的所有操作;
BOX信息识别一般使用mp4reader;
图中颜色加深的标识是MP4中核心的BOX信息;
这张图非常清晰的表达了MP4的BOX封装特性,我们需要掌握MP4的每个BOX是什么意思;
学习了MP4的BOX信息,我们要知道,moov一般都在mdat之前,如果moov在mdat之后,在做边下边播的时候是无法播放的,因为moov是文件媒体的metadata信息,如果没有这个metadata信息,是无法继续解析mdat信息的; 这也间接说明了MP4文件并不是流式文件,它的诞生有很强的时代背景,在如今流式文件满天飞的时代,MP4是不能作为直播的封装格式存在的。
ffmpeg -i input.mp4 -movflags faststart output.mp4
这个指令可以将moov从mdat之后移到mdat之前。这样操作完成之后可以实现mp4视频的边下边播功能。回复MP4获取一整套MP4工具
本文部分图片来自:
https://www.cnblogs.com/renhui/p/10341555.html