能否像操作H.264编码一样为Opus编码设置PTS和DTS
Opus流PTS/DTS相关问题解答
1. Opus编码是否存在PTS和DTS
- Opus本身是纯音频编码标准,原始编码帧不内置PTS、DTS字段,两个时间戳都属于传输/封装层的附加元数据,这一点和H.264的逻辑完全一致:H.264的裸NALU也不携带时间戳,时间戳都是在RTP封装、容器封装阶段附加到数据块上的。
- 音频编码的帧解码顺序和显示顺序完全一致,所以正常场景下Opus流的PTS和DTS取值完全相同,不存在视频里B帧导致两个时间戳不一致的情况。
2. 能否在GStreamer中修改Opus流的PTS/DTS
完全可以,操作逻辑和你修改H.264 RTP流时间戳的方案完全通用:
- 如果你在
rtpopusdepay解RTP封装前处理包,直接修改RTP包对应的GstBuffer的pts、dts字段即可,修改后的数据往下传递给后续组件会直接生效。 - 如果你处理的是解封装后的Opus编码帧,同样直接修改承载Opus帧的
GstBuffer的时间戳字段即可,后续的解码、渲染、录制环节都会沿用你修改后的时间戳。
注意:修改时间戳时需要保证时间戳的递增步长和Opus单帧时长匹配,单帧Opus的时长固定为2.5ms、5ms、10ms、20ms、40ms或60ms中的一种,错误的时间戳步长会导致音频卡顿、音视频不同步等异常。
内容的提问来源于stack exchange,提问作者Usama
相关产品推荐
相关产品推荐

