从ffmpeg代码层可以看出,解析输入的媒体文件从open_inpufile->avformat_open_input->read_head(钩子函数,真实值为ff_mov_dumux->mov_read_head)完成。mov_read_head函数为解析整个MP4文件(MP4文件结构请参考http://blog.sina.com.cn/s/blog_48f93b530100jz4b.html)。获取时长是在read_mvhd函数里面。
总时长 = duration/time_scale。
ffmpeg代码:
fc为输入文件的AVFormatContext,c->duration 和 c->time_scale为mvhd box里面的字段,AV_TIME_BASE为时间戳(可以理解为c->duration/c->time_scale 的结果再乘AV_TIME_BASE)