一、MP4v2 简介
首先官网上有这样的介绍:
C library and various command-line utilities which permit creation and modification of MP4 files
MP4v2 is an open source toolkit that provides an API to create and modify mp4 files as defined by ISO-IEC:14496-1:2001 MPEG-4 Systems.
This file format is derived from Apple's QuickTime file format that has been used as a multimedia file format in a variety of platforms and applications. It is a very powerful and extensible format that can accommodate practically any type of media.
MP4v2 was originally bundled with mpeg4ip library, but has been moved into its own maintained library due to a combination of the cessation of support of mpeg4ip and the usefulness of this library on its own.
翻译一下:
MP4V2 的前身是 MPEG4IP 开源项目中的一个功能库,但是现在 MPEG4IP 已经不在更新了。但是 MP4V2 还在更新,并且独立出来了。MP4V2 主要是作为 MP4 文件的录制一个开源库。
MPEG4IP 提供一个端对端的系统来实现音视频流的传输,支持包括 MPEG4/H.261/MPEG2/H.263/MP3/AAC/AMR等不同编码格式。现在关于Google相关的 code.google.com 已经无法打开了,因此只好提供下面的下载地址。
下载:mp4v2 package in Ubuntu
下载:Ubuntu_mp4v2_mp4 包含转MP4源码
下载:Ubuntu_mp4v2_mp4 包含转MP4源码
二、MP4v2编译
Windows下编译安装,参看:MP4V2库与MP4AV库编译
1、查看 ./configure --help
# ./configure --help
`configure' configures MP4v2 2.0.0 to adapt to many kinds of systems.
Usage: ./configure [OPTION]... [VAR=VALUE]...
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print `checking...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for `--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or `..']
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]
By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc. You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.
For better control, use the options below.
Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
--datadir=DIR read-only architecture-independent data [DATAROOTDIR]
--infodir=DIR info documentation [DATAROOTDIR/info]
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
--docdir=DIR documentation root [DATAROOTDIR/doc/mp4v2]
--htmldir=DIR html documentation [DOCDIR]
--dvidir=DIR dvi documentation [DOCDIR]
--pdfdir=DIR pdf documentation [DOCDIR]
--psdir=DIR ps documentation [DOCDIR]
Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM run sed PROGRAM on installed program names
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
Optional Features:
--disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--disable-debug disable debugging compilation
--disable-optimize disable optimizing compilation
--disable-fvisibility disable use of -fvisibility
--disable-gch disable GCC precompiled-headers
--disable-largefile disable LFS (large file support)
--disable-util disable build of command-line utilities
--enable-bi=ARCH enable -mARCH for bi-arch compilation
--enable-ub[=ARCHS] enable -arch ARCH for universal-binaries (OSX only)
--enable-cygwin-win32 when building with Cygwin use -mwin32
--enable-mingw-threads when building with MinGW use -mthreads
--disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors
--enable-shared[=PKGS] build shared libraries [default=yes]
--enable-static[=PKGS] build static libraries [default=yes]
--enable-fast-install[=PKGS]
optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-pic try to use only PIC/non-PIC objects [default=use
both]
--with-gnu-ld assume the C compiler uses GNU ld [default=no]
Some influential environment variables:
CXX C++ compiler command
CXXFLAGS C++ compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CC C compiler command
CFLAGS C compiler flags
CPP C preprocessor
CXXCPP C++ preprocessor
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
Report bugs to <kidjan@gmail.com>.
2、编写脚本
#!/bin/bash
if [ "$1" == "" ]; then
INSTALL_PATH=`pwd`/_install
else
if [ -d $1 ]; then
INSTALL_PATH=$1
else
exit 1
fi
fi
if [ ! -d $INSTALL_PATH ]; then
mkdir -p $INSTALL_PATH
fi
if [ -f config.log ]; then
make distclean
fi
./configure --prefix=$INSTALL_PATH \
--host=arm-none-linux-gnueabi \
--build=i486-linux-gnu \
--disable-option-checking \
--enable-optimize \
--disable-fvivibility \
--disable-gch \
--disable-largefile \
--enable-util \
--disable-cygmin-win32 \
--disable-mingw-threads \
--disable-dependency-tracking \
--enable-shared=yes \
--enable-static=no \
--enable-fast-install=yes \
--disable-libtool-lock \
--with-gnu-ld
if [ $? -eq 0 ]; then
make
if [ $? -eq 0 ]; then
make install
exit 0
fi
fi
3、设置权限并执行脚本
# chmod 777 build.sh
# ./build.sh
4、查看生成文件
编译成功之后,会在 _install 目录中生成如下的文件夹,如下所示:
看看lib目录下是否有mp4v2的库,如下所示:
想要知道如何使用这个库,可以参考util目录下的应用代码,如下所示:
三、测试
1、查看视频信息
mp4info <file-name>
示例:
# ./mp4info WUKELILI.mp4
/home/tarena/project/mp4v2/mp4v2-2.0.0/.libs/lt-mp4info version 2.0.0
WUKELILI.mp4:
Track Type Info
1 video H264 Main@3, 178.391 secs, 678 kbps, 768x432 @ 23.000039 fps
2 audio MPEG-4 AAC LC, 178.432 secs, 94 kbps, 24000 Hz
Artist: yinyuetai.com
Release Date: 01/30/13 20:51:30
Album: Yinyuetai
Comments: Yinyuetai Fukai
2、列出mp4的所有轨迹
mp4track [OPTION]... [PARAMETERS]... ACTION file...
# ./mp4track --help
Usage: mp4track [OPTION]... [PARAMETERS]... ACTION file...
For each mp4 file specified, perform the specified ACTION. An action must be
specified. Some options are not applicable to some actions.
ACTIONS
--list list all tracks in mp4
--enabled BOOL set trak.tkhd.flags (enabled bit)
--inmovie BOOL set trak.tkhd.flags (inMovie bit)
--inpreview BOOL set trak.tkhd.flags (inPreview bit)
--layer NUM set trak.tkhd.layer
--altgroup NUM set trak.tkhd.alternate_group
--volume FLOAT set trak.tkhd.volume
--width FLOAT set trak.tkhd.width
--height FLOAT set trak.tkhd.height
--language CODE set trak.mdia.mdhd.language
--hdlrname STR set trak.mdia.hdlr.name
--udtaname STR set trak.udta.name.value
--udtaname-remove remove trak.udta.name atom
--colr-list list all colr-boxes in mp4
--colr-add add colr-box to a video track
--colr-set set colr-box parms
--colr-remove remove colr-box from track
--pasp-list list all pasp-boxes in mp4
--pasp-add add pasp-box to a video track
--pasp-set set pasp-box parms
--pasp-remove remove pasp-box from track
PARAMETERS
--track-any act on any/all tracks
--track-index IDX act on track index IDX
--track-id ID act on track id ID
--colr-parms CSV where CSV is IDX1,IDX2,IDX3
--colr-parm-hd equivalent to --colr-parms=1,1,1
--colr-parm-sd equivalent to --colr-parms=6,1,6
--pasp-parms CSV where CSV is hSPACING,vSPACING
OPTIONS
-z, --optimize optimize mp4 file after modification
-y, --dryrun do not actually create or modify any files
-k, --keepgoing continue batch processing even after errors
-o, --overwrite overwrite existing files when creating
-f, --force force overwrite even if file is read-only
-q, --quiet equivalent to --verbose 0
-d, --debug NUM increase debug or long-option to set NUM
-v, --verbose NUM increase verbosity or long-option to set NUM
-h, --help print brief help or long-option for extended help
--version print version information and exit
DEBUG LEVELS (for raw mp4 file I/O)
0 supressed
1 add warnings and errors (default)
2 add table details
3 add implicits
4 everything
VERBOSE LEVELS
0 warnings and errors
1 normal informative messages (default)
2 more informative messages
3 everything
示例:
# ./mp4track --list WUKELILI.mp4
track[0] id=1
type = video
enabled = true
inMovie = false
inPreview = false
layer = 0
alternateGroup = 0
volume = 0.0000
width = 768.00000000
height = 432.00000000
language = UNDEFINED(0)
handlerName = 1359550061.h264#video:fps=23 - Imported with GPAC 0.5.0-rev4065
userDataName = <absent>
track[1] id=2
type = audio
enabled = true
inMovie = false
inPreview = false
layer = 0
alternateGroup = 0
volume = 1.0000
width = 0.00000000
height = 0.00000000
language = UNDEFINED(0)
handlerName = GPAC ISO Audio Handler
userDataName = <absent>
3、以人类可读的格式转储MP4结构
mp4file [OPTION]... ACTION file...
# ./mp4file --help
Usage: mp4file [OPTION]... ACTION file...
For each mp4 file specified, perform the specified ACTION. An action must be
specified. Some options are not applicable to some actions.
ACTIONS
--list list (summary information)
--optimize optimize mp4 structure
--dump dump mp4 structure in human-readable format
OPTIONS
-y, --dryrun do not actually create or modify any files
-k, --keepgoing continue batch processing even after errors
-q, --quiet equivalent to --verbose 0
-d, --debug NUM increase debug or long-option to set NUM
-v, --verbose NUM increase verbosity or long-option to set NUM
-h, --help print brief help or long-option for extended help
--version print version information and exit
DEBUG LEVELS (for raw mp4 file I/O)
0 supressed
1 add warnings and errors (default)
2 add table details
3 add implicits
4 everything
VERBOSE LEVELS
0 warnings and errors
1 normal informative messages (default)
2 more informative messages
3 everything
示例:
# ./mp4file --dump WUKELILI.mp4
"WUKELILI.mp4": Dumping meta-information...
"WUKELILI.mp4": type ftyp (ftyp)
"WUKELILI.mp4": majorBrand = isom
"WUKELILI.mp4": minorVersion = 1 (0x00000001)
"WUKELILI.mp4": <table entries suppressed>
"WUKELILI.mp4": type moov (moov)
"WUKELILI.mp4": type mvhd (moov.mvhd)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": creationTime = 3442395090 (0xcd2ec7d2)
"WUKELILI.mp4": modificationTime = 3442395090 (0xcd2ec7d2)
"WUKELILI.mp4": timeScale = 600 (0x00000258)
"WUKELILI.mp4": duration = 107059 (0x0001a233)
"WUKELILI.mp4": rate = 1.000000
"WUKELILI.mp4": volume = 1.000000
"WUKELILI.mp4": reserved1 = <70 bytes>
"WUKELILI.mp4": nextTrackId = 3 (0x00000003)
"WUKELILI.mp4": type iods (moov.iods)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": objectDescriptorId = 1 (0x001) <10 bits>
"WUKELILI.mp4": URLFlag = 0 (0x0) <1 bits>
"WUKELILI.mp4": includeInlineProfileLevelFlag = 0 (0x0) <1 bits>
"WUKELILI.mp4": reserved = 15 (0xf) <4 bits>
"WUKELILI.mp4": ODProfileLevelId = 255 (0xff)
"WUKELILI.mp4": sceneProfileLevelId = 255 (0xff)
"WUKELILI.mp4": audioProfileLevelId = 40 (0x28)
"WUKELILI.mp4": visualProfileLevelId = 21 (0x15)
"WUKELILI.mp4": graphicsProfileLevelId = 255 (0xff)
"WUKELILI.mp4": esIds
"WUKELILI.mp4": ociDescr
"WUKELILI.mp4": ipmpDescrPtr
"WUKELILI.mp4": extDescr
"WUKELILI.mp4": type trak (moov.trak)
"WUKELILI.mp4": type tkhd (moov.trak.tkhd)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 1 (0x000001)
"WUKELILI.mp4": creationTime = 3442395090 (0xcd2ec7d2)
"WUKELILI.mp4": modificationTime = 3442395090 (0xcd2ec7d2)
"WUKELILI.mp4": trackId = 1 (0x00000001)
"WUKELILI.mp4": reserved1 = <4 bytes> 00 00 00 00 |....|
"WUKELILI.mp4": duration = 107034 (0x0001a21a)
"WUKELILI.mp4": reserved2 = <8 bytes> 00 00 00 00 00 00 00 00 |........|
"WUKELILI.mp4": layer = 0 (0x0000)
"WUKELILI.mp4": alternate_group = 0 (0x0000)
"WUKELILI.mp4": volume = 0.000000
"WUKELILI.mp4": reserved3 = <2 bytes> 00 00 |..|
"WUKELILI.mp4": matrix = <36 bytes>
"WUKELILI.mp4": width = 768.000000
"WUKELILI.mp4": height = 432.000000
"WUKELILI.mp4": type mdia (moov.trak.mdia)
"WUKELILI.mp4": type mdhd (moov.trak.mdia.mdhd)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": creationTime = 3442395090 (0xcd2ec7d2)
"WUKELILI.mp4": modificationTime = 3442395090 (0xcd2ec7d2)
"WUKELILI.mp4": timeScale = 23000 (0x000059d8)
"WUKELILI.mp4": duration = 4103000 (0x003e9b58)
"WUKELILI.mp4": language = UNDEFINED(0) (0x0000)
"WUKELILI.mp4": reserved = <2 bytes> 00 00 |..|
"WUKELILI.mp4": type hdlr (moov.trak.mdia.hdlr)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": reserved1 = <4 bytes> 00 00 00 00 |....|
"WUKELILI.mp4": handlerType = vide
"WUKELILI.mp4": reserved2 = <12 bytes> 00 00 00 00 00 00 00 00 00 00 00 00 |............|
"WUKELILI.mp4": name = 1359550061.h264#video:fps=23 - Imported with GPAC 0.5.0-rev4065
"WUKELILI.mp4": type minf (moov.trak.mdia.minf)
"WUKELILI.mp4": type vmhd (moov.trak.mdia.minf.vmhd)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 1 (0x000001)
"WUKELILI.mp4": reserved = <8 bytes> 00 00 00 00 00 00 00 00 |........|
"WUKELILI.mp4": type dinf (moov.trak.mdia.minf.dinf)
"WUKELILI.mp4": type dref (moov.trak.mdia.minf.dinf.dref)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": entryCount = 1 (0x00000001)
"WUKELILI.mp4": type url (moov.trak.mdia.minf.dinf.dref.url )
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 1 (0x000001)
"WUKELILI.mp4": location = (null)
"WUKELILI.mp4": type stbl (moov.trak.mdia.minf.stbl)
"WUKELILI.mp4": type stsd (moov.trak.mdia.minf.stbl.stsd)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": entryCount = 1 (0x00000001)
"WUKELILI.mp4": type avc1 (moov.trak.mdia.minf.stbl.stsd.avc1)
"WUKELILI.mp4": reserved1 = <6 bytes> 00 00 00 00 00 00 |......|
"WUKELILI.mp4": dataReferenceIndex = 1 (0x0001)
"WUKELILI.mp4": reserved2 = <16 bytes> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
"WUKELILI.mp4": width = 768 (0x0300)
"WUKELILI.mp4": height = 432 (0x01b0)
"WUKELILI.mp4": reserved3 = <14 bytes> 00 48 00 00 00 48 00 00 00 00 00 00 00 01 |.H...H........|
"WUKELILI.mp4": compressorName =
"WUKELILI.mp4": reserved4 = <4 bytes> 00 18 ff ff |....|
"WUKELILI.mp4": type avcC (moov.trak.mdia.minf.stbl.stsd.avc1.avcC)
"WUKELILI.mp4": configurationVersion = 1 (0x01)
"WUKELILI.mp4": AVCProfileIndication = 77 (0x4d)
"WUKELILI.mp4": profile_compatibility = 64 (0x40)
"WUKELILI.mp4": AVCLevelIndication = 30 (0x1e)
"WUKELILI.mp4": reserved = 63 (0x3f) <6 bits>
"WUKELILI.mp4": lengthSizeMinusOne = 3 (0x3) <2 bits>
"WUKELILI.mp4": reserved1 = 7 (0x7) <3 bits>
"WUKELILI.mp4": numOfSequenceParameterSets = 1 (0x01) <5 bits>
"WUKELILI.mp4": <table entries suppressed>
"WUKELILI.mp4": numOfPictureParameterSets = 1 (0x01)
"WUKELILI.mp4": <table entries suppressed>
"WUKELILI.mp4": type btrt (moov.trak.mdia.minf.stbl.stsd.avc1.btrt)
"WUKELILI.mp4": bufferSizeDB = 48142 (0x0000bc0e)
"WUKELILI.mp4": avgBitrate = 1428296 (0x0015cb48)
"WUKELILI.mp4": maxBitrate = 678352 (0x000a59d0)
"WUKELILI.mp4": type stts (moov.trak.mdia.minf.stbl.stts)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": entryCount = 1 (0x00000001)
"WUKELILI.mp4": <table entries suppressed>
"WUKELILI.mp4": type ctts (moov.trak.mdia.minf.stbl.ctts)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": entryCount = 3966 (0x00000f7e)
"WUKELILI.mp4": <table entries suppressed>
"WUKELILI.mp4": type stss (moov.trak.mdia.minf.stbl.stss)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": entryCount = 64 (0x00000040)
"WUKELILI.mp4": <table entries suppressed>
"WUKELILI.mp4": type stsc (moov.trak.mdia.minf.stbl.stsc)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": entryCount = 156 (0x0000009c)
"WUKELILI.mp4": <table entries suppressed>
"WUKELILI.mp4": type stsz (moov.trak.mdia.minf.stbl.stsz)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": sampleSize = 0 (0x00000000)
"WUKELILI.mp4": sampleCount = 4103 (0x00001007)
"WUKELILI.mp4": <table entries suppressed>
"WUKELILI.mp4": type stco (moov.trak.mdia.minf.stbl.stco)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": entryCount = 380 (0x0000017c)
"WUKELILI.mp4": <table entries suppressed>
"WUKELILI.mp4": type trak (moov.trak)
"WUKELILI.mp4": type tkhd (moov.trak.tkhd)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 1 (0x000001)
"WUKELILI.mp4": creationTime = 3442395090 (0xcd2ec7d2)
"WUKELILI.mp4": modificationTime = 3442395090 (0xcd2ec7d2)
"WUKELILI.mp4": trackId = 2 (0x00000002)
"WUKELILI.mp4": reserved1 = <4 bytes> 00 00 00 00 |....|
"WUKELILI.mp4": duration = 107059 (0x0001a233)
"WUKELILI.mp4": reserved2 = <8 bytes> 00 00 00 00 00 00 00 00 |........|
"WUKELILI.mp4": layer = 0 (0x0000)
"WUKELILI.mp4": alternate_group = 0 (0x0000)
"WUKELILI.mp4": volume = 1.000000
"WUKELILI.mp4": reserved3 = <2 bytes> 00 00 |..|
"WUKELILI.mp4": matrix = <36 bytes>
"WUKELILI.mp4": width = 0.000000
"WUKELILI.mp4": height = 0.000000
"WUKELILI.mp4": type mdia (moov.trak.mdia)
"WUKELILI.mp4": type mdhd (moov.trak.mdia.mdhd)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": creationTime = 3442395090 (0xcd2ec7d2)
"WUKELILI.mp4": modificationTime = 3442395090 (0xcd2ec7d2)
"WUKELILI.mp4": timeScale = 24000 (0x00005dc0)
"WUKELILI.mp4": duration = 4282368 (0x00415800)
"WUKELILI.mp4": language = UNDEFINED(0) (0x0000)
"WUKELILI.mp4": reserved = <2 bytes> 00 00 |..|
"WUKELILI.mp4": type hdlr (moov.trak.mdia.hdlr)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": reserved1 = <4 bytes> 00 00 00 00 |....|
"WUKELILI.mp4": handlerType = soun
"WUKELILI.mp4": reserved2 = <12 bytes> 00 00 00 00 00 00 00 00 00 00 00 00 |............|
"WUKELILI.mp4": name = GPAC ISO Audio Handler
"WUKELILI.mp4": type minf (moov.trak.mdia.minf)
"WUKELILI.mp4": type smhd (moov.trak.mdia.minf.smhd)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": reserved = <4 bytes> 00 00 00 00 |....|
"WUKELILI.mp4": type dinf (moov.trak.mdia.minf.dinf)
"WUKELILI.mp4": type dref (moov.trak.mdia.minf.dinf.dref)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": entryCount = 1 (0x00000001)
"WUKELILI.mp4": type url (moov.trak.mdia.minf.dinf.dref.url )
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 1 (0x000001)
"WUKELILI.mp4": location = (null)
"WUKELILI.mp4": type stbl (moov.trak.mdia.minf.stbl)
"WUKELILI.mp4": type stsd (moov.trak.mdia.minf.stbl.stsd)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": entryCount = 1 (0x00000001)
"WUKELILI.mp4": type mp4a (moov.trak.mdia.minf.stbl.stsd.mp4a)
"WUKELILI.mp4": reserved1 = <6 bytes> 00 00 00 00 00 00 |......|
"WUKELILI.mp4": dataReferenceIndex = 1 (0x0001)
"WUKELILI.mp4": soundVersion = 0 (0x0000)
"WUKELILI.mp4": reserved2 = <6 bytes> 00 00 00 00 00 00 |......|
"WUKELILI.mp4": channels = 2 (0x0002)
"WUKELILI.mp4": sampleSize = 16 (0x0010)
"WUKELILI.mp4": compressionId = 0 (0x0000)
"WUKELILI.mp4": packetSize = 0 (0x0000)
"WUKELILI.mp4": timeScale = 1572864000 (0x5dc00000)
"WUKELILI.mp4": type esds (moov.trak.mdia.minf.stbl.stsd.mp4a.esds)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": ESID = 0 (0x0000)
"WUKELILI.mp4": streamDependenceFlag = 0 (0x0) <1 bits>
"WUKELILI.mp4": URLFlag = 0 (0x0) <1 bits>
"WUKELILI.mp4": OCRstreamFlag = 0 (0x0) <1 bits>
"WUKELILI.mp4": streamPriority = 0 (0x00) <5 bits>
"WUKELILI.mp4": decConfigDescr
"WUKELILI.mp4": objectTypeId = 64 (0x40)
"WUKELILI.mp4": streamType = 5 (0x05) <6 bits>
"WUKELILI.mp4": upStream = 0 (0x0) <1 bits>
"WUKELILI.mp4": reserved = 1 (0x1) <1 bits>
"WUKELILI.mp4": bufferSizeDB = 745 (0x0002e9) <24 bits>
"WUKELILI.mp4": maxBitrate = 107048 (0x0001a228)
"WUKELILI.mp4": avgBitrate = 94248 (0x00017028)
"WUKELILI.mp4": decSpecificInfo
"WUKELILI.mp4": info = <7 bytes> 13 10 56 e5 9d 48 00 |..V..H.|
"WUKELILI.mp4": profileLevelIndicationIndexDescr
"WUKELILI.mp4": slConfigDescr
"WUKELILI.mp4": predefined = 2 (0x02)
"WUKELILI.mp4": ipiPtr
"WUKELILI.mp4": ipIds
"WUKELILI.mp4": ipmpDescrPtr
"WUKELILI.mp4": langDescr
"WUKELILI.mp4": qosDescr
"WUKELILI.mp4": regDescr
"WUKELILI.mp4": extDescr
"WUKELILI.mp4": type stts (moov.trak.mdia.minf.stbl.stts)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": entryCount = 1 (0x00000001)
"WUKELILI.mp4": <table entries suppressed>
"WUKELILI.mp4": type stsc (moov.trak.mdia.minf.stbl.stsc)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": entryCount = 3 (0x00000003)
"WUKELILI.mp4": <table entries suppressed>
"WUKELILI.mp4": type stsz (moov.trak.mdia.minf.stbl.stsz)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": sampleSize = 0 (0x00000000)
"WUKELILI.mp4": sampleCount = 4182 (0x00001056)
"WUKELILI.mp4": <table entries suppressed>
"WUKELILI.mp4": type stco (moov.trak.mdia.minf.stbl.stco)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": entryCount = 381 (0x0000017d)
"WUKELILI.mp4": <table entries suppressed>
"WUKELILI.mp4": type udta (moov.udta)
"WUKELILI.mp4": type meta (moov.udta.meta)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": type hdlr (moov.udta.meta.hdlr)
"WUKELILI.mp4": version = 0 (0x00)
"WUKELILI.mp4": flags = 0 (0x000000)
"WUKELILI.mp4": reserved1 = 0 (0x00000000)
"WUKELILI.mp4": handlerType = <4 bytes> 6d 64 69 72 |mdir|
"WUKELILI.mp4": reserved2 = <12 bytes> 00 00 00 00 00 00 00 00 00 00 00 00 |............|
"WUKELILI.mp4": name = <1 bytes> 00 |.|
"WUKELILI.mp4": type ilst (moov.udta.meta.ilst)
"WUKELILI.mp4": type ?alb (moov.udta.meta.ilst.?alb)
"WUKELILI.mp4": type data (moov.udta.meta.ilst.?alb.data)
"WUKELILI.mp4": typeReserved = 0 (0x0000)
"WUKELILI.mp4": typeSetIdentifier = 0 (0x00)
"WUKELILI.mp4": typeCode = UTF-8 (0x01)
"WUKELILI.mp4": locale = 0 (0x00000000)
"WUKELILI.mp4": metadata = <9 bytes> 59 69 6e 79 75 65 74 61 69 |Yinyuetai|
"WUKELILI.mp4": type ?ART (moov.udta.meta.ilst.?ART)
"WUKELILI.mp4": type data (moov.udta.meta.ilst.?ART.data)
"WUKELILI.mp4": typeReserved = 0 (0x0000)
"WUKELILI.mp4": typeSetIdentifier = 0 (0x00)
"WUKELILI.mp4": typeCode = UTF-8 (0x01)
"WUKELILI.mp4": locale = 0 (0x00000000)
"WUKELILI.mp4": metadata = <13 bytes> 79 69 6e 79 75 65 74 61 69 2e 63 6f 6d |yinyuetai.com|
"WUKELILI.mp4": type ?cmt (moov.udta.meta.ilst.?cmt)
"WUKELILI.mp4": type data (moov.udta.meta.ilst.?cmt.data)
"WUKELILI.mp4": typeReserved = 0 (0x0000)
"WUKELILI.mp4": typeSetIdentifier = 0 (0x00)
"WUKELILI.mp4": typeCode = UTF-8 (0x01)
"WUKELILI.mp4": locale = 0 (0x00000000)
"WUKELILI.mp4": metadata = <15 bytes> 59 69 6e 79 75 65 74 61 69 20 46 75 6b 61 69 |Yinyuetai Fukai|
"WUKELILI.mp4": type ?day (moov.udta.meta.ilst.?day)
"WUKELILI.mp4": type data (moov.udta.meta.ilst.?day.data)
"WUKELILI.mp4": typeReserved = 0 (0x0000)
"WUKELILI.mp4": typeSetIdentifier = 0 (0x00)
"WUKELILI.mp4": typeCode = UTF-8 (0x01)
"WUKELILI.mp4": locale = 0 (0x00000000)
"WUKELILI.mp4": metadata = <17 bytes>
"WUKELILI.mp4": type mdat (mdat)
"WUKELILI.mp4": type free (free)