gpt4 book ai didi

c - av_find_best_stream 与 avcodec_find_decoder 的解码器返回

转载 作者:行者123 更新时间:2023-12-02 01:21:37 27 4
gpt4 key购买 nike

libav 的文档 av_find_best_stream函数(libav 11.7、Windows、i686、GPL)指定一个参数,该参数可用于接收指向适当 AVCodec 的指针:

decoder_ret - if non-NULL, returns the decoder for the selected stream

还有 avcodec_find_decoder函数可以找到给定 ID 的 AVCodec

不过,官方demuxing + decoding example使用 av_find_best_stream 查找流,但选择使用 avcodec_find_decoder 查找编解码器代替 av_find_best_stream 的编解码器返回参数:

ret = av_find_best_stream(fmt_ctx, type, -1, -1, NULL, 0);
...
stream_index = ret;
st = fmt_ctx->streams[stream_index];
...
/* find decoder for the stream */
dec = avcodec_find_decoder(st->codecpar->codec_id);

与类似的东西相反:

ret = av_find_best_stream(fmt_ctx, type, -1, -1, &dec, 0);

我的问题很简单:使用 av_find_best_stream 的返回参数与使用 avcodec_find_decoder 查找 AVCodec 之间有区别吗?

我问的原因是因为该示例选择使用 avcodec_find_decoder 而不是看似更方便的返回参数,我不知道该示例是否出于特定原因这样做。文档本身有点参差不齐且不连贯,因此很难判断这样的事情是否出于特定的重要原因而完成。我不知道这个例子是在暗示它“应该”那样做,还是这个例子的作者是出于一些更武断的个人原因。

最佳答案

av_find_best_stream 在内部使用 avcodec_find_decoder 的方式与您的代码示例中的方式几乎相同。然而,当向它请求解码器时,av_find_best_stream 行为发生了变化 - 即,它将尝试在每个候选流上使用 avcodec_find_decoder,如果失败,它将丢弃候选人,然后继续下一个。最后它将返回最佳流及其解码器。如果没有请求解码器,它只会返回最佳流,而不检查它是否可以解码。

因此,如果您只想获取单个视频/音频流,而不打算编写一些自定义流选择逻辑,那么我认为使用 av_find_best_stream 获取解码器没有任何缺点。

关于c - av_find_best_stream 与 avcodec_find_decoder 的解码器返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39905172/

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