DTS和PTS的分析(FFMPEG、HLS相关)
2015-11-27 10:41
281 查看
来在研究HLS(HTTP Live Streaming),以实现android上播放m3u8文件。由于TS段的切分不统一,每个视频网站给出的m3u8 playlists总有差别,在时间戳显示上有差异,所以对DTS和PTS进行了研究。
DTS和PTS是音视频同步的关键技术,同时也是丢帧策略密切相关。
dts/pts定义
dts: decoding time stamp pts: present time stamp
在ISO/IEC13818-1中制定90k
Hz 的时钟,如果编码帧频是30,那么时间戳间隔就该是90000 / 30 = 3000。 在FFMPEG中有三种时间单位:秒、微秒和dts/pts。从dts/pts转化为微秒公式:
DTS和PTS是音视频同步的关键技术,同时也是丢帧策略密切相关。
dts/pts定义
dts: decoding time stamp pts: present time stamp
在ISO/IEC13818-1中制定90k
Hz 的时钟,如果编码帧频是30,那么时间戳间隔就该是90000 / 30 = 3000。 在FFMPEG中有三种时间单位:秒、微秒和dts/pts。从dts/pts转化为微秒公式:
其中AV_TIME_BASE为1,000,000,denominator为90,000。 拿到m3u8播放列表后,首先进行解析。HTTP Live Streaming标准草案可以从这里http://tools.ietf.org/html/draft-pantos-http-live-streaming-08查看。 解析代码在ffmpeg/libavformat/hls.c中 | ||||||||||||||||||||||||||||||||||||||||
parse_playlist函数 | ||||||||||||||||||||||||||||||||||||||||
解析播放列表的问题 | ||||||||||||||||||||||||||||||||||||||||
当解析到#EXT-X-TARGETDURATION标签时,后面紧跟着的是TS段的最大时长,当前没有什么用。#EXTINF标签后紧跟的是当前TS段的时长,当EXT-X-VERSION标签大于等于3时,TS段的时长可以为小数,当前(2012-07-26)的FFMPEG代码还不支持EXT-X-VERSION标签的判断,TS段的时长也为整数。保存了当前段的时长,单位为秒。 | ||||||||||||||||||||||||||||||||||||||||
当前草案中还有EXT-X-DISCONTINUITY标签,它表征其后面的视频段文件和之前的不连续,这意味着文件格式、时间戳顺序、编码参数等的变化。但是很遗憾,当前FFMPEG仍然不支持,这意味着该标签出现后,后续的PES中携带的dts和pts将重新从零开始计数。
|
相关文章推荐
- shell 快速浏览
- browser-ua
- ios中的开发一些小工具(就是一个写UIView的自定义组件的脱离环境,可以重新使用)解耦
- linux创建sftp账号及访问权限
- 剖析js对浮点数运算精度问题
- git 使用 常用配置
- rvm安装ruby简易教程
- 无法安装64位版本的Office,因为在您的PC上找到了以下32位程序:
- android中shape、selector、color
- UINavigationItem UINavigationBar 关系分析[转]
- Using GLEW, GLFW, and GLM
- C# 中的委托与事件
- SQL SUM() 函数、SQL GROUP BY 语句、SQL HAVING 子句
- C/C++——多态性和虚函数
- coderforce Codeforces Round #333 (Div. 1) A. The Two Routes
- 【Leetcode】Permutations
- CHM文件打不开解决办法
- asp.net mvc 外网获取不到port问题解决
- Oracle空值做计算注意啦
- 行为驱动开发iOS