获取合成时间C ++

问题描述 投票:0回答:1

我使用libav和ffmpeg制作了自己的rtmp服务器。我收到一个flv文件或“包含” flv文件的rtmp流作为输入。由于我操纵了flv文件和每帧的相对合成时间,因此我想知道是否有一种方法可以获取该合成时间。我以为有了我的AVPacket,我可以分析原始缓冲区以提取正确的信息,因为我知道flv标头是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
}
c++ ffmpeg video-streaming streaming libav
1个回答
0
投票

AVPacket必须能够表示以所有媒体格式找到的数据。某些格式(例如mp4和flv)具有解码时间和composition_time,其他格式(例如传输流)具有解码时间和presentation_time。为了使程序员更轻松,AVPacket选择了一种方法来存储信息并在需要时进行转换。幸运的是,它很容易转换回来:

auto cts = pkt.pts - pkt.dts

© www.soinside.com 2019 - 2024. All rights reserved.