PTS和DTS解读
来源:互联网 发布:java字符串大小写转换 编辑:程序博客网 时间:2024/06/05 09:28
在视频编解码中,pts和dts是保证视频能正常播放的参数。
视频为h264编码时,当只有I和P帧时,pts和dts相同,只需要按照pts进行解码播放即可。h264的Profiles为baseline时,只有I帧和P帧。
Profiles为main以上时,包含了I,P,B帧。当存在B帧时,pts和dts可能会不同。
比如当遇到如下帧序列时:
P1 P2 P3 P4
type I B P P
pts 1 2 3 4
dts 1 4 2 3
P2解码依赖P1和P3,需要先解码P3才能解出P2。
在调用ffmpeg的libcodec库avcodec_decode_video2函数时,返回值正确,但是got_picture却始终为0,即是由于av_read_frame函数是按照pts读取解码帧,遇到如上情况找不到解码参考帧时解码失败造成的。如果不处理会造成丢帧。
解决方法:
使用skipped_frame记录解码失败帧数量(即got_picture为0的次数),然后在解码完成后加上如下代码。
for (int i = skipped_frame; i > 0; i--)
{
ret = avcodec_decode_video2(pCodecCtx, pFrame, &got_picture, packet);
if (got_picture) {
SaveFrameToBMP("pic.bmp", pFrameRGB->data[0], pCodecCtx->width, pCodecCtx->height, 24, index++);
}
}
注意:
时间戳将每一秒分成90000份。flv的tag中的dts单位为毫秒,即把一毫秒分成90份(dts/90);ts的时间戳单位为秒(dts/90000)。如果需要做文件格式转换需要转换时间单位。
在所有的文件封装格式(包括传输协议RTMP)中,都是按照编解码顺序dts来存储帧的。参考链接问答:http://www.cppblog.com/elva/archive/2010/06/21/118355.html
- PTS和DTS解读
- 从I、B、P帧来解读DTS和PTS
- PTS和DTS
- DTS和PTS
- DTS和PTS
- DTS和PTS的分析
- AVPacket的pts和dts
- H264的DTS和PTS
- DTS和PTS的解释
- DTS/PTS
- pts & dts
- DTS/PTS
- DTS和PTS(HLS音视频同步)
- FFMPEG 中dts和pts区别
- h.264中的DTS和PTS
- FFmpeg中的时间戳(DTS和PTS
- FFMPEG 中dts和pts区别
- 理解音视频 PTS 和 DTS
- STL源码分析之vector(一) 基本数据类型及构造函数
- 数据集合划分
- Guitar Pro 5手机版-安卓版-ios版地址
- ubuntu编译caffe遇到未定义的引用cublas*_v2错误
- keyshot4破解版下载 64位/32位附安装教程
- PTS和DTS解读
- 翻译 | 开始使用 TypeScript 和 React
- Mysql 忘记root密码的解决方法
- jenkins面试题
- 在Java中对Redis的缓存操作
- js打砖块游戏
- maven提示invalid LOC header (bad signature)的解决办法 今天执行mvn test的时候提示: 错误:读取 /home/subaochen/.m2/reposi
- 看完你就知道什么是 HTTPS 了------其实我发现很多人不懂https, 包括我!所以来学下这篇佳作!
- IOS App发布详细步骤