获取合成时间 C++

Get composition time C++

我使用 libav 和 ffmpeg 制作了自己的 rtmp 服务器。我收到一个 flv 文件或 rtmp 流式传输 "containing" 一个 flv 文件作为输入。 由于我操作的是flv文件和每一帧的相对合成时间,我想知道有没有办法得到这个合成时间。 我认为给定我的 AVPacket,我可以分析原始缓冲区以提取正确的信息,因为我知道 flv header 是 11 个字节,然后在接下来的 16 个字节中我应该找到合成时间。 但是没用。

这是一个粗略的代码示例:

AVPacket pkt;
AVFormatContext *ifmt_ctx
while(true)
{
    AVStream *in_stream, *out_stream;

    ret = av_read_frame(ifmt_ctx, &pkt);
    //get the composite time
}

AVPacket 需要能够表示所有媒体格式中的数据。一些格式(如 mp4 和 flv)有一个 decode_time 和一个 composition_time,其他格式(如传输流)有一个 decode_time 和一个 presentation_time。为了方便程序员,AVPacket 选择了一种方法来存储信息并在需要时进行转换。幸运的是,它很容易转换回来:

auto cts = pkt.pts - pkt.dts