#4825·ZLMediaKit

[TS转推] 音频为MP2/MP3时,RTP+TS流出流的音频PTS恒为0,收端有画面无声音

Author: jiaxiluoCreated Sep 7, 2026Updated Sep 8, 2026
Labelsbug

现象描述

使用 startSendRtp 接口(type=2,RTP+TS)将 RTSP 推入的直播流转推 UDP 组播/单播时,若音频编码为 MP2(MPEG audio),发出的 TS 流中音频 PES 的 PTS 全部为 0(每一帧都是 0,从不递增),视频 PTS 正常。

收端表现:按时间戳调度的播放器(实测 VLC 3.0.21)画面正常但完全无声;用 ffmpeg -f null 解码(不依赖时间戳)音频数据本身完好,说明音频负载正确、仅 TS 封装时时间戳写错。AAC 音频不受影响,PTS 正常。

如何复现?

  1. 首先,推一路 MP2 音频的 RTSP 流进 zlm:
bash
ffmpeg -f lavfi -i testsrc2=size=640x360:rate=25 -f lavfi -i sine=frequency=440:sample_rate=48000 \
  -c:v libx264 -preset ultrafast -b:v 500k -c:a mp2 -b:a 128k -g 25 -f rtsp rtsp://127.0.0.1:554/live/test
  1. 然后,发起 TS 转推:
bash
curl "http://127.0.0.1:8088/index/api/startSendRtp?secret=xxx&vhost=__defaultVhost__&app=live&stream=test&dst_url=127.0.0.1&dst_port=6004&is_udp=1&ssrc=1&type=2"
  1. 期望音频 PTS 正常递增,结果抓包解析 UDP 流(剥 12 字节 RTP 头后逐个解析 188 字节 TS 包中音频 PID 的 PES 头)得到:
音频(stream_id 0xC0~0xDF): PTS=0, PTS=0, PTS=0 ... 恒为0(每帧都是0,从不递增)
视频: PTS 正常单调递增,跨度与实时一致

对照实验:换 -c:a aac 重推,同样步骤音频 PTS 完全正常。ffmpeg 3.4 与 4.4 推流端均复现,与推流端版本无关。

相关日志或截图

展开查看详细日志
#startSendRtp 正常返回,无任何报错日志:
# {"code":0,"local_port":30782}
# RtpSender.cpp startSend | start udp active send rtp to: 127.0.0.1:6004
# RtpSender.cpp onConnect | startSend rtp success: 127.0.0.1:6004, data_type: 2, con_type: 1

配置

展开查看详细配置
ini
# 默认 config.ini,未做与转推相关的修改;RTSP 推流方式注册为 __defaultVhost__/live/test

各种环境信息

#崩溃信息backtrace粘贴至此

Source: ZLMediaKit/ZLMediaKit

View original on GitHubView discussion on GitHub