我希望将从RTSP源接收到的h264视频流保存到MP4容器中。与其他问题不同,我所面临的挑战是:
提供的PTS。
这是我做过的代码
// ffmpeg
pkt->data = ..;
pkt->size = ..;
pkt->flags = bKeyFrame? AV_PKT_FLAG_KEY : 0;
pkt->dts = AV_NOPTS_VALUE;
pkt->pts = PTS;
// PTS is based on epoch microseconds so I ignored re-scaling.
//av_packet_rescale_ts(pkt, { 1, AV_TIME_BASE }, muxTimebase);
auto ret = av_interleaved_write_frame(m_pAVFormatCtx, pkt);
我收到了很多这样的错误消息:“应用程序提供了无效的、非单调地将dts增加到muxer .”。
结果: mp4文件可通过VLC播放,但FPS仅为原始FPS的一半,视频持续时间不正确(VLC显示一个奇怪的数字)。
那么,在发送到容器之前,如何设置正确的DTS和PTS?
更新:我尝试了一些更改,虽然还没有成功,但是我发现帧速率下降的原因是由于muxer丢弃了不正确的帧。此外,如果我设置的PTS和DTS值太大,一些球员,如VLC必须延迟一段时间才能显示视频。
发布于 2020-02-13 08:56:43
“流只有RTP/rtp.pcp.给出的PTS”这是不正常的。这里出了点问题。
如果没有dts,这意味着您应该只使用pts。如果确实有B帧,那么dts值将与pts不同。
试试你的代码dts = pts
,看看会发生什么。
https://stackoverflow.com/questions/60181618
复制相似问题