gpt4 book ai didi

c++ - 将帧号/索引添加到 AVFrame 对象

转载 作者:行者123 更新时间:2023-12-04 23:10:23 26 4
gpt4 key购买 nike

我有一个应用程序可以对来自 H264 摄像机的视频流进行编码并将其存储在磁盘上。在应用程序的另一部分,我正在加载这部电影并将其展示给用户。除了我在编码帧时添加的唯一帧索引号与我在解码文件时获得的帧号不同之外,所有这些都有效。
这是我编码帧时的代码片段。我使用“display_picture_number”来存储这个唯一的帧号,这是正确的吗?为什么数字不一样?

void MovieCodec::createFrame( const MyImage& image, AVFrame* frame )
{
frame->format = streamPixelFormat;
frame->width = image.width();
frame->height = image.height();
frame->pict_type = AV_PICTURE_TYPE_P;
frame->display_picture_number = image.uniqueImageNumber();

int ret = av_image_alloc( frame->data, frame->linesize, frame->width, frame->height, AV_PIX_FMT_BGR24, 1);

if (ret < 0)
{
return;
}

struct SwsContext* sws_ctx = sws_getContext((int)image.width(), (int)image.height(), AV_PIX_FMT_BGR24,
(int)image.width(), (int)image.height(), streamPixelFormat,
0, NULL, NULL, NULL);

const uint8_t* rgbData[1] = { (uint8_t* )image.getData() };
int rgbLineSize[1] = { 3 * (int)image.width() };

sws_scale(sws_ctx, rgbData, rgbLineSize, 0, image.height(), frame->data, frame->linesize);
}

最佳答案

查看AVFrame结构文档。

  • 您不能设置 display_picture_number 因为这在编码期间不会被 ffmpeg 处理
  • 您可以使用 AVFrame 的 metadata而是存储一些“笔记”
  • 关于c++ - 将帧号/索引添加到 AVFrame 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70850796/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com